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: 清理无用资源文件
41 lines
3.2 KiB
Markdown
41 lines
3.2 KiB
Markdown
## 结论与遗漏点
|
||
- 当前事务级联已覆盖核心链路,但仍有以下遗漏按业务应清理:
|
||
- 删除用户:
|
||
- 订单子表:`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`)以保证扫描性能
|
||
- 幂等:条件删除无记录时不报错;重复执行安全
|
||
|
||
## 验收标准
|
||
- 删除用户后,不残留该用户的订单行、支付流水、邀请关系、资产转赠流水、发货及统计(统计表可保留)
|
||
- 删除活动后,不残留与该活动资产相关的发货记录与资产转赠流水
|
||
- 删除期后(若启用模板清理),不残留该期范围的系统卡模板
|
||
- 编译通过,现有接口行为不变(仅增强删除逻辑);事务全链路失败回滚
|
||
|
||
## 执行计划
|
||
- 补充三处服务方法的事务删除步骤,并针对大数据量路径加分批删除;完成后编译验证和快速自测(构造少量数据路径)。
|
||
|
||
请确认是否按上述方案继续,我将直接补齐代码并完成验证。 |