diff --git a/docs/04-architecture.md b/docs/04-architecture.md index 62c23ee..c69a466 100644 --- a/docs/04-architecture.md +++ b/docs/04-architecture.md @@ -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) 待办池。 **功能模块化**:字幕同步、生词本、播放器做成可复用组件,不同教材按需启用(走遍美国用字幕同步;新概念可能更重单词表与语法)。 diff --git a/docs/06-tasks.md b/docs/06-tasks.md index 65a73d1..3ef32fe 100644 --- a/docs/06-tasks.md +++ b/docs/06-tasks.md @@ -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 的容错思路可复用)。