27f76918b2
本 PR 汇合三块运营后台改动(原 #50 仅含其中「加固」一块,已并入本 PR 并关闭)。 ## 1. review 加固 (436b2a3) - 超管防自锁:降级/禁用最后一个 active super_admin 前校验,杜绝零超管死局 - 时间筛选统一 tz-aware(列为 timestamptz),比较绝对时刻、不依赖 DB 会话时区 - 上报审核 / 调余额(set·扣减)加行锁,防并发/连点重复发钱 - ad_audit 复算排序补 id 次级键;health-check 限 finance;调账/拒绝 reason 去空白校验 ## 2. 反馈改版 (5a18dbb) - contact 可选、截图≤6;admin 反馈列表筛选/排序;admin·wallet 接口调整 + docs ## 3. 列表页码分页 (1a7a624) - CursorPage 加 total;新增 offset_paginate(count 与分页同源) - 上报/审计日志从 id 游标改 offset 分页(支持跳页) - 用户 / 提现 / 上报 / 审计日志 四页接入页码分页 测试:admin 套件 47 passed。前端配套改动见 shaguabijia-admin-web。 --------- Co-authored-by: OuYingJun1024 <1034284404@qq.com> Reviewed-on: #51 Co-authored-by: ouzhou <ouzhou@wonderable.ai> Co-committed-by: ouzhou <ouzhou@wonderable.ai>
1.7 KiB
1.7 KiB
POST /api/v1/feedback — 提交反馈
所属:Feedback 组(前缀
/api/v1/feedback) | 鉴权:Bearer access_token | ← 返回 API 索引
入参
multipart/form-data:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
content |
string | ✓ | 反馈正文,1-2000 字(strip 后) |
contact |
string | ✗ | 联系方式(微信/QQ/手机号),≤128 字。原型改版后客户端已不再采集、不传该字段(后端默认空串);保留字段兼容旧端 |
images |
file[] | ✗ | 截图,最多 6 张,每张走头像同款校验(JPEG/PNG/WebP,≤ 5 MB,魔数嗅探) |
出参
响应 200:
{
"id": 123,
"status": "new",
"created_at": "2026-05-29T12:34:56Z"
}
| 字段 | 类型 | 说明 |
|---|---|---|
id |
int | 反馈单 ID |
status |
string | new(待处理)/ handled(已处理) |
created_at |
datetime | 提交时间(UTC) |
不返回上传的 image URL——这是给运营后台看的,客户端通常不需要。
错误码
400内容为空 / 内容超 2000 字 / 联系方式超 128 字 / 图片超 6 张 / 单图非法(空/过大/格式不对)401未带 token / token 无效或过期 / 用户被禁用422缺content字段
说明
- 反馈绑用户:
feedback.user_id = current_user.id,便于回访 - 截图落盘:存到
settings.MEDIA_ROOT/feedback/,URL 写进feedback.images(JSON 列,SQLite 是 TEXT、PG 是 JSON/JSONB——为不影响现有迁移用 JSON 而非 JSONB) - 截图可读:
GET /media/feedback/<file>静态服务暴露,详见 API 索引 — /media 静态服务 - 文件名随机
u<user_id>_<rand>.<ext>,杜绝路径穿越