Files
vscode-workbench/PLANNING/tasks/C-02-工具热榜.md
T

68 lines
3.1 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-02 · 工具热榜 + 最近使用
| 字段 | 值 |
|---|---|
| 项目 | 可乐工具 · `chunyu_project`(tool app)+ `chunyu_project_react` |
| 优先级 | P0 · M2 |
| 建议模型 | deepseek-v4.1-flash(主)/ qwen3.8-flash(时间窗边界用例) |
| 依赖 | C-01(路由基线修好再动页面) |
| 预估 | 1.5 天 |
## 一、背景(为什么做)
1. 工具只有 16 个,竞品 100+——先激活存量:`Tool.usage_count` 字段已有,但**没有转化为任何排行榜/热门入口**(数据在睡觉)。
2. 竞品实证:tool.lu 有 `/top/` 排行榜、掘金有排行榜侧栏——这是低成本高粘性的标准件。
3. 报告结论:工具页无"最近使用/最热使用"入口是 P0 级发现缺口(`docs/产品问题分析与改造路线.md` P0-1)。
## 二、目标(交付物)
**后端(tool app)**
1. 新模型 `ToolUsageRecord`:`tool`(FK)、`user`(nullable,匿名可为空)、`session_key`(匿名归因)、`created_at`,索引 `(tool, created_at)`。
2. 现有"使用工具"计数逻辑处**双写**:保留 `usage_count` 自增,同时写 `ToolUsageRecord`。
3. 聚合接口:
- `GET /api/tool/top?range=all|week&limit=10` → `[{id, name, icon, usage_count, weekly_count, rank}]`
- `GET /api/tool/recent`(登录,返回本人最近使用工具)
4. 迁移文件 + 存量 `usage_count` 回填说明(无历史明细则从当前值起算,文档写清楚)。
**前端(React)**
5. 新页面 `Top.tsx`(路由 `/top`):总榜 / 周榜切换 + 完整榜单。
6. `Home.tsx`:Hero 下方加"🔥 热门工具 Top10"横条(横向滚动卡片)。
7. 工具卡片展示"本周 XX 人在用"(取 `weekly_count`;为 0 时不显示)。
## 三、执行步骤
```text
1. 定位现有 usage_count 自增点(tool app views/ 与前端调用处)
2. 建模 + 迁移 + 双写 + 聚合接口(异步视图,adrf 风格对齐项目惯例)
3. 前端 Top 页 + Home 横条 + 卡片徽标
4. 写测试:聚合正确性(总/周窗口)、匿名归因、recent 权限
5. 回归既有测试 + 手工验收
```
## 四、验收标准
- [ ] 使用任意工具 → `ToolUsageRecord` 新增记录(登录记 user,匿名记 session_key)
- [ ] 总榜 = 全部记录聚合;**周榜 = 最近 7 天窗口**(用固定时间戳测试用例验证窗口边界:7 天整、7 天+1 秒)
- [ ] `/top` 页总榜/周榜切换正常,排名序号正确
- [ ] 首页 Top10 横条渲染,空数据时有优雅空态
- [ ] `usage_count` 旧数据与新聚合口径一致(或文档说明差异)
- [ ] 既有测试全绿 + 新增用例 ≥6 条
## 五、验收命令(参考)
```bash
cd chunyu_project && python manage.py makemigrations tool && python manage.py migrate
python manage.py test tool -v 2 # 新增用例全绿
# 手工:连续调用同一工具 3 次 → GET /api/tool/top?range=week 计数=3
```
## 六、边界(不许做)
- 不改 `Tool` 既有字段语义(`usage_count` 继续有效)
- 不做"工具使用周报"等衍生功能(另一张卡的空间)
- 不动其他 app
## 七、交接
写 `PROGRESS_C-02.md`(含聚合用例输出与窗口边界测试证据)。