1.9 KiB
1.9 KiB
T-WEB-007 上传审核流程
- 状态:done
- 依赖:T-WEB-003 / 004 / 005
目标
对歌曲、动作、模型三类资产实施统一的状态机与审核流水,确保只有审核通过的资产 被客户端消费。
load
DSH.md
contracts/rest-api.yaml # 锚点:#/paths/~1api~1reviews
contracts/data-models.md # 锚点:§1.2 PublishStatus、§5 ReviewRecord
contracts/database.md # 锚点:状态机
web-server/src/reviews/*
状态机(契约冻结)
draft ──submit──▶ pending ──approve──▶ published
│
└──reject──▶ rejected ──submit──▶ pending
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/reviews |
不传 status → 审核流水;传 status → 该状态待审资产(三类合并) |
| GET | /api/reviews/:targetType/:id/history |
单个资产的审核历史 |
| POST | /api/reviews/:targetType/:id/submit |
→ pending |
| POST | /api/reviews/:targetType/:id/approve |
→ published |
| POST | /api/reviews/:targetType/:id/reject |
→ rejected,必须填写意见 |
| POST | /api/reviews/:targetType/:id/withdraw |
→ draft |
关键实现
STATUS_TRANSITIONS是状态机的唯一来源;非法流转一律 409, 重复审核同一状态同样 409。- 驳回未填
comment→ 400(合规要求:拒绝侵权内容需留痕)。 - 每次成功流转都写一条
review_records,记录fromStatus/toStatus/reviewer/comment。 - 三类资产的直连 PATCH 也会校验状态机,避免绕过审核流程。
/api/catalog/export与/api/catalog/version只导出published。
验收
npm run test:smoke
冒烟 [5] 段落:submit → pending、待审列表包含、驳回无意见 400、approve → published、 重复审核 409、流水恰好 2 条。