66 lines
2.7 KiB
Markdown
66 lines
2.7 KiB
Markdown
# 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`(含三处用例输出证据)。
|