47812f7fcc
## 改动 - 支撑客户端比价结算页:补 `compare_record` schema 字段 + `comparison` 模型调整 - docs/database 索引合并(领券三表 + onboarding_completion,表数对齐 28) ## 验证 - 模型/schema parse OK;已 merge origin/main 解 OVERVIEW/README 文档冲突(取并集) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: no_gen_mu <liujianhishen@gmail.com> Reviewed-on: #44 Co-authored-by: liujiahui <liujiahui@wonderable.ai> Co-committed-by: liujiahui <liujiahui@wonderable.ai>
6.2 KiB
6.2 KiB
傻瓜比价 App 后端 — 数据库表文档(索引)
数据库:SQLite 起步(
data/app.db),生产可切 PostgreSQL(改DATABASE_URL)。 ORM:SQLAlchemy 2.0(app/models/),迁移:Alembic(alembic/versions/,render_as_batch兼容 SQLite)。 金额字段一律存整数:金币=个数,现金=分(*_cents)。时间列DateTime(timezone=True)。 最后更新:2026-06-11(合并:新增 3 张领券今日状态表coupon_*+onboarding_completion新手引导完成表;含 OVERVIEW 总览)
🧭 先看 OVERVIEW.md — 表 × 功能 × 关系:跨表的「每块功能用哪些表 / 什么操作写哪张表 / 表间 join key」都在那;本页只做单表索引,点进每张表的详情看字段级说明。
表总览(28 张业务表 + alembic_version 框架表)
账号 / 反馈
| 表 | 用途 | 模型 | 文档 |
|---|---|---|---|
user |
用户(登录主体);几乎所有表的外键宿主 | models/user.py |
详情 |
onboarding_completion |
新手引导完成标记(按 设备+账号 去重,登录时据此跳过引导) | models/onboarding.py |
详情 |
feedback |
用户帮助与反馈(含截图) | models/feedback.py |
详情 |
钱包 / 福利(看广告赚钱闭环)
| 表 | 用途 | 模型 | 文档 |
|---|---|---|---|
coin_account |
金币+现金余额快照(一用户一行) | models/wallet.py |
详情 |
coin_transaction |
金币流水账本 | models/wallet.py |
详情 |
cash_transaction |
现金流水账本(分) | models/wallet.py |
详情 |
withdraw_order |
提现单(现金→微信零钱,含人工审核态) | models/wallet.py |
详情 |
wechat_transfer_authorization |
微信免确认转账授权(一用户一行) | models/wallet.py |
详情 |
signin_record |
签到记录(14 天循环) | models/signin.py |
详情 |
signin_boost_record |
签到后看广告膨胀记录 | models/signin.py |
详情 |
user_task |
一次性任务领取去重 | models/task.py |
详情 |
ad_reward_record |
看激励视频发奖记录(S2S 回调,trans_id 幂等) | models/ad_reward.py |
详情 |
ad_watch_log |
看广告观看时长(旧版兼容字段) | models/ad_watch_log.py |
详情 |
ad_ecpm_record |
广告展示 eCPM 上报(收益对账) | models/ad_ecpm.py |
详情 |
ad_feed_reward_record |
信息流广告结算记录(10 秒一份,client_event_id 幂等) | models/ad_feed_reward.py |
详情 |
比价 / 省钱
| 表 | 用途 | 模型 | 文档 |
|---|---|---|---|
comparison_record |
比价记录(每次比价完整明细) | models/comparison.py |
详情 |
comparison_milestone_claim |
比价战绩里程碑领取记录 | models/comparison_milestone.py |
详情 |
savings_record |
省钱记录(profile 省钱战绩源;真实下单归因 + demo) | models/savings.py |
详情 |
price_report |
上报更低价(众包纠偏,人工审核发奖) | models/price_report.py |
详情 |
领券(每日领券联动 · 今日状态)
| 表 | 用途 | 模型 | 文档 |
|---|---|---|---|
coupon_prompt_engagement |
领券引导窗频控源(今日是否已 engage,按 device+日) | models/coupon_state.py |
详情 |
coupon_daily_completion |
首页「去领取」置灰源(今日是否已跑完整轮) | models/coupon_state.py |
详情 |
coupon_claim_record |
每张券领取结果沉淀(资产/画像/排查,不参与判断) | models/coupon_state.py |
详情 |
美团 CPS 券缓存
| 表 | 用途 | 模型 | 文档 |
|---|---|---|---|
meituan_coupon |
美团 CPS 券本地缓存(智能推荐/销量榜从库出,定时 ETL 灌入) | models/meituan_coupon.py |
详情 |
首页门面数据
| 表 | 用途 | 模型 | 文档 |
|---|---|---|---|
ops_stat_config |
首页三统计展示配置(real/manual/random) | models/ops_stat_config.py |
详情 |
ops_marquee_seed |
首页轮播种子(真实不足时兜底混播) | models/ops_marquee_seed.py |
详情 |
运营后台 admin(独立子应用 app/admin/,独立鉴权)
| 表 | 用途 | 模型 | 文档 |
|---|---|---|---|
admin_user |
管理员账号(独立 JWT + RBAC) | models/admin.py |
详情 |
admin_audit_log |
操作审计日志(只追加) | models/admin.py |
详情 |
app_config |
运营可配置项(覆盖 rewards 常量) | models/app_config.py |
详情 |
通用约定
- 主键:
idInteger autoincrement;例外:coin_account/wechat_transfer_authorization的user_id既是主键也是外键(一用户一行),app_config用key作主键。 - 外键:所有用户维度表
user_id→user.id且建 index;admin_audit_log.admin_id→admin_user.id;price_report.comparison_record_id→comparison_record.id。 - 金额:整数;金币计数,现金/价格存「分」(
*_cents)。汇率10000 金币 = 1 元 = 100 分。 - 时间:
created_at等用DateTime(timezone=True)+server_default=func.now();业务"今天"按北京时间(core/rewards.cn_today),跨天计数用「日期串」列(reward_date/watch_date/report_date,String(10)存YYYY-MM-DD)等值查,不在 SQL 里做跨时区 date 比较(SQLite 不可靠)。 - JSON 列:
JSON().with_variant(JSONB(), "postgresql")—— PG 上 JSONB(可建 GIN 索引),SQLite 退化为通用 JSON(否则create_all编译报错);feedback.images例外,用通用JSON。 - 分页:列表接口统一游标式(
id倒序,cursor=上页最后一条 id,返回next_cursor)。 - 迁移:改表必写 alembic 迁移并保持单 head;改表/建表同时更新本目录对应文档(一表一文件)+ OVERVIEW.md。