# 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>`。 - `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`。