# C-06 · 关注 Feed + 首页签到卡 + 学习数据钩子 | 字段 | 值 | |---|---| | 项目 | 可乐工具 · 后端(article/learn/user app)+ `chunyu_project_react` | | 优先级 | P1 · M3 | | 建议模型 | glm-5.3-flash(主)/ qwen3.8-flash(用例复核) | | 依赖 | 无 | | 预估 | 1.5 天 | ## 一、背景(为什么做) 三个**存量能力已实现但没接出口**(`docs/产品内容分析.md` §3 核实): 1. `user.Follow` 模型已有,但文章流没有"关注"维度(掘金三态信息流:推荐/最新/关注)。 2. `DailyCheckin` + 签到 API 已有,首页无签到入口——掘金首页第一屏就是"去签到"。 3. `ChapterRead` 已记录阅读行为,统计"在学人数"只差一个聚合接口。 一句话:**地基打完,差三根接线**。 ## 二、目标(交付物) 1. **关注 feed**: - 后端:`GET /api/article/list?feed=following`(基于 `Follow` 关系过滤,分页对齐现有接口) - 前端:`Articles.tsx` 排序组新增第 5 态"关注";文章卡加作者头像 + 关注按钮 2. **首页签到卡**: - 复用现有 DailyCheckin API;`Home.tsx` 加签到卡(连续天数 + 今日可得金币 + 一键签到) - 签到成功即时刷新状态,已签到显示"今日已签" 3. **学习数据钩子**: - `learn` app 聚合接口:`learners_count`(`ChapterRead` 按用户去重统计)、`total_minutes` - 课程卡显示"XX 人在学";序列化器输出新字段 ## 三、执行步骤 ```text 1. 定位 Follow / DailyCheckin / ChapterRead 现有实现与序列化器 2. 后端三处接口(保持异步 adrf 风格与响应码规范) 3. 前端 Articles 第 5 态 + 签到卡 + 课程卡徽标 4. 补测试:feed 过滤正确性(关注/未关注/互关)、签到幂等(重复签到不重复发币)、聚合去重 ``` ## 四、验收标准 - [ ] 关注 A 后,`feed=following` 只出现 A 的文章;未关注时为空态提示 - [ ] 签到卡:连续天数正确、重复签到幂等(第二次不重复发币) - [ ] `learners_count` = 该课程下 ChapterRead 去重用户数(构造 2 用户交叉阅读用例验证) - [ ] 未登录访问首页签到卡有引导态 - [ ] 既有测试全绿 + 新增 ≥6 用例 ## 五、验收命令(参考) ```bash cd chunyu_project && python manage.py test article user learn -v 2 # 手工:A 关注 B → feed=following 出现 B 文章;连续签到两次 → 金币只发一次 ``` ## 六、边界(不许做) - 不做推荐算法(feed 只有"关注"过滤,不做排序模型) - 不改 Follow/签到既有字段与 API 契约 - 签到卡不做弹窗动画等花活(先接线) ## 七、交接 写 `PROGRESS_C-06.md`(含三处用例输出证据)。