Files
FruitServer/docs/plans/2026-10-21-K92-report-target.md

109 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`。