2.6 KiB
2.6 KiB
E-03 · 每日一题 + 全站正确率
| 字段 | 值 |
|---|---|
| 项目 | EnglishDrill · Desktop/english-drill |
| 优先级 | P0 · M2 |
| 建议模型 | glm-5.3-flash(主)/ qwen3.8-flash(哈希与并发复核) |
| 依赖 | 无 |
| 预估 | 1 天 |
一、背景(为什么做)
给"每天打开"一个除打卡之外的理由,且每天全站同题 → 可以讨论、可以比。全站正确率是社交货币:"今天 128 人作答,正确率 43%"(增长报告 P0-3)。题库已有 226 题,选题算法几行搞定——成本极低。
二、目标(交付物)
后端
GET /api/challenge/today→{ question, my_answer?, participants_today }- 选题:
hash(日期字符串)对题目数取模(确定性:同日全站同题;跨日自动轮换;跳过软删题)
- 选题:
POST /api/challenge/today→ 提交答案{ answer }→ 返回{ correct, all_correct_rate, participants_today }- 全站正确率 = 今日该题全部作答的正确比例(实时聚合)
- 同一用户重复提交:以最新为准(或幂等返回,选一种并写进用例)
- 与现有
Attempt打通(每日一题作答是否计入统计——计入,保持口径统一)
前端
- 首页顶部卡片:"每日一题"——作答交互(选择题选项/填空题输入)、提交后展示
全站正确率 + 参与者数 + 我的结果 - 已答状态持久(刷新不丢,从后端
my_answer恢复)
三、执行步骤
1. 侦察 Question 模型(软删字段/题型)与 Attempt 写入惯例
2. 确定性选题函数 + 单测(同日期多用户同题、跨日期轮换、软删跳过)
3. GET/POST 接口 + 并发下正确率聚合正确性
4. 首页卡片(含已答态、错误态、空题库态)
5. E2E:guest/登录两态、提交、重复提交
四、验收标准
- 同日任意用户 GET 得到同一题(固定日期多用户用例证明)
- 跨日自动更换(mock 日期证明)
- 提交返回正确率与参与人数准确(构造 2 用户 1 对 1 错 → 50%)
- 重复提交行为明确定义且用例覆盖
- 首页卡片:未答/已答/空题库三态正常
- 既有 E2E 全绿 + 新增 ≥6 用例
五、验收命令(参考)
cd backend && python tests/e2e/run_e2e.py -k challenge
python tests/e2e/run_e2e.py --http
六、边界(不许做)
- 不新建题目表/排期表(复用 Question + 哈希选题,零人工排期)
- 不做推送/提醒(本轮只做入口)
七、交接
写 PROGRESS_E-03.md(含确定性选题与正确率聚合的用例输出)。