Files
shaguabijia-app-server/docs/database
ouzhou d7c29c0883 feat(coin): 金币数值体系二期——看广告按 eCPM 发奖 + ad_session_id 幂等 + 签到膨胀固定金币 (#28)
- rewards: 激励视频实发改按 calculate_ad_reward_coin(eCPM, 当日第N次) 公式;AD_REWARD_COIN/MAX_AD_REWARD_COIN 降为历史兼容口径;新增 SIGNIN_BOOST_COIN=2000

- 签到膨胀: Day1-13 看完激励视频额外发固定金币、Day14 不允许 (signin.py / signin-boost)

- ad_session_id 幂等: ad_ecpm/ad_reward/ad_feed_reward 记录加 ad_session_id 列 + 唯一索引(新迁移 coin_reward_phase2 / ad_feed_reward_session)

- ad.py + schemas + repositories: ecpm-report / feed-reward / reward-status / test-grant 改造;config_schema 增 signin_boost_coin;admin stats overview 补充

- 同步 docs/api + docs/database + docs/integrations/pangle 及 tests(test_ad_reward / test_welfare)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: OuYingJun1024 <1034284404@qq.com>
Reviewed-on: #28
Co-authored-by: ouzhou <ouzhou@wonderable.ai>
Co-committed-by: ouzhou <ouzhou@wonderable.ai>
2026-06-09 01:56:47 +08:00
..

傻瓜比价 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-07(补全 22 张业务表 + 新增 OVERVIEW 总览)

🧭 先看 OVERVIEW.md — 表 × 功能 × 关系:跨表的「每块功能用哪些表 / 什么操作写哪张表 / 表间 join key」都在那;本页只做单表索引,点进每张表的详情看字段级说明。


表总览(22 张业务表 + alembic_version 框架表)

账号 / 反馈

用途 模型 文档
user 用户(登录主体);几乎所有表的外键宿主 models/user.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 详情

首页门面数据

用途 模型 文档
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 详情

通用约定

  • 主键:id Integer autoincrement;例外:coin_account / wechat_transfer_authorizationuser_id 既是主键也是外键(一用户一行),app_configkey 作主键。
  • 外键:所有用户维度表 user_iduser.id 且建 index;admin_audit_log.admin_idadmin_user.id;price_report.comparison_record_idcomparison_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