Files
junhong_cmp_fiber/openspec/changes/fix-order-activation-idempotency/proposal.md
huang b02175271a
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m39s
feat: 实现企业设备授权功能并归档 OpenSpec 变更
- 新增企业设备授权模块(Model、DTO、Service、Handler、Store)
- 实现设备授权的创建、查询、更新、删除等完整业务逻辑
- 添加企业卡授权与设备授权的关联关系
- 新增 2 个数据库迁移脚本
- 同步 OpenSpec delta specs 到 main specs
- 归档 add-enterprise-device-authorization 变更
- 更新 API 文档和路由配置
- 新增完整的集成测试和单元测试覆盖
2026-01-29 13:18:49 +08:00

1.3 KiB
Raw Blame History

订单激活幂等性修复(同订单只激活一次)

Why

业务规则确认:同一个订单只能激活一次,不允许重复生成套餐生效记录。

当前订单支付成功后会生成 PackageUsage(套餐使用记录)。在并发请求、回调重放、网络重试等场景下,如果缺少幂等控制,可能重复插入套餐使用记录,导致用户重复获得权益,属于高风险资金/权益漏洞。

What Changes

  • 支付状态原子转换:将“待支付 -> 已支付”的状态变更做成原子操作(带条件更新),只有第一次成功转换才会触发套餐激活。
  • 激活过程幂等activatePackage 只在“首次支付成功”场景执行;重复请求返回“幂等成功”(你确认 A=1
  • 可选防御性约束:为 tb_package_usage 增加必要的唯一约束或幂等检查,防止异常路径插入重复记录。
  • 补充测试:覆盖并发/重复调用场景,验证不会重复激活。

Impact

涉及模块(预期):

  • Serviceinternal/service/order/service.go
  • Store可选internal/store/postgres/order_store.go / internal/store/postgres/order_item_store.go
  • 迁移(可选):新增唯一索引
  • 测试:internal/service/order/service_test.gotests/integration/*