forked from wangziqi/gongxue-base
feat: build legacy practice navigation
This commit is contained in:
@@ -148,6 +148,15 @@ auxiliary.db: _logs 121715 条,仅摘要
|
||||
- `referral_qrcodes` 79 条会导入到 `referral_qrcodes`,并同步补 `referral_codes`。
|
||||
- `commission_settings` 1 条会导入到 `tenant_commission_settings`。
|
||||
|
||||
当前导入器还会把旧题库的树形导航整理成新 SaaS 题库导航:
|
||||
|
||||
- `region_modules` 生成 `content_entries(entry_type='question_practice')`。
|
||||
- `module_nodes`、`subjects`、`categories` 生成 `content_nodes`,保留任意深度分类和考试意向标记。
|
||||
- `questions.nodeId` 会优先生成 `module_node:*:direct` 题目合集;旧库真实数据中 74102 道题都有 `nodeId`,因此这是迁移后的第一归属。
|
||||
- `categoryId` 只覆盖 27665 道题,作为补充分类合集处理,不再作为唯一前端入口。
|
||||
- 每个有效合集自动生成顺序刷题和随机刷题 `practice_blueprints`,旧 `mock_exam_configs` 继续生成全真模拟蓝图。
|
||||
- 每道已发布旧题都会回填 `entry_id`、`content_node_id`、`primary_collection_id`,方便 Taro 前端直接按 `content_entries/content_nodes/question_collections/practice_blueprints` 对接。
|
||||
|
||||
导入器对两个真实 blocker 采用“隔离 + 审计”策略,不会静默丢数据:
|
||||
|
||||
- 缺用户订单仍导入 `orders/payments/order_items`,`raw_payload.migration.reviewRequired=true`、`entitlementBlocked=true`,并写入 `pb_import_issues`。缺用户订单不会自动开通权益。
|
||||
@@ -163,7 +172,7 @@ production dry-run 还有这些 warning,属于运营处理项:
|
||||
```text
|
||||
环境:本地 Supabase,先执行 npx supabase db reset
|
||||
命令:npm run pb:import:json
|
||||
耗时:约 8 分 58 秒
|
||||
耗时:约 10 分 11 秒
|
||||
导入后校验:npm run pb:import:validate => 0 failures, 3 warnings
|
||||
|
||||
核心计数:
|
||||
@@ -173,9 +182,20 @@ answer_records: 85199
|
||||
wrong_questions: 38205
|
||||
orders: 636
|
||||
entitlements: 447
|
||||
practice_blueprints(mode=mock_exam): 48
|
||||
referral_qrcodes: 79
|
||||
tenant_commission_settings: 1
|
||||
|
||||
新题库导航计数:
|
||||
content_entries: 11
|
||||
content_nodes: 2830
|
||||
question_collections: 1597
|
||||
question_collection_items: 82106
|
||||
practice_blueprints: 3102
|
||||
questions_missing_entry/node/collection: 0
|
||||
node_direct_collections: 1518
|
||||
hidden_review_entries: 1
|
||||
orphan_review_collections: 5
|
||||
orphan_review_questions: 103
|
||||
```
|
||||
|
||||
最新导入 run 的 `pb_import_issues` 仍有 29 个 critical,需要正式切换前人工复核:
|
||||
@@ -185,11 +205,16 @@ tenant_commission_settings: 1
|
||||
|
||||
导入后校验的 3 个 warnings 当前含义:
|
||||
|
||||
- 2533 道题保留 `legacy_category_id` 但无法解析到旧 `categories/module_nodes`,原始 `categoryId` 与 `nodeId` 相同,且旧导出中已没有对应分类或节点。不能由导入器硬绑到错误分类,需后续按科目/题型人工归档或在内容后台批量挂载。
|
||||
- 2533 道题保留 `legacy_category_id` 但无法解析到旧 `categories/module_nodes`。其中能落到明确 `nodeId` 或公开科目的题会进入对应合集;确实断裂且不可公开归类的 103 道题进入隐藏的“迁移待复核题库”,不会出现在学生端目录。
|
||||
- 5298 条旧答题记录保留 `legacy_question_id` 但无法解析到题目,说明旧学习日志引用了已删除/未导出的题目;这些记录不会进入错题本有效组卷。
|
||||
- 最新 run 存在 29 个 critical import issues,即上面的付费订单和手册章节人工复核项。
|
||||
|
||||
性能注意:真实 `pb:import:json` 已能在 9 分钟左右完成 248555 条真实记录导入。后续若题库规模继续增长,仍建议继续批量化 `questions/question_versions` 并补阶段耗时统计、失败恢复和断点重跑策略。
|
||||
旧 `nodeId` 断裂的题目分两类处理:
|
||||
|
||||
- 103 道题:科目可解析,但旧节点和科目入口都无法恢复,进入隐藏入口 `migration_review:orphan_questions`、inactive 节点和 draft 合集,只给租户后台复核。
|
||||
- 129 道题:旧节点断裂,但科目/入口仍可公开解析,挂到对应公开科目 fallback 合集,学生端可正常看到。
|
||||
|
||||
性能注意:真实 `pb:import:json` 已能在约 10 分钟完成 248555 条真实记录导入并生成新导航。后续若题库规模继续增长,仍建议继续批量化 `questions/question_versions`、记录阶段耗时、增加失败恢复和断点重跑策略,并按 `docs/refactor/performance-benchmark-runbook.md` 做导入后 API 压测。
|
||||
|
||||
## 阶段 1:静态 Dry-Run
|
||||
|
||||
|
||||
Reference in New Issue
Block a user