Files

5.4 KiB
Raw Permalink Blame History

2026-10-17 K3 客户端第三批:互动

一、目标与边界

本轮只完成 Flutter 客户端互动能力的真实接口接入:

  • K3-A 评论:匿名游标列表、顶层评论与一层回复、发布、敏感词三档、删除、三态与重试。
  • K3-B 点赞:剧集与评论点赞、乐观更新、失败回滚、未登录拦截、防连点。
  • K3-C 举报:举报评论与短剧、固定原因单选、可选描述、成功与失败提示。
  • K3-D 分享回归:沿用现有系统分享,核对标题、简介与 footer 的三语文案。

不做 K4、拉黑、举报用户、后台治理、图片/表情/@提及、无限嵌套、我的评论列表和并发压测。 后端代码、后台 Web、specs 仓库均不改;接口只使用 FruitServer/docs/api-phase1.md §1.7。

一之一、实测基线

  • ReelShort:develop / feature/flutter-k3-interaction 均为 45f5f25,功能分支从 K2 合并点派生。
  • FruitServer:develop 为 a0156ee,比 origin/develop 多 1 个仅包含 INBOX 的派单提交。
  • 本计划文件在开工前的 FruitServer 工作区中已存在且尚未提交,本轮仅增量补充,不覆盖既有内容。

二、契约与数据口径

能力 接口 客户端处理
评论列表 GET /app/comments?dramaId=&episodeId=&rootId=&cursor=&size= 首屏 20 条,按 nextCursor 续拉,用 hasMore 控制加载更多
发布评论 POST /app/comments 顶层传 dramaId/content,回复额外传 parentId
删除评论 DELETE /app/comments/{id} 仅 mine=true 可操作,二次确认,失败恢复列表
点赞切换 POST /app/likes/toggle DRAMA / COMMENT,以响应 {liked,count} 为最终态
举报 POST /app/reports COMMENT / DRAMA,reasonCode 必填
系统分享 无后端接口 保持 PlatformShareService

评论字段按 CommentRespVO 解析,ID 全部使用字符串。所有新增用户可见文案进入 lib/l10n/app_{en,zh,id}.arb 并重新生成。

三、已确认的契约缺口与降级

  1. AppDramaDetailVO / AppDramaCardVO 没有 likeCount / liked。 降级:不展示剧集点赞数字,只维护当前会话内的 liked 状态。 建议:后端详情与卡片补 likeCount / liked,需 specs 负责人变更契约。
  2. §1.7 没有定义 reasonCode 枚举,后端当前不校验。 降级:客户端固定 SPAM / ABUSE / PORN / AD / OTHER 五项,文案进三语 arb。 建议:后端补 reasonCode 枚举与后台工单映射。
  3. §1.7 没有拉黑接口。 降级:本批不做拉黑,不提供入口。

四、预计影响文件

FruitServer 文档:

  • docs/plans/2026-10-17-K3.md
  • docs/plans/PROGRESS.md
  • docs/plans/INBOX.md

ReelShort 客户端:

  • lib/core/data/remote/comment_api.dart
  • lib/core/data/remote/interaction_api.dart
  • lib/core/data/repositories/comment_repository.dart
  • lib/core/data/repositories/interaction_repository.dart
  • lib/core/data/services/comment_controller.dart
  • 互动相关模型、Provider 注入与页面/组件
  • lib/pages/player/widgets/drama_comments_sheet.dart
  • lib/pages/player/player_view.dart
  • 详情页举报入口及互动弹窗
  • lib/l10n/app_{en,zh,id}.arb 与生成文件
  • 对应 test/**/*_test.dart

实际文件以现有 K1/K2 分层和注入方式为准,避免无关重构。

五、TDD 与执行顺序

  1. 只读核对 ReelShort 与 FruitServer 的 develop 基线、工作区状态与提交。
  2. 从 develop 建 feature/flutter-k3-interaction。
  3. K3-A:先写评论分页、发布、敏感词、删除、失败回滚和未登录测试并确认红灯,再实现并转绿。
  4. K3-B:先写剧集/评论点赞成功、计数、乐观更新、回滚和未登录测试并确认红灯,再实现并转绿。
  5. K3-C:先写举报成功、重复举报 message 透传和未登录测试并确认红灯,再实现并转绿。
  6. K3-D:补充分享文案回归检查,确认三语资源完整。
  7. 每块执行定向测试和 dart analyze lib test。
  8. 全量执行 dart analyze lib test、flutter test、flutter build apk --debug。
  9. 分块提交,--no-ff 合并回 develop 并 push;文档单独提交并 push。
  10. 在 PROGRESS.md 与 INBOX 写回执,列出用户真机验证步骤,并明确设备侧取证未由 Codex 执行。

六、风险与待确认

  • 评论游标的实际响应字段以已实现后端 VO 为准;若与任务书 nextCursor/hasMore 不一致,先停止并在 INBOX 顶部登记待协助,不自行扩契约。
  • 剧集点赞没有初始查询接口,页面重建后会话内状态可能丢失;本批按降级方案不伪造初始值。
  • 匿名列表可见,但发布、点赞、举报必须登录;需确保 AuthGate 在发起业务请求前拦截。
  • 举报重复与举报自己依赖后端 message,客户端只原样展示,不自行判断。
  • 敏感词 REVIEW 的 pending 评论仅自己可见,客户端必须保留发布成功返回内容并显示“审核中”。
  • 现有互动控制器为本地演示数据,移除时不得破坏 K2 的分类、记录、收藏、下载和播放进度逻辑。
  • 全量构建可能受本机 Flutter/Android SDK 环境影响;若失败会记录原始输出,不以开发机接口请求代替设备证据。
  • 当前没有待确认的产品问题;若执行中出现契约与实现不一致,按任务书先停并登记。