feat(admin): 举报工单返回短剧与分集信息
This commit is contained in:
1 parent
6ddddef5ec
commit
9a74876b3f
8 files changed
+727
-4
No files matched your search
@@ -0,0 +1,108 @@
|
||||
# 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`。
|
||||
@@ -23868,3 +23868,64 @@ exit 0
|
||||
- ReelShortWeb 的 Husky pre-commit 依赖不可用的 `npm`,commit-msg 又受当前 pnpm
|
||||
版本与仓库 8.1 声明不兼容影响;功能与合并提交使用 `--no-verify`,门禁已独立完成。
|
||||
- 未安装或操作真机,未修改 specs 仓库与 Flutter 客户端,等待用户验收。
|
||||
|
||||
## 2026-10-21 K92 举报工单短剧与分集展示
|
||||
|
||||
- 已完整读取 K92 `docs/plans/INBOX.md` 及项目协作、编码、Git 规范。
|
||||
- 已创建 FruitServer `feat/k92-report-target` 与 ReelShortWeb `feat/k92-report-target-ui`,
|
||||
均基于最新 `origin/develop`。
|
||||
- 已先写计划 `docs/plans/2026-10-21-K92-report-target.md`,明确三类目标摘要、
|
||||
批量查询边界、逻辑删除评论识别和退化规则。
|
||||
- 本任务无数据库迁移,不改 specs、Flutter 客户端、评论列表或观看记录接口。
|
||||
- 已完成 A 主体代码:新增 `AdminReportRespVO`、`ReportAdminService`,分页按当前页批量装配
|
||||
评论、剧、集与用户;`ContentCommentMapper` 增加包含逻辑删除记录的批量查询。
|
||||
- `ReportAdminController.page` 已切换为 `AdminReportRespVO`,`handle` 继续走原 `ReportService`。
|
||||
- `docs/api-phase1.md` §2.5 已补充举报人、剧名、集号、集标题与目标摘要说明。
|
||||
- 已新增 `ReportAdminServiceTest`:覆盖三类目标摘要、举报人信息、空筛选、逻辑删除/目标缺失退化,
|
||||
并通过 `times(1)` 验证按页每类关联只批量查询一次。
|
||||
- K92 定向后端测试已通过:
|
||||
|
||||
```text
|
||||
$ JAVA_HOME=<jdk21> mvn -pl fruitshorts-admin-api -am \
|
||||
-Dtest=ReportAdminServiceTest -Dsurefire.failIfNoSpecifiedTests=false test
|
||||
[INFO] fruitshorts-admin-api ... SUCCESS
|
||||
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
|
||||
[INFO] BUILD SUCCESS
|
||||
```
|
||||
|
||||
解读:COMMENT/DRAMA/USER 三类摘要、批量装配、空筛选以及删除/缺失退化均通过。
|
||||
- 已完成 B 主体代码:`ReportItem` 补齐展示字段;举报工单表格改为中文类型标签 +
|
||||
`targetSummary`,删除对象 ID 列,tooltip 保留原始 `#targetId` 与评论内容;
|
||||
举报人按昵称/uid/id 回退,处理弹窗同步展示类型标签与目标摘要。
|
||||
- FruitServer 全模块门禁已通过:
|
||||
|
||||
```text
|
||||
$ JAVA_HOME=<jdk21> mvn test
|
||||
[INFO] fruitshorts-admin-api .............................. SUCCESS
|
||||
[INFO] fruitshorts-app-api ................................ SUCCESS
|
||||
[INFO] fruitshorts-transcode-worker ....................... SUCCESS
|
||||
[INFO] BUILD SUCCESS
|
||||
[INFO] Total time: 20.438 s
|
||||
```
|
||||
|
||||
解读:全部 14 个 Reactor 模块通过;新增举报目标装配测试与既有后端测试均全过。
|
||||
- ReelShortWeb 门禁已通过:
|
||||
|
||||
```text
|
||||
$ pnpm ts:check
|
||||
> fruitshorts-admin@1.0.0 ts:check
|
||||
> pnpm vue-tsc --noEmit --skipLibCheck
|
||||
exit 0
|
||||
|
||||
$ pnpm exec eslint src/api/admin/types.ts \
|
||||
src/views/governance/ContentGovernanceView.vue
|
||||
exit 0
|
||||
|
||||
$ pnpm build:dev
|
||||
> fruitshorts-admin@1.0.0 build:dev
|
||||
> VITE_CJS_IGNORE_WARNING=1 vite build --mode dev
|
||||
Build successful. Please see dist-dev directory
|
||||
```
|
||||
|
||||
解读:首次定向 ESLint 发现两处 Prettier 换行问题,按既有格式规则修正后零错误;
|
||||
dev 构建保留既有 `element-plus` circular chunk 警告,不影响成功退出。
|
||||
Reference in new issue
Block a user