docs(plans): 记录 K2 实施与验收回执

This commit is contained in:
Zhou Weidong committed 2026-10-17 14:50:51 +08:00
1 parent 4118efd0ca
commit 698bb78aeb
3 files changed
+633 -1

No files matched your search

+81 -1
View File
@@ -20,7 +20,7 @@
---
## [待处理] 2026-10-17 | K2 客户端第二批:分类 + 观看记录 + 收藏列表 + 下载授权(A3/A5 剩余)+ UI
## [已处理·待用户验收] 2026-10-17 | K2 客户端第二批:分类 + 观看记录 + 收藏列表 + 下载授权(A3/A5 剩余)+ UI
**用户指令(2026-10-17)**:「现在先做客户端 对接相关接口 及ui 严格执行specs 内的要求」。
@@ -149,6 +149,86 @@
> **用户裁定(2026-10-17)**:**先按现状契约执行,上述缺口后期再补**。本批不得因缺口停工,也不得临时改后端或自造接口;按第二节的降级方案实现,缺口留到后续批次。
### 七、Codex 回执(2026-10-17)
**状态**:K2-A/B/C/D 代码、自动化测试、Android debug 构建与 develop 推送已完成;
真机/模拟器侧业务验证**未验证**,按红线交用户执行。K3/K4 未开始。
**提交**
```
feature: cc4d7c5a9dc6a4f6f0565a32503cce5973af703c
merge: 45f5f25640a274edb51bd90b3b5e52c43ba9d9cd
branch: feature/flutter-k2-library -> develop(--no-ff,已 push,feature 已删除)
main: 未改动
```
**已接真实契约数据**
- 发现页分类:`GET /app/categories` + `GET /app/discover/feed`;
服务端分类只匹配 `category-{id}`,无分区显示空态。
- 独立观看记录页:`GET /app/watch/recent?limit=20`、按 dramaId 去重并发上限 4 补详情、
`DELETE /app/watch/progress/{dramaId}`、`DELETE /app/watch/progress`。
- 独立我的收藏页:`GET /app/favorites`、`POST /app/favorites/toggle`、
`DELETE /app/favorites/{dramaId}`。
- 我的下载页:§1.6 全部 8 个 `/app/downloads*` 接口;详情页/播放页下载入口调用
`POST /app/downloads`,拒绝时直接展示后端 `message`。
- 三页面均为加载 / 空 / 失败可重试三态;未登录显示登录引导。
**仍本地或未做**
- 搜索未做:契约没有搜索接口。
- 文件分片落盘、断点续传、离线播放、`licenseKey` 本地校验未做;本批只交付授权与状态管理。
- 点赞/评论仍沿用既有本地状态,属 K3,不在本批。
- 发现 feed 当前只下发 `category-{id}`;若后端没有 `hot`/`new` 分区,保留的入口显示空态。
- 收藏接口仍返回全量数组,本批未发送 `page/size`。
**门禁原始输出**
```
$ dart analyze lib test
Analyzing lib, test...
No issues found!
$ flutter test
00:11 +220 ~1: All tests passed!
$ flutter build apk --debug
Running Gradle task 'assembleDebug'... 2,377ms
✓ Built build/app/outputs/flutter-apk/app-debug.apk
```
`~1` 是既有真实后端联调用例因本机 8081 服务未启动而按设计跳过,不是失败。
首次冷构建也成功,耗时 `705.7s`;最终修复后缓存构建 `2,377ms`。
**用户验证步骤与预期**
1. 在 ReelShort 执行 `git checkout develop && git pull origin develop`,确认 HEAD 为
`45f5f25`;后端 8081 已启动,手机与开发机在同一局域网。
2. 取局域网地址并运行:`IP=$(ipconfig getifaddr en0)`,
`flutter run -d <device-id> --dart-define=API_BASE_URL=http://$IP:8081`。
预期:App 启动、首页/发现能加载;地址必须按当前网络重新获取。
3. 打开发现页:分类条应出现 `/app/categories` 返回的分类。选择一个有内容分类,
预期显示 discover feed 对应 `code=category-{id}` 的剧;选择无分区分类显示空态。
4. 播放任意免费集约 10 秒后返回,进入“我的 → 观看记录”。
预期:出现该剧封面/剧名/集号/进度/更新时间;即使该剧不在首页分区也能显示。
单条删除先立即消失;断网重试删除时,记录应恢复并提示失败。清空应先弹二次确认。
5. 在详情或播放页收藏一部剧,进入“我的 → 我的收藏”。
预期:卡片来自服务端;点粉色收藏按钮取消后立即消失;断网取消应恢复卡片并提示失败。
6. 登录后在详情页/播放页点下载入口。
预期:成功时提示“下载授权已就绪”;付费、未解锁或配额满时,直接出现后端 `message`。
进入“我的 → 下载”,预期策略卡显示剩余配额/授权天数/`expirePolicyText`;
列表显示后端 `status`、`taskStatus`、`progressPercent`、到期时间;
仅 Wi-Fi、清晰度、单删、清空可操作。
7. 退出登录后分别进入观看记录、我的收藏、我的下载。
预期:三页都显示登录引导,不显示网络错误或白屏。
**证据口径**
- 以上设备侧步骤尚未执行,因此真机/模拟器验证统一标记「未验证」。
- 没有用开发机 `curl` 冒充设备可达证据。
- 本批不包含实际文件下载,因此不能据此验收“离线播放”。
---
## [已处理] 2026-10-17 | 三库全量拉取 + `main` → `develop` 同步(Trae 执行,无代码改动)