109 lines
4.0 KiB
Markdown
109 lines
4.0 KiB
Markdown
# K92 举报工单展示短剧名称与分集
|
||
|
||
## 目标
|
||
|
||
- `/admin/reports/page` 不再只返回 `targetType / targetId`,而是返回举报人、目标短剧与分集的展示信息。
|
||
- Web 举报工单列表与处理弹窗使用同一份目标摘要,不再展示裸对象 ID。
|
||
- 不改既有举报处理逻辑、评论列表接口、观看记录接口或数据库结构。
|
||
|
||
## 分支
|
||
|
||
- FruitServer:`feat/k92-report-target`,从 `origin/develop` 创建。
|
||
- ReelShortWeb:`feat/k92-report-target-ui`,从 `origin/develop` 创建。
|
||
|
||
## A. FruitServer
|
||
|
||
### A1 返回模型
|
||
|
||
新增 `com.fruitshorts.admin.vo.AdminReportRespVO`,包含:
|
||
|
||
- 工单:`id/reasonCode/description/status/handleBy/handleAt/handleNote/createdAt`
|
||
- 举报人:`reporterId/reporterNickname/reporterUid`
|
||
- 目标:`targetType/targetId/targetSummary`
|
||
- 剧集:`dramaId/dramaTitle/episodeId/episodeNo/episodeTitle`
|
||
- 评论/用户:`commentContent/targetNickname/targetUid`
|
||
|
||
### A2 查询和解析
|
||
|
||
新增 `com.fruitshorts.admin.service.ReportAdminService`:
|
||
|
||
1. 分页查询 `content_report`,条件与 `ReportService.page` 保持一致:
|
||
`status/targetType/reasonCode/reporterId` 均仅在有文本或非空时加入,空值返回全部;
|
||
排序保持 `id DESC`。
|
||
2. 当前页批量查询:
|
||
- COMMENT 目标评论:一次查询,且必须包含逻辑删除记录,用于判断“评论已删除”。
|
||
- 评论与 DRAMA 目标剧:一次批量查询 `drama`。
|
||
- 评论目标分集:一次批量查询 `drama_episode`。
|
||
- USER 目标用户与全部 reporter:合并 id 后一次批量查询 `app_user`。
|
||
3. 禁止逐行查询。
|
||
|
||
`ContentCommentMapper` 增加显式批量查询方法,绕过 `@TableLogic` 的自动过滤;
|
||
普通 `selectBatchIds` 仍保持原行为。
|
||
|
||
### A3 摘要规则
|
||
|
||
- COMMENT:
|
||
- 正常评论且剧存在:`剧名 · 第 N 集`,有集标题时追加 ` · 集标题`。
|
||
- 评论删除、逻辑删除、评论不存在或剧不存在:`评论 #targetId`。
|
||
- DRAMA:
|
||
- 剧存在:剧名。
|
||
- 不存在:`短剧 #targetId`。
|
||
- USER:
|
||
- 用户存在:`昵称(uid)`。
|
||
- 不存在:`用户 #targetId`。
|
||
|
||
### A4 Controller 与文档
|
||
|
||
- `ReportAdminController.page` 改为返回 `Result<PageResult<AdminReportRespVO>>`。
|
||
- `handle` 继续调用原 `ReportService.handle`,不变更业务行为。
|
||
- 更新 `docs/api-phase1.md` §2.5。
|
||
|
||
### A5 测试
|
||
|
||
新增 `ReportAdminServiceTest`,覆盖:
|
||
|
||
- COMMENT / DRAMA / USER 三类摘要。
|
||
- 评论集标题、举报人昵称/uid、目标用户昵称/uid。
|
||
- 空筛选条件表示全部。
|
||
- 评论逻辑删除和目标剧不存在时退化文案。
|
||
- 验证按页批量查询,不产生 N+1。
|
||
|
||
门禁:`mvn test` 全模块通过。
|
||
|
||
## B. ReelShortWeb
|
||
|
||
### B1 类型
|
||
|
||
`ReportItem` 补齐后台新增字段,保留原 `targetId` 用于 tooltip 排查。
|
||
|
||
### B2 治理页
|
||
|
||
1. 「对象」列:
|
||
- 中文类型标签:评论 / 用户 / 短剧。
|
||
- 显示 `targetSummary`。
|
||
- tooltip 显示原始 `#targetId`,评论类型有内容时追加评论内容。
|
||
2. 删除独立「对象ID」列。
|
||
3. 「举报人」列显示昵称;无昵称回退 uid;再无回退 `#reporterId`。
|
||
4. 处理弹窗「工单对象」显示类型标签 + `targetSummary`。
|
||
|
||
### B3 门禁
|
||
|
||
- `pnpm ts:check`
|
||
- `pnpm build:dev`
|
||
- 对改动文件执行定向 ESLint
|
||
|
||
## 风险与说明
|
||
|
||
1. 评论逻辑删除记录默认被 MyBatis-Plus 过滤;本次使用显式 mapper 查询识别,
|
||
不改变评论正常查询和删除行为。
|
||
2. 已删除评论不展示正文,避免后台误读已删除内容;仍保留 `targetId` tooltip 便于排查。
|
||
3. 目标关联数据已物理删除时按任务书使用 `评论 #id / 短剧 #id / 用户 #id` 退化。
|
||
4. 本任务无数据库迁移,不改 specs 仓库和 Flutter 客户端。
|
||
|
||
## Git
|
||
|
||
- FruitServer:`feat(admin): 举报工单返回短剧与分集信息`
|
||
- ReelShortWeb:`feat(admin): 举报列表展示短剧与分集`
|
||
- 两仓库均 `--no-ff` 合回 `develop` 并 push。
|
||
- 作者:`Zhou Weidong <502333560@qq.com>`;禁止 `git add -A`。
|