# 订单激活幂等性修复（同订单只激活一次）

## Why

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

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

## What Changes

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

## Impact

涉及模块（预期）：
- **Service 层**：`internal/service/order/service.go`（支付逻辑改为条件更新）
- **Store 层**（可选）：`internal/store/postgres/order_store.go`（如需新增条件更新方法）
- **Model 层**：使用 `internal/model/order.go` 中的支付状态常量
- **错误处理**：使用 `pkg/errors/` 中已有的错误码 `CodeInvalidStatus`
- **数据库迁移**（可选）：`migrations/` 目录新增唯一索引（`tb_package_usage`）
- **测试**：`internal/service/order/service_test.go`（新增并发/重复/状态异常测试）
- **文档**：`docs/fix-order-activation-idempotency/功能总结.md`（新建）

