Files
vscode-workbench/PLANNING/tasks/E-03-每日一题.md
T

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(含确定性选题与正确率聚合的用例输出)。