3.9 KiB
3.9 KiB
app_config — 运营可配置项(覆盖 rewards 常量)
模型
app/models/app_config.py· 仓库app/repositories/app_config.py· 注册表app/core/config_schema.py· 接口 admin admin-stats-overview 同组的配置页(app/admin/routers/config.py) · ← 索引 · 总览
把原本硬编码在 core/rewards.py 的产品规则常量(签到档位、任务奖励、提现额度、看广告金币/上限/冷却等)挪到 DB,运营后台可改、跨进程即时生效。key 主键,value 用 JSON 存任意值(int / list / dict)。
核心约定:表里没有的 key,业务读配置时 fallback 到
config_schema.CONFIG_DEFS的默认值(= 原 rewards 常量)。所以空表 = 现有行为完全不变;admin 改某项 = 写一行 → 业务下次get_value读到新值。
用在哪 / 增删改查
- C / U(upsert):admin 配置页改某项
set_value(key, value, admin_id):无该 key 行→插,有→更新value+updated_by_admin_id(同事务写admin_audit_log,action='config.set')。未知 key(不在 CONFIG_DEFS)抛 KeyError。 - D:无(要恢复默认 = 删行即可回退到 CONFIG_DEFS,但当前无删除接口;改回默认值亦可)。
- R:业务侧——
rewards.get_*(db)一族(get_signin_rewards/get_withdraw_min_cents/get_ad_reward_coin…)经get_value读,签到/任务/提现/看广告发奖处用;admin 侧——list_all列出所有可配项(default + 当前值 + 元信息)给配置页渲染。
字段
| 列 | 类型 | 约束 / 默认 | 说明(取值 / join) |
|---|---|---|---|
key |
String(64) | PK | 配置标识,取值见 config_schema.CONFIG_DEFS:signin_rewards / min_exchange_coin / withdraw_min_cents / withdraw_max_cents / task_rewards / record_milestones / ad_reward_coin / ad_daily_limit / ad_max_coin / ad_round_count / ad_cooldown_sec / withdraw_auto_reconcile_enabled / comparing_ad_enabled |
value |
JSON(PG: JSONB) | NOT NULL | 配置值,类型随 key(int / int_list 如签到 14 档 / dict_str_int 如 task_rewards / bool 如 withdraw_auto_reconcile_enabled / comparing_ad_enabled) |
updated_by_admin_id |
Integer | nullable | 最后修改的管理员 id(= admin_user.id,软引用,无 FK) |
updated_at |
DateTime(tz) | server_default now(), onupdate now() | 最后修改时间 |
关系 / Join Key
- 无外键。
updated_by_admin_id软指向admin_user.id(仅记录谁改的)。 - 逻辑上"覆盖"
core/rewards.py的常量:每个 key 的默认值/类型/分组/说明在config_schema.CONFIG_DEFS定义(配置项的 single source of truth)。
索引与约束
- PK
key(无自增 id)。
注意
- 不缓存:配置读频率低(每次福利操作读一次,主键查极快),admin 改了立即生效、跨进程一致(多 worker 也对)。
- 新增可配项 = 在
CONFIG_DEFS加一条 + 业务处改用app_config.get_value(db, key)读;不需要建迁移(行是动态插的,表结构不变)。
专用 key(借表不进 CONFIG_DEFS)
有自己的语义与专用管理页的配置,复用本表但不注册进 CONFIG_DEFS——混进通用「系统配置」页只会显示成一个没头没尾的 on/off。它们各有一对 get_* / set_* 函数(仍在 repositories/app_config.py),value 存 dict,空行回退各自的模块内默认值。
| key | 管理页 / admin 端点 | C 端读取 | 说明 |
|---|---|---|---|
ad_config |
GET/PATCH /admin/api/ad-config |
GET /api/v1/platform/ad-config(去密钥) |
穿山甲 app_id / 各代码位 / 各场景开关 |
app_version |
内部写入(X-Internal-Secret) |
GET /api/v1/platform/app-version |
OTA 最新版本信息 |
huawei_review |
GET/PATCH /admin/api/huawei-review |
GET /api/v1/platform/huawei-review |
华为审核开关:{"mode": "default"|"review"},决定新手引导「快速设置」权限步能否被用户关闭。脏值/空行一律回退 default(不给退出按钮) |