Skip to content

12.6 数据删除规范 ​

建议遵守

删除的默认形态是软删除;物理删除是受控例外。删除前做引用守卫,删除后可追溯。

默认:软删除 ​

go
// repository 标准入口
repo.SoftDelete(ctx, "id", id)
repo.SoftDeleteByID(ctx, id)

// 批量:基座 BatchDelete(逐条软删)
spec.BatchDelete(ctx, ids)

软删后对查询不可见(Ctx 注入 del_flag=0),数据保留可审计、可恢复(运维按需 UPDATE 回 0)。

例外:物理删除 ​

仅限数据本身有保留期语义的场景(超期日志、临时文件索引):

go
ctx = hooks.WithPhysicalDelete(ctx)   // 显式放行

放行要收敛在最小函数作用域,注释说明依据(如"超过 job.logRetentionDays")。

删除守卫 ​

删除被引用数据前做存在性检查,冲突时上抛守卫错误:

错误码场景
CodeHasChildren树形表存在下级(部门/菜单/分类)
CodeInUse关键记录仍被引用(用户在角色中等)

守卫检查用 ExistsByCond(软删/租户已过滤)。

前端交互 ​

  • 危险删除(批量、不可逆)必须二次确认
  • 删除失败展示后端 msg(守卫原因)
  • 不做"假删除"(前端移除行但不调接口)

审计要求 ​

删除操作经 RouteSpec Log/LogType=delete 留操作日志——谁删了什么可追溯。物理删除场景本身不落业务表,但任务日志留有执行记录。

相关 ​

小蚂蚁云团队 · 提供技术支持