Files
digital-psychology/.ai/product/feature-spec/ops-redemption-code.md
T
jackyu66gitandCursor 1eeb0b00e7 feat(ECR-015): RedemptionCode 兑换码并 Closed
批次生成/作废、C 端兑码延长会员;admin-h5 /codes。
Loop continuous。Next:ECR-016 UserIntelligence。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 18:16:13 +08:00

44 lines
1.6 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.
# Feature Spec: 兑换码 RedemptionCodeOps · ECR-015
> Status: `Active`Loop continuous · Approved · coding
> Parent: WAVE0-FROZEN · Predecessor: ECR-014 Closed
> Capability: `CommerceEntitlement` · BC: `Membership_Orders`
> 授权:`docs/WAVE0/LOOP_AUTHORIZATION.md`
## Non-goals
真支付 · Entitlement 细权 · ask_pack 兑换 · UGC
## L2
| Entity | 不变式 |
|--------|--------|
| `RedemptionBatch` | label · plan_code∈membership_plans · quantity 1..100 |
| `RedemptionCode` | code 唯一;status unused→redeemed\|disabledredeemed 不可再兑 |
## L3 API
| Method | Path | Auth | 语义 |
|--------|------|------|------|
| POST | `/admin/redemption-batches` | `admin.membership.codes.write` | 批量生成 |
| GET | `/admin/redemption-batches` | `admin.membership.codes.read` | 批次列表 |
| GET | `/admin/redemption-batches/:id/codes` | `admin.membership.codes.read` | 码列表 |
| POST | `/admin/redemption-codes/:id/disable` | `admin.membership.codes.write` | 作废 unused |
| POST | `/membership/redeem` | DeviceAuth+已注册 | 兑码→延长会员 |
## L4 AC
| ID | Then |
|----|------|
| AC-F-01 | POST batch quantity=3 → 3 unused codes |
| AC-F-02 | C端 redeem → membership active;码=redeemed |
| AC-F-03 | 再兑同一码 → 400 |
| AC-F-04 | disable unused → status=disabled;兑 → 400 |
| AC-S-01 | 无 write → POST batch 403 |
| AC-S-02 | 未登录兑码 → 401 |
| AC-P-01 | GET batches &lt; 500ms |
| AC-O-01 | 生成 AuditLog `redemption.batch.create` |
| AC-O-02 | 兑换可追溯 redeemed_by |
contract_diff: `docs/CONTRACT_DIFF/ECR-015.yaml`