Files
shaguabijia-app-server/docs/database/comparison_milestone_claim.md
T
marco b4780e256e docs(database): 补全 19 表文档 + 新增 OVERVIEW 总览
- 重写 15 张已有表文档:每张补「用在 App 哪/增删改查时机/字段取值/join key 指向」
- 新建 4 张缺失表文档:wechat_transfer_authorization / ad_watch_log / price_report / app_config
- 新增 OVERVIEW.md:功能↔表映射 + 写入路径 + 表间关系(含语义 join key)+ ER + 资金模型
- README 索引补齐到 19 表 + 置顶 OVERVIEW + 通用约定补全
- 纠正过时:withdraw_order(reviewing/rejected/user_name)、savings_record(/order/report 真实写入)、coin_transaction(biz_type)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 00:25:57 +08:00

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_recordstatus='success' 的条数实时算(第 N 档在"成功比价 ≥ N 次"时解锁)。档位金额来自 rewards.RECORD_MILESTONES(默认 (120,180,300,500,800,1200),运营后台 app_config.record_milestones 可改)。仿 user_task 的一次性领取模型。

用在哪 / 增删改查

  • C(插入):POST /compare/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_iduser.id(多对一)。
  • 解锁进度依赖 comparison_record:进度 = count_success(user) = comparison_record 中本人 status='success' 的条数;本表只记"哪几档已领",不存进度数值。

索引与约束

  • PK id;index user_id;UNIQUE(user_id, milestone) = uq_compare_milestone_user(防同档重复领)。

注意

  • ⚠️ 当前 claim 只写本表标记已领(去重),不调 grant_coins、不写 coin_transaction,coin_awarded 恒为 0、余额不变(产品定暂不真发金币,后续可能整体删除该功能)。若将来要真发币,在 claim 里补 grant_coins 即可(参考 task.py)。