gin-base/db/core/soft_delete.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")
}