Files
vscode-workbench/PLANNING/tasks/C-06-关注Feed与签到卡.md
T

66 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`(含三处用例输出证据)。