bindbox-game/.trae/documents/补齐删除级联遗漏清单与改造计划.md
邹方成 2a89a1ab9d
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
feat(admin): 更新前端资源文件及修复相关功能
refactor(service): 修改banner和guild删除逻辑为软删除
fix(service): 修复删除操作使用软删除而非物理删除

build: 添加SQLite测试仓库实现
docs: 新增奖励管理字段拆分和批量抽奖UI改造文档

ci: 更新CI忽略文件
style: 清理无用资源文件
2025-11-19 01:35:55 +08:00

41 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 结论与遗漏点
- 当前事务级联已覆盖核心链路,但仍有以下遗漏按业务应清理:
- 删除用户:
- 订单子表:`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`
1) 查出该用户的订单ID集合 → 删除 `order_items``order_id IN (...)`
2) 按订单ID集合删除`payment_preorders``payment_transactions``payment_refunds`
3) 删除邀请关系:`user_invites``inviter_id = userID OR invitee_id = userID`
4) 删除资产转赠:`user_inventory_transfers``from_user_id = userID OR to_user_id = userID`并按用户资产ID集合删除 `inventory_id IN (...)`
- 活动级联(`internal/service/activity/activity_delete.go:8-106`
1) 查出活动对应 `user_inventory.id` 集合
2) 删除发货记录:`shipping_records.inventory_id IN (...)`
3) 删除资产转赠流水:`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`)以保证扫描性能
- 幂等:条件删除无记录时不报错;重复执行安全
## 验收标准
- 删除用户后,不残留该用户的订单行、支付流水、邀请关系、资产转赠流水、发货及统计(统计表可保留)
- 删除活动后,不残留与该活动资产相关的发货记录与资产转赠流水
- 删除期后(若启用模板清理),不残留该期范围的系统卡模板
- 编译通过,现有接口行为不变(仅增强删除逻辑);事务全链路失败回滚
## 执行计划
- 补充三处服务方法的事务删除步骤,并针对大数据量路径加分批删除;完成后编译验证和快速自测(构造少量数据路径)。
请确认是否按上述方案继续,我将直接补齐代码并完成验证。