4.1 KiB
4.1 KiB
feedback — 用户帮助与反馈(含审核发奖)
模型
app/models/feedback.py· 仓库app/repositories/feedback.py· 接口 C 端 feedback / feedback-records;adminGET /admin/api/feedbacks、/summary、POST /{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_id→user.id(多对一)。- admin 审核动作被
admin_audit_log记录(target_type='feedback');reviewed_by_admin_id软指admin_user.id(无硬 FK)。 - 采纳发奖时写
coin_transaction(发币入口grant_coins同事务)。
索引与约束
- PK
id;indexuser_id、status、created_at。
注意
images用通用JSON(本表未用 JSONB variant,与 comparison/savings 不同)。- 状态机是单向的:
pending → adopted/rejected/handled。approve/reject只接受pending(或历史new)态,重复审核报 400;旧口径handle幂等不校验原状态(重复调用结果一致)。