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

4.0 KiB
Raw Permalink Blame History

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。