Files
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.7 KiB
Raw Permalink Blame History

admin_audit_log — 运营后台操作审计日志

模型 app/models/admin.py · 仓库 app/admin/repositories/audit_log.py(写 app/admin/audit.py) · 接口 admin-audit-logs · ← 索引 · 总览

每个 admin 写操作(改钱/改状态/处理反馈/改配置等)落一条,记"谁在何时、对谁、做了什么、前后值"。只追加、不可改不可删,用于追溯。admin_username / target_id 冗余存字符串,即使关联对象被删/改名也能追溯。

用在哪 / 增删改查

  • C(插入):任何 admin 写操作经 audit.write_audit(add_audit_log)落一条,与业务写操作同事务(commit=False 让 router 一起 commit:改了就有审计、有审计就真改了)。覆盖:手动增减金币、改用户状态、提现审核通过/拒绝/刷新、处理反馈、改配置等。
  • U / D:无,永久不可变(无更新/删除接口)。
  • R:GET /admin/audit-logs(审计列表,可按 action/target_type/admin_id 筛,id 倒序游标)。

字段

类型 约束 / 默认 说明(取值 / join)
id Integer PK, autoincrement
admin_id Integer FK→admin_user.id, index, NOT NULL 操作者
admin_username String(64) NOT NULL 冗余操作者用户名(改名/禁用后仍可追溯)
action String(64) index, NOT NULL 操作类型,取值如 user.coins.grant / user.status.set / withdraw.refresh / withdraw.approve / withdraw.reject / feedback.handle / config.set
target_type String(32) NOT NULL 被操作对象类型,取值如 user / withdraw / feedback / config
target_id String(64) nullable 被操作对象 id字符串以兼容 out_bill_no 等非整型主键)。指向随 target_type 变:user→user.id / withdraw→withdraw_order.out_bill_no / feedback→feedback.id / config→app_config.key
detail JSON(PG: JSONB) nullable 上下文 + 前后值,如 {"amount":1000,"reason":"...","before":{...},"after":{...}}
ip String(64) nullable 操作者 IP(取自 X-Forwarded-For 首段,仅记录不鉴权)
created_at DateTime(tz) server_default now(), index, NOT NULL 操作时间

关系 / Join Key

  • admin_idadmin_user.id(多对一)。
  • target_id软关联(无 FK,字符串),目标表随 target_type(见上表 target_id 行)。

索引与约束

  • PK id;index admin_idactioncreated_at

注意

  • detailJSON().with_variant(JSONB(),"postgresql")(SQLite 退化 JSON)。
  • IP 可伪造:X-Forwarded-For 可被客户端伪造,nginx 必须 proxy_set_header X-Forwarded-For $remote_addr 覆盖;审计 IP 仅记录、不参与鉴权。