Files
doodle-store/docs/v3.5/题型数据导入说明.md

5.4 KiB
Raw Permalink Blame History

题型数据导入说明

2026-10-16 本地导入

已将用户提供的 worksheets.json 导入本地 doodle_dev。源文件为 CloudBase JSON Lines,共 51 条,无重复 ID、未知字段或日期错误,5 个引用分类均已存在。原附件未改动,SHA-256 为 184e357f25c3c32de76d5f417315fa831e9022d24c8723d92e7bad2e77707150。

项目 结果
题型 新增 51,更新 0,隔离 0
原始发布状态 51 条 active,原样保留
分类分布 math 22、puzzle 11、english 7、chinese 6、pinyin 5
预览资产 新增 51 条,全部 pending
迁移审计 新增 51 条,与题型及资产同事务提交
重复导入 新增 0、更新 0、未变化 51,资产/时间/审计均未改变
新适用年级关系及完整内容资源 均未生成,不从旧值或预览图推断

导入批次时间为 2026-10-16T05:59:22.266Z,北京时间 13:59:22.266;题型自身的 createdAt/updatedAt 使用附件原值,不使用批次时间覆盖。2 条 contentUpdatedAt 原样保留,其余为 NULL。

计数对账:downloads 4203,likes 217,downloads_seed 629,likes_seed 666。11 条题型未提供两种 seed,按数据库约定默认 0,并在报告逐项列出,不重算或修正原下载、收藏计数。

break-ten(破十法练习)的旧 grade 为 23,超出新年级体系 -4~6。该值原样保留在兼容列 worksheets.grade;不拆成 2、3,不裁剪或归零,也不写入 worksheet_grades。其余旧 grade 同样未自动成为审核后的适用年级关系,后续应提供经审核的 worksheetId → grades 映射。

文件迁移边界

本次是本地元数据暂存,不是文件迁移或生产发布。51 张预览图均为旧 cloud:// 引用,未提供本地图片,项目也尚未接入七牛配置。因此先登记稳定资产 ID 与 source_ref/source_ref_hash,status 为 pending;bucket、object_key、external_url、mime_type、size_bytes、checksum 均为 NULL,没有虚构七牛地址或文件校验结果。

为保留原始状态,题型仍记录源 active;这不表示预览图已经可访问,报告明确 readyForPublicUse=false。后续公共题型接口/首页构建必须校验预览资产 ready 和访问策略,不能仅检查 active 就把这批待迁移数据当作完整可用内容。正式迁移/发布仍遵循数据库设计中先完成并核验资产的顺序。

老功能保留原 ID、完整 path、标题、标签及运营标记。generation_mode 使用旧功能兼容默认 procedural,renderer_key 为 NULL,render_config 为 {};不从 ID 猜 renderer,不把封面图当作线框,不伪造 first_published_at、内容资源或文件关联。

工具

在 doodle-store 根目录执行,文件和报告路径使用绝对路径:

# 本地元数据预演,不写数据库
pnpm worksheets:import --file "/绝对路径/worksheets.json" --metadata-only

# 确认预演后写入;可选报告文件必须尚不存在
pnpm worksheets:import --file "/绝对路径/worksheets.json" --metadata-only --apply --report "/绝对路径/import-report.json"

根命令先构建依赖和服务端;已构建时可执行 pnpm --filter @doodle/server worksheets:import ...。工具只允许本机 doodle_dev,仅读取服务端 .env,不连接生产。默认是 dry-run;未显式使用 --metadata-only 时,任何未就绪预览都会阻止导入。

输入支持 JSON Lines/数组、ISO 字符串和 CloudBase { "$date": "..." } 时间,最多 10000 条、10 MiB。未知字段、重复 ID、缺分类、非法时间、年龄/难度/类型错误、负计数或数字精度风险均阻止整批写入。

题型、资产映射和迁移审计原子提交;任何后续行冲突也回滚前面已写数据。共享预览按源引用 SHA-256 复用资产;相同数据重复执行不改变原时间或增加审计。已有同 ID 数据若不同则报冲突,不用旧快照覆盖新写入,不删除附件外的数据。报告文件在写库前独占创建,避免路径/权限或重名问题发生在提交之后。

报告与验证

已通过 pnpm check 及 pnpm test:db。独立临时数据库验证默认拒绝 pending、dry-run 不写库、缺分类拒绝、原 ID/计数/日期/兼容年级保留、重复导入、共享预览复用、旧快照覆盖保护与半批失败回滚;测试库已清理。正式写库后,独立于解析器逐字段核对全部 51 条题型及资产来源,并实际重复执行确认时间及审计不变。

导入本身不提供 HTTP API。2026-10-16 已另行完成题型公开查询,返回文字/元数据并对未就绪预览返回 null,详见 题型查询接口说明。七牛文件迁移与题型管理写接口仍待实施。