Files
vscode-workbench/PLANNING/tasks/E-02-游客模式.md
T

3.2 KiB
Raw Blame History

E-02 · 游客模式(拆登录墙,3 题后引导注册)

字段 值
项目 EnglishDrill · Desktop/english-drill(frontend 为主 + backend 迁移接口)
优先级 P0 · M1
建议模型 deepseek-v4.1-flash(主)/ qwen3.8-flash(迁移用例复核)
依赖 无
预估 1.5 天

一、背景(为什么做)

src/App.tsx:29:return user ? <>{children}</> : <Navigate to="/login" replace />——第一屏就是登录墙,刷题类产品的首次体验必须是"先做一道题",不是"先注册"(增长报告 P0-2,业界经验:登录墙前置砍 50-70% 首访)。

后端已有基础:部分接口(如 /api/practice/plan)本就不需要登录,只是前端拦住了。后端权限核对是前提。

二、目标(交付物)

  1. 前端放开匿名访问:首页 /、题库 /bank 可未登录访问(其余页面维持守卫)。
  2. 游客答题:游客可完成题目(复用现有答题 UI);答题记录存 localStorage(question_id + 答案 + 时间 + 对错)。
  3. 3 题后引导:答完第 3 题弹注册引导——文案"注册后可保存进度",不阻断也不再强制弹(可关闭,还能继续答)。
  4. 注册迁移:注册/登录成功后,把本地游客记录 POST 到后端迁移接口,写入正式 Attempt 数据(统计/错题本立即可见);迁移后清空本地缓存。
  5. 后端:POST /api/practice/migrate-guest(认证 + 幂等:重复提交同批次不双写);核对答题接口对匿名请求的返回(未登录答题若需要后端支持则补匿名通道,只存不关联用户)。
  6. 首页顶部加游客提示条("游客模式 · 记录仅存本机,注册后同步")。

三、执行步骤

1. 权限审计:全部被前端守卫但后端其实放行的接口清单;不放行的列出(答题/题库)
2. 前端路由守卫分层:公开路由 vs 需登录路由
3. 游客答题暂存层(localStorage 结构 + 容量控制)
4. 3 题引导弹层(可关闭)
5. 迁移接口 + 前端注册后调用(含失败重试与本地保留策略)
6. E2E:游客路径全流程用例

四、验收标准

  • 未登录访问首页/题库正常渲染,可完成至少 1 道题
  • 游客答满 3 题后出现注册引导;关闭后仍可继续答题
  • 注册后:游客期间记录迁移进账号——统计页可见、错题本能查到
  • 迁移幂等:重复调用不产生重复记录
  • 未登录点"下一题"不崩(无 user 上下文兜底)
  • 既有 E2E 全绿 + 新增游客路径用例 ≥8 条(含迁移、幂等、关闭引导)

五、验收命令(参考)

cd backend && python tests/e2e/run_e2e.py -k guest
python tests/e2e/run_e2e.py --http
# 手工:清 localStorage → 游客答 3 题 → 注册 → 统计页核对

六、边界(不许做)

  • 不做完全匿名账号体系(游客数据只暂存本机 + 一次性迁移,不建影子用户)
  • 不动现有登录/注册流程本身
  • 不放开的页面绝不放开(wallet/admin/profile 等保持守卫)

七、交接

写 PROGRESS_E-02.md(含游客全流程复现步骤与迁移输出证据)。