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>
2.4 KiB
2.4 KiB
GET /admin/api/feedbacks — 反馈工单列表(offset 分页 + 筛选/排序)
所属:Admin·反馈 组(前缀
/admin/api/feedbacks) | 鉴权:Bearer admin_token(角色:任意已登录管理员,无require_role,仅get_current_admin) | ← 返回 API 索引
入参(query)
| 字段 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
status |
string | ❌ | null | 反馈状态,精确匹配:new(待处理) / handled(已处理);传空/不传则不筛 |
user_id |
int | ❌ | null | 按提交用户 id 精确筛 |
content |
string | ❌ | null | 反馈内容模糊匹配(ilike,≤100 字) |
created_from |
datetime | ❌ | null | 提交时间 ≥(ISO,统一按 UTC 比较) |
created_to |
datetime | ❌ | null | 提交时间 ≤(ISO,统一按 UTC 比较) |
sort_by |
string | ❌ | id |
排序列:id / created_at |
sort_order |
string | ❌ | desc |
asc / desc |
limit |
int | ❌ | 20 | 1–100 |
cursor |
int | ❌ | null | 上一页 next_cursor(offset 分页,cursor=offset) |
出参
响应 200:{ items: FeedbackOut[], next_cursor: int|null }(next_cursor=null 表示末页)
FeedbackOut
| 字段 | 类型 | 说明 |
|---|---|---|
id |
int | 反馈 id |
user_id |
int | 提交用户 id |
content |
string | 反馈内容 |
contact |
string | 联系方式(微信/QQ/手机,便于回访) |
images |
string[] | null | 截图相对路径列表(如 ["/media/feedback/u1_ab12.jpg"]),无图为 null |
status |
string | 反馈状态:new(待处理) / handled(已处理) |
created_at |
datetime | 提交时间(UTC) |
错误码
401未带/无效/过期 admin token、管理员被禁用(头带WWW-Authenticate: Bearer)422limit超出 1–100 范围 /sort_by·sort_order不在允许集 / 字段类型不合法
说明
- offset 分页(同 admin-users-list):
cursor即 offset,传上一页返回的next_cursor;next_cursor=null即末页。改用 offset 是为了在任意列排序下游标语义统一,代价是翻页期间数据变动可能错位一条(admin 低频可接受)。 - 排序:
sort_by(id/created_at)×sort_order(asc/desc),恒以id同向兜底次序。 status/user_id精确匹配、content模糊、created_from/created_to时间范围,均可叠加。- 关联表 feedback;截图为相对路径,经
GET /media/feedback/<file>静态读。