45 lines
935 B
Go
45 lines
935 B
Go
package core
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// SoftDelete 软删除模型 - 嵌入到需要软删除的模型中
|
|
type SoftDelete struct {
|
|
DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"` // 删除时间(为空表示未删除)
|
|
}
|
|
|
|
// IsDeleted 检查是否已删除
|
|
func (sd *SoftDelete) IsDeleted() bool {
|
|
return sd.DeletedAt != nil
|
|
}
|
|
|
|
// Delete 标记为已删除
|
|
func (sd *SoftDelete) Delete() {
|
|
now := time.Now()
|
|
sd.DeletedAt = &now
|
|
}
|
|
|
|
// Restore 恢复(取消删除)
|
|
func (sd *SoftDelete) Restore() {
|
|
sd.DeletedAt = nil
|
|
}
|
|
|
|
// ISoftDeleter 软删除接口 - 定义软删除相关方法
|
|
type ISoftDeleter interface {
|
|
IsDeleted() bool
|
|
Delete()
|
|
Restore()
|
|
}
|
|
|
|
// applySoftDelete 在查询中应用软删除过滤
|
|
func applySoftDelete(q IQuery, unscoped bool) IQuery {
|
|
if unscoped {
|
|
// 忽略软删除,包含已删除的记录
|
|
return q
|
|
}
|
|
|
|
// 默认只查询未删除的记录
|
|
return q.Where("deleted_at IS NULL")
|
|
}
|