fa4127b9e5
Reviewed-on: #128
42 lines
2.2 KiB
Markdown
42 lines
2.2 KiB
Markdown
# /admin/api/feedbacks — 反馈审核族(采纳/拒绝/标记处理/统计)
|
||
|
||
> 所属:Admin·反馈 组(前缀 `/admin/api/feedbacks`) | 鉴权:Bearer admin_token(角色:`operator`,`super_admin` 恒通过,`require_role("operator")`;summary 任意 admin) | [← 返回 API 索引](../../README.md)
|
||
>
|
||
> 列表见 [admin-feedbacks-list](./admin-feedbacks-list.md)。#94 引入 采纳(发金币)/拒绝 审核语义,#105 加运营回复 `admin_reply`;旧「标记已处理」保留。
|
||
|
||
## POST /admin/api/feedbacks/{feedback_id}/approve — 采纳并发金币(#94)
|
||
- body:`{reward_coins?(int,可 0), admin_reply?(string,用户可见), review_note?(string,内部)}`
|
||
- 行为:`status → adopted`;`reward_coins > 0` 时走 `grant_coins` 同事务发币(流水 `coin_transaction`);写审计(`detail.after="adopted"`)。已终态(非 pending/new)→ `400`。
|
||
- 出参:更新后的 FeedbackOut。
|
||
|
||
## POST /admin/api/feedbacks/{feedback_id}/reject — 拒绝采纳(#94)
|
||
- body:`{reject_reason(string,用户可见), admin_reply?, review_note?}`
|
||
- 行为:`status → rejected`;写审计(`detail.after="rejected"`)。已终态 → `400`。
|
||
|
||
## GET /admin/api/feedbacks/summary — 审核统计
|
||
- 出参:各状态计数(`pending` / `adopted` / `rejected` / `handled`),审核台顶部卡片用;任意 admin 可读。
|
||
|
||
---
|
||
|
||
## POST /admin/api/feedbacks/{feedback_id}/handle — 标记反馈已处理(旧口径)
|
||
|
||
## 入参
|
||
- 路径:`feedback_id`(int)
|
||
- body:无
|
||
|
||
## 出参
|
||
响应 `200`:`OkResponse` = `{ "ok": true }`
|
||
|
||
幂等说明:将该反馈 `status` 置为 `handled`(不校验原状态,重复调用结果一致)。
|
||
|
||
## 错误码
|
||
- `401` 未带/无效/过期 admin token、管理员被禁用(头带 `WWW-Authenticate: Bearer`)
|
||
- `403` 角色不足(需 `operator` 或 `super_admin`)
|
||
- `404` 反馈不存在(`detail: "反馈不存在"`)
|
||
- `422` `feedback_id` 非合法 int
|
||
|
||
## 说明
|
||
- 写操作记审计 [admin_audit_log](../../../database/admin_audit_log.md):`action="feedback.handle"`、`target_type="feedback"`、`target_id=<feedback_id>`、`detail={"before": <原 status>, "after": "handled"}`、`ip=<客户端 IP>`。
|
||
- 状态变更与审计写入在同一事务(`commit=False` 后统一 `db.commit()`)。
|
||
- 关联表 [feedback](../../../database/feedback.md)。
|