Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
refactor(service): 修改banner和guild删除逻辑为软删除 fix(service): 修复删除操作使用软删除而非物理删除 build: 添加SQLite测试仓库实现 docs: 新增奖励管理字段拆分和批量抽奖UI改造文档 ci: 更新CI忽略文件 style: 清理无用资源文件
3.2 KiB
3.2 KiB
结论与遗漏点
- 当前事务级联已覆盖核心链路,但仍有以下遗漏按业务应清理:
- 删除用户:
- 订单子表:
order_items.order_id IN(用户订单ID)(模型:internal/repository/mysql/model/order_items.gen.go:17) - 支付流水:
payment_preorders/order_id、payment_transactions/order_id、payment_refunds/order_id(模型:payment_preorders.gen.go:16、payment_transactions.gen.go:16、payment_refunds.gen.go:16) - 邀请关系:
user_invites.inviter_id = 用户ID OR invitee_id = 用户ID(模型:user_invites.gen.go:18,19) - 资产转赠流水:
user_inventory_transfers.from_user_id = 用户ID OR to_user_id = 用户ID,以及通过inventory_id引用用户资产(模型:user_inventory_transfers.gen.go:17-19)
- 订单子表:
- 删除活动:
- 发货记录(与资产关联):
shipping_records.inventory_id IN(活动产生的 user_inventory.id)(模型:shipping_records.gen.go:21) - 资产转赠流水:
user_inventory_transfers.inventory_id IN(活动产生的 user_inventory.id)
- 发货记录(与资产关联):
- 删除期:
- 可选(视运营策略):删除与该期绑定的系统道具模板
system_item_cards.issue_id = 期ID(模型:system_item_cards.gen.go:24)。若模板为系统公共配置且希望保留,请跳过。
- 可选(视运营策略):删除与该期绑定的系统道具模板
改造方案
- 用户级联(
internal/service/user/batch_user.go:32)- 查出该用户的订单ID集合 → 删除
order_items按order_id IN (...) - 按订单ID集合删除:
payment_preorders、payment_transactions、payment_refunds - 删除邀请关系:
user_invites按inviter_id = userID OR invitee_id = userID - 删除资产转赠:
user_inventory_transfers按from_user_id = userID OR to_user_id = userID;并按用户资产ID集合删除inventory_id IN (...)
- 查出该用户的订单ID集合 → 删除
- 活动级联(
internal/service/activity/activity_delete.go:8-106)- 查出活动对应
user_inventory.id集合 - 删除发货记录:
shipping_records.inventory_id IN (...) - 删除资产转赠流水:
user_inventory_transfers.inventory_id IN (...)
- 查出活动对应
- 期级联(
internal/service/activity/issue_delete.go:8-55)- 可选:删除
system_item_cards按issue_id = 期ID(若模板为期专用且不保留)
- 可选:删除
技术细节
- 顺序:先删子表(items、支付、转赠、发货)→ 再删主表(orders/users/activities/issues)
- 性能:大表采用分批删除(如 5000/批);所有条件列均为主/索引列(
user_id、order_id、inventory_id)以保证扫描性能 - 幂等:条件删除无记录时不报错;重复执行安全
验收标准
- 删除用户后,不残留该用户的订单行、支付流水、邀请关系、资产转赠流水、发货及统计(统计表可保留)
- 删除活动后,不残留与该活动资产相关的发货记录与资产转赠流水
- 删除期后(若启用模板清理),不残留该期范围的系统卡模板
- 编译通过,现有接口行为不变(仅增强删除逻辑);事务全链路失败回滚
执行计划
- 补充三处服务方法的事务删除步骤,并针对大数据量路径加分批删除;完成后编译验证和快速自测(构造少量数据路径)。
请确认是否按上述方案继续,我将直接补齐代码并完成验证。