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

24 lines
1.3 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.
# 订单激活幂等性修复(同订单只激活一次)
## Why
业务规则确认:**同一个订单只能激活一次**,不允许重复生成套餐生效记录。
当前订单支付成功后会生成 `PackageUsage`(套餐使用记录)。在并发请求、回调重放、网络重试等场景下,如果缺少幂等控制,可能重复插入套餐使用记录,导致用户重复获得权益,属于高风险资金/权益漏洞。
## What Changes
- **支付状态原子转换**:将“待支付 -> 已支付”的状态变更做成原子操作(带条件更新),只有第一次成功转换才会触发套餐激活。
- **激活过程幂等**`activatePackage` 只在“首次支付成功”场景执行;重复请求返回“幂等成功”(你确认 A=1
- **可选防御性约束**:为 `tb_package_usage` 增加必要的唯一约束或幂等检查,防止异常路径插入重复记录。
- **补充测试**:覆盖并发/重复调用场景,验证不会重复激活。
## Impact
涉及模块(预期):
- Service`internal/service/order/service.go`
- Store可选`internal/store/postgres/order_store.go` / `internal/store/postgres/order_item_store.go`
- 迁移(可选):新增唯一索引
- 测试:`internal/service/order/service_test.go``tests/integration/*`