da7ce69494
- 新增 POST /api/v1/ad/ecpm-report:激励视频展示后客户端上报本次 eCPM,落 ad_ecpm_record 做内部收益统计(model/repository/schema/alembic 迁移 + 接口文档) - 看广告冷却策略抽到 app/core/ad_cooldown.py 纯函数;ad_reward.today_status 只取数据,换策略只改这一处 - savings.dishes 改 JSON().with_variant(JSONB,"postgresql"):SQLite 无 visit_JSONB 会让 create_all 编译崩,修复后测试套件恢复 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: OuYingJun1024 <1034284404@qq.com> Reviewed-on: #8 Co-authored-by: ouzhou <ouzhou@wonderable.ai> Co-committed-by: ouzhou <ouzhou@wonderable.ai>
34 lines
1.3 KiB
Markdown
34 lines
1.3 KiB
Markdown
# POST /api/v1/compare/milestones/{milestone}/claim — 领取比价战绩里程碑奖励
|
||
|
||
> 所属:比价记录组(前缀 `/api/v1/compare`) | 鉴权:Bearer | [← 返回 API 索引](./README.md)
|
||
|
||
领取某一档(第 `milestone` 次)的金币奖励,真实入账金币钱包。领取记录写
|
||
`comparison_milestone_claim`((user_id, milestone) 唯一)+ `grant_coins` 同一事务原子提交,
|
||
**每档只能领一次**。进度口径见 [milestones 进度接口](./compare-milestones.md)。
|
||
|
||
## 入参
|
||
- 路径参数 `milestone`(int):档位序号,1..6(= `RECORD_MILESTONES` 长度)。
|
||
|
||
## 出参
|
||
响应 `200`:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `milestone` | int | 本次领取的档位序号 |
|
||
| `coin_awarded` | int | 本次发放金币 |
|
||
| `coin_balance` | int | 领奖后金币余额 |
|
||
|
||
```json
|
||
{ "milestone": 1, "coin_awarded": 120, "coin_balance": 29087 }
|
||
```
|
||
|
||
## 错误
|
||
- `401` 未鉴权
|
||
- `404` 档位越界(`unknown milestone`,milestone < 1 或 > 档位总数)
|
||
- `409` 该档还没解锁(`milestone locked`,成功比价次数 < milestone)
|
||
- `409` 该档已领过(`milestone already claimed`)
|
||
|
||
## 说明
|
||
- 领取金币后,客户端应刷新钱包余额([`GET /api/v1/wallet/account`](./wallet-account.md))与本档状态。
|
||
- 幂等:重复领同一档返回 409 且**不会重复发金币**(唯一约束 + 领取前查重)。
|