2.6 KiB
2.6 KiB
PROGRESS — C-02 · 工具热榜 + 最近使用
- 状态:done
日期 2026-09-12/13 · 范围:可乐工具(
chunyu_project/tool+chunyu_project_react)
现状 vs 差距(接手时)
- 已有:
ToolUsageRecord模型+迁移、ToolTopView(仅period=total|week)、increment双写、Home 热榜横条(period=total)。 - 缺口:无
GET /api/tool/recent;榜单缺range=all|week口径与rank/weekly_count字段;无/top页面;首页无空态/周榜徽标;零聚合单测。
改动
后端(chunyu_project/tool/):
views/tool_manage_view.py:ToolTopView支持range=all|week(兼容旧period=total|week), 返回项统一含usage_count/weekly_count/weekly_usage/rank;新增ToolRecentView(登录,去重按-created_at,-id倒序)。views/__init__.py、urls.py:挂载path('recent/', ToolRecentView)。management/commands/seed_tools.py:新增AI 工具分类(给 C-04 用)+AI 图片放大/代码在线运行两个工具种子。tests/test_tool_top.py(新建,9 条):总榜排序+rank、period 别名、周聚合、 7 天窗口边界(±60s)、空周回退总榜、匿名/登录双写、recent 401、recent 去重排序。
前端(chunyu_project_react/src/):
5. pages/Top/(新建 Top.tsx+Top.css):/top 总榜/周榜切换 + 排名 + “本周 XX 人在用”。
6. App.tsx:Top 懒加载路由 /top。
7. utils/request.ts:tool.getTop 沿用 + 新增 tool.getRecent。
8. pages/Home/Home.tsx:热榜改 range=all,查看全部指向 /top,加空态 +
周榜徽标;Home.css 加 .home-utility-card-weekly、.home-top-empty。
口径说明
- 存量
Tool.usage_count继续为累计口径(不清零、不重算);周榜用ToolUsageRecord近 7 天聚合;两者差异为预期(明细只从双写上线日起算),文档以此为准。
验证
DB_ENGINE=django.db.backends.sqlite3 DB_NAME=".../chunyu_project/dev_db.sqlite3" \
python ".../chunyu_project/manage.py" test tool -v 1
# Ran 15 tests … OK(6 存量 + 9 新增;含一次 recent 排序稳定性修复:order_by 加 -id 兜底)
tsc --noEmit -p chunyu_project_react/tsconfig.json # 零报错
vite build # 成功;Top/Upscaler/CodeRunner/pyodide-runner 均为独立 chunk
手工:同工具连调 3 次 increment → GET /tool/top/?range=week weekly_count=3(单测已覆盖同等价)。
状态
done。遗留:/top 页 i18n 文案为中文硬编码(多语言 key 后续补)。