# K88 内容类型、互动数据编辑与分类 Feed 实施计划 ## 目标 - 后台短剧管理支持内容类型和互动数据编辑:收藏、点赞、热度可编辑,评论数实时统计只读。 - 新增 `drama.drama_type`,取值为 `ANIME` / `LIVE`,默认 `LIVE`。 - App 新增 `GET /app/feed`,支持 `ANIME,LIVE` 多选类型,不传类型时返回推荐全部。 ## FruitServer A 1. 数据库 - 新增 `sql/migrate-k88-drama-type.sql`,只提交迁移文件,不执行数据库变更。 - `sql/schema.sql` 的 drama 建表语句补 `drama_type`,默认 `LIVE`。 2. 后台管理 - `Drama`、`DramaSaveReqVO`、`DramaRespVO` 增加 `dramaType`。 - `DramaSaveReqVO` 增加可空 `favoriteCount`、`likeCount`、`heat`;服务层校验非负,`heat` 映射 `view_count`。 - create 默认内容类型 LIVE、互动数 0;update 仅覆盖请求非 null 的互动字段。 - 后台分页增加 `dramaTypes` 多选过滤,并保持 CommentService 批量回填评论数。 3. App Feed - `AppDramaCardVO` 增加 `dramaType`,现有 home/discover/detail 仅新增字段。 - `GET /app/feed` 支持 `types`、`cursor`、`size`;size 默认 20、最大 50。 - 排序为 `recommend_weight DESC NULLS LAST, view_count DESC, id DESC`。 - cursor 使用最后一条 drama id,服务端反查其 recommendWeight/viewCount/id,再按三元组做 keyset 查询,避免 offset 翻页重漏。 - 卡片复用现有 `toCards`,确保 preview、互动数、评论数与首页一致。 - 更新 `docs/api-phase1.md` 的 dramaType 与 `/app/feed` 契约。 4. 测试 - `/app/feed`:全部、ANIME、ANIME+LIVE、游标翻页不重不漏。 - 后台 update:部分字段更新、heat 写 viewCount、负数与非法 dramaType 报错。 ## ReelShortWeb B 1. 类型定义补齐 dramaType、favoriteCount、likeCount、commentCount、heat。 2. 短剧列表增加内容类型筛选和标签列,播放量列改为热度,增加收藏/点赞/评论列。 3. 编辑弹窗增加必填内容类型、互动数据区块;评论数只读。 4. 不改审核、发布、删除逻辑。 ## 风险与处理 - 推荐排序包含可空 recommend_weight,SQL 与 Java 条件必须显式处理 NULLS LAST。 - 三字段排序不能只按 id 做 cursor,需以 cursor id 反查上一页最后一条的排序值。 - 存量数据不主动修改,迁移默认 LIVE;数据库脚本由 PM 执行。 - 全部改动只使用显式文件暂存,不执行 `git add -A`,不改 specs 与 Flutter 客户端。 ## 门禁与 Git - FruitServer:`mvn test` 全过;提交 `feat(content): 新增内容类型与首页分类 feed`;`--no-ff` 合回 develop 并 push。 - ReelShortWeb:`pnpm ts:check`、`pnpm build:dev` 通过;提交 `feat(admin): 短剧列表展示并编辑互动数据`;`--no-ff` 合回 develop 并 push。 - 作者统一 `Zhou Weidong <502333560@qq.com>`;各自 PROGRESS 追加 K88 留痕。