Files
2026-07-09 14:24:46 +08:00

4.1 KiB

feedback — 用户帮助与反馈(含审核发奖)

模型 app/models/feedback.py · 仓库 app/repositories/feedback.py · 接口 C 端 feedback / feedback-records;admin GET /admin/api/feedbacks/summaryPOST /{id}/approve|reject|handle(app/admin/routers/feedback.py) · ← 索引 · 总览

App「帮助与反馈」每次提交写一行。2026-06 起演进为轻审核工单:运营在后台采纳(adopted,可发金币)/拒绝(rejected,填原因)并可写运营回复(#105),C 端「我的反馈」列表把状态与回复展示给用户;提交侧自动采集来源/场景 + 端环境(App 版本/机型/ROM/Android 版本,#94)供排障。与 price_report(结构化上报更低价)不同,本表是自由文本反馈。

用在哪 / 增删改查

  • C(插入):POST /api/v1/feedback(multipart:content + 可选 contact/images/source/scene;客户端自动带 app_version/device_model/rom_name/android_version)→ status='pending'。截图经 core.media/media/feedback/
  • U(更新,admin,均写 admin_audit_log):approve(→adopted,可选发金币 reward_coins,走 grant_coins 同事务)/ reject(→rejected,reject_reason)/ handle(→handled,旧口径「标记已处理」保留)。三者均可写 admin_reply(用户可见回复)与 review_note(内部备注)。
  • D:无。
  • R:C 端 GET /api/v1/feedback/records(我的反馈历史,展示状态/回复/奖励);admin 列表(状态/来源筛选)+ summary(各状态计数)。

字段

类型 约束 / 默认 说明(取值 / join)
id Integer PK, autoincrement
user_id Integer FK→user.id, index, NOT NULL 提交用户
content Text NOT NULL 反馈正文
contact String(128) NOT NULL 联系方式。客户端改版后不再采集,新数据为空串;列仍 NOT NULL
source String(16) NOT NULL, default profile, index 提交入口来源(#105):profile(设置/我的页普通反馈)/ 比价场景值;客户端显式传优先,未传由 scene 有无派生
scene String(32) nullable 比价反馈的「问题场景」(找错商品/优惠不对/比价太慢…,#105);比价结果页反馈才有,普通反馈为 NULL
images JSON nullable 截图相对 URL 列表 /media/feedback/...
app_version String(32) nullable 提交时 App versionName(#94)
device_model String(64) nullable 机型 Build.MODEL(#94)
rom_name String(32) nullable ROM(OemDetector:ColorOS/MIUI/…,#94)
android_version String(16) nullable Android 版本(#94)
status String(16) NOT NULL, default pending, index pending(待处理)/ adopted(已采纳,#94)/ rejected(已拒绝)/ handled(旧「已处理」口径,兼容保留;历史另有 new)
reject_reason String(256) nullable 拒绝原因(用户可见)
reward_coins Integer nullable 采纳发的金币数(未发为 null;发币走 coin_transaction)
review_note String(256) nullable 运营内部备注(不外露)
admin_reply String(256) nullable 运营回复(用户可见,#105;C 端反馈历史展示)
reviewed_by_admin_id Integer nullable 审核管理员 id(软指 admin_user.id)
reviewed_at DateTime(tz) nullable 审核时间
created_at DateTime(tz) server_default now(), index 提交时间

关系 / Join Key

  • user_iduser.id(多对一)。
  • admin 审核动作被 admin_audit_log 记录(target_type='feedback');reviewed_by_admin_id 软指 admin_user.id(无硬 FK)。
  • 采纳发奖时写 coin_transaction(发币入口 grant_coins 同事务)。

索引与约束

  • PK id;index user_idstatuscreated_at

注意

  • images 用通用 JSON(本表用 JSONB variant,与 comparison/savings 不同)。
  • 状态机是单向的:pending → adopted/rejected/handledapprove/reject 只接受 pending(或历史 new)态,重复审核报 400;旧口径 handle 幂等不校验原状态(重复调用结果一致)。