docs: 用户表预留 course_id,记录多教材扩展点

- 04-architecture 3.2:progress/vocab 加预留列 course_id(默认 family-album),
  避免将来接入新概念英语等时迁移用户数据;MVP 仅留列不写多教材逻辑
- 06-tasks:T-301 验收注明该预留列;待办池补"多教材接入"扩展点备忘

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ila
2026-06-21 15:16:59 +08:00
co-authored by Claude Opus 4.8
parent b7b549d679
commit 060daf02a1
2 changed files with 17 additions and 4 deletions
+6 -2
View File
@@ -87,9 +87,13 @@
**users** — id, email, password_hash, created_at
**progress** — user_id, episode_id, act, last_position(秒), completed, updated_at
**progress** — user_id, **course_id**, episode_id, act, last_position(秒), completed, updated_at
**vocab** — id, user_id, word, episode_id, act, context_sentence, created_at
**vocab** — id, user_id, **course_id**, word, episode_id, act, context_sentence, created_at
> **`course_id` 是前向兼容的预留列**:MVP 只有「走遍美国」一个教材,建表时即带上此列、固定默认 `"family-album"`。
> 目的是避免将来接入新概念英语等时,对**已产生的用户进度/生词数据**做痛苦的 schema 迁移(用户数据不可重生,内容数据可重生)。
> ⚠️ MVP 阶段**仅留列、填默认值,不写任何多教材逻辑**(不建 courses 表、不改内容 JSON、不做按教材过滤)——多教材接入是 V2+,见 [任务看板](06-tasks.md) 待办池。
**功能模块化**:字幕同步、生词本、播放器做成可复用组件,不同教材按需启用(走遍美国用字幕同步;新概念可能更重单词表与语法)。
+11 -2
View File
@@ -55,7 +55,7 @@
| ID | 任务 | 依赖 | 验收要点 | 状态 |
| --- | --- | --- | --- | --- |
| T-301 | SQLite 初始化 + 建表(users/progress/vocab) | T-002 | 按 04-architecture 第 3.2 节建表;首次启动自动建库 | TODO |
| T-301 | SQLite 初始化 + 建表(users/progress/vocab) | T-002 | 按 04-architecture 第 3.2 节建表;首次启动自动建库;**progress/vocab 含预留列 `course_id`,默认 `"family-album"`(仅留列,不写多教材逻辑)** | TODO |
| T-302 | 注册 / 登录 API + httpOnly Session Cookie | T-301 | 注册、登录成功后下发 httpOnly cookie;带 cookie 的请求能识别用户;登出失效 | TODO |
| T-303 | 前端登录 / 注册界面 + 登录态 | T-302 | 能注册登录;刷新后保持登录;未登录访问需登录的页面会被引导登录 | TODO |
@@ -99,5 +99,14 @@
## 待办池(Backlog · V2+,暂不排期)
复读/精听(AB 复读、变速)、测验、学习打卡、激励模块、多教材扩展、中英对照、生词 SRS。
复读/精听(AB 复读、变速)、测验、学习打卡、激励模块、中英对照、生词 SRS。
(来源见 02-requirements"后续迭代";**MVP 阶段一律不做**。)
### 多教材接入(如新概念英语)— 扩展点备忘
MVP 已做的前向兼容:`progress`/`vocab` 预留了 `course_id` 列(默认 `family-album`),用户数据无需迁移。真正接入时还需:
1. **内容加 course 层**:每本教材一个 JSON + courses 索引(或顶层 `courses[]`);走遍美国即第一个 course。
2. **用户表启用 course 维度**:查询/写入带上 `course_id`(列已预留,补逻辑即可)。
3. **内容组件按教材类型分化**:新概念更重课文+单词表+语法,需不同渲染组件(架构已说"功能模块按教材启用")。
4. **`line` 兼容无逐句时间戳**:`t` 可空 + 无同步降级(T-104 的容错思路可复用)。