4ee6de2548
- CpsActivityUpdate schema + repo update_activity(部分更新,非 None 覆盖) - router 按「合并后最终值」校验平台必填项(同新建口径),写审计 cps.activity.update - 可改名/平台/对应字段/落地页图/备注/状态 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.4 KiB
2.4 KiB
comparison_milestone_claim — 比价战绩里程碑领取记录
模型
app/models/comparison_milestone.py· 仓库app/repositories/comparison_milestone.py· 接口 compare-milestones / compare-milestone-claim · ← 索引 · 总览
App「记录比价战绩」每档(第 1~6 次)只能领一次,领取后写一行去重。解锁进度不存本表——由 comparison_record 里 status='success' 的条数实时算(第 N 档在"成功比价 ≥ N 次"时解锁)。档位金额来自 rewards.RECORD_MILESTONES(默认 (120,180,300,500,800,1200),运营后台 app_config.record_milestones 可改)。仿 user_task 的一次性领取模型。
用在哪 / 增删改查
- C(插入):
POST /compare/milestones/{milestone}/claim(claim)。档位合法 + 已解锁(count_success >= milestone)+ 未领过 → 写一行(coin_awarded=0)。越界UnknownMilestoneError(404)、未解锁MilestoneLockedError(409)、已领AlreadyClaimedError(409)。 - U / D:无。
- R:
GET /compare/milestones(战绩页:各档 claimed/active/locked + 成功次数),get_status读本表已领集合 +comparison_record成功计数对照。
字段
| 列 | 类型 | 约束 / 默认 | 说明(取值 / join) |
|---|---|---|---|
id |
Integer | PK, autoincrement | |
user_id |
Integer | FK→user.id, index, NOT NULL | 归属用户 |
milestone |
Integer | NOT NULL | 档位序号(1-based),取值 1..len(RECORD_MILESTONES)(当前 1..6) |
coin_awarded |
Integer | NOT NULL, default 0 | 该档应发金币;⚠️ 当前恒为 0(产品定暂不真发,见下) |
claimed_at |
DateTime(tz) | server_default now() | 领取时间 |
关系 / Join Key
user_id→user.id(多对一)。- 解锁进度依赖
comparison_record:进度 =count_success(user)=comparison_record中本人status='success'的条数;本表只记"哪几档已领",不存进度数值。
索引与约束
- PK
id;indexuser_id;UNIQUE(user_id,milestone) =uq_compare_milestone_user(防同档重复领)。
注意
- ⚠️ 当前
claim只写本表标记已领(去重),不调grant_coins、不写coin_transaction,coin_awarded恒为 0、余额不变(产品定暂不真发金币,后续可能整体删除该功能)。若将来要真发币,在claim里补grant_coins即可(参考task.py)。