feat: expand redemption code management
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
237899745
2026-07-25 22:32:31 +08:00
parent 500a8f7ecd
commit 49189d346b
5 changed files with 904 additions and 89 deletions

View File

@@ -739,10 +739,12 @@ Authorization: Bearer <admin_token>
### 11.7 兑换码管理
```http
GET /admin/redemption-codes?page=1&limit=50
GET /admin/redemption-codes?page=1&limit=50&status=available&benefit_kind=plan&plan_id=<uuid>&keyword=
Authorization: Bearer <admin_token>
```
筛选参数均可省略:`status` 支持 `available/redeemed/disabled/expired``benefit_kind` 支持 `plan/units``keyword` 可搜索完整兑换码(精确匹配)、脱敏标识、备注和兑换人。列表响应使用 `Cache-Control: no-store`
```http
POST /admin/redemption-codes
Authorization: Bearer <admin_token>
@@ -758,7 +760,7 @@ Content-Type: application/json
}
```
套餐卡使用 `benefit_kind: "plan"` 并传入 `plan_id`。完整兑换码只在创建响应中返回一次,数据库只保存 HMAC 哈希和脱敏标识
套餐卡使用 `benefit_kind: "plan"` 并传入 `plan_id`新生成的完整兑换码使用 AES-256-GCM 加密保存,管理员之后仍可在列表响应的 `code` 字段查看和复制HMAC 哈希继续单独用于兑换校验。升级前生成的历史码无法从哈希逆向恢复,因此其 `code``null`,仍提供 `code_hint`
```http
PUT /admin/redemption-codes/{code_id}
@@ -768,6 +770,28 @@ Content-Type: application/json
{ "is_active": false }
```
已兑换的兑换码保留为权益和审计凭据,不能再修改状态或删除。未兑换兑换码支持单独删除:
```http
DELETE /admin/redemption-codes/{code_id}
Authorization: Bearer <admin_token>
```
批量启用、停用或删除最多支持 200 个 ID已兑换记录自动跳过响应会返回处理、跳过和未找到数量
```http
POST /admin/redemption-codes/batch
Authorization: Bearer <admin_token>
Content-Type: application/json
{
"ids": ["<code_id_1>", "<code_id_2>"],
"action": "disable"
}
```
`action` 支持 `enable/disable/delete`,所有单条和批量操作都会写入管理员审计日志。
### 11.8 邮箱验证开关
`GET /admin/auth``PUT /admin/auth` 的配置体包含 `email_verification_required`。该配置独立于 SMTP修改后立即生效不需要重启服务。