课程管理新增单词与数学思维内容编辑:单词词库落库(word_entry+0007迁移,表空回退words.json),家长端按天增删改单词;数学思维编辑器对标语法编辑器;课程管理加入两张入口卡片

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
jacobxu666
2026-08-17 17:25:04 +08:00
co-authored by Claude Opus 4.8
parent ab84bec1b4
commit 5f207e4a57
17 changed files with 565 additions and 22 deletions
+33
View File
@@ -0,0 +1,33 @@
// xuchao: 单词词库种子——words.json 灌入 word_entry;仅表空时全量灌入,已有数据视为家长已编辑,跳过
import { sql } from "drizzle-orm";
import { drizzle } from "drizzle-orm/mysql2";
import mysql from "mysql2/promise";
import raw from "../src/content/words/words.json";
import { wordEntry } from "../src/db/schema";
async function main() {
const conn = await mysql.createConnection(process.env.DATABASE_URL!);
const db = drizzle(conn);
const [cnt] = await db.select({ n: sql<number>`COUNT(*)` }).from(wordEntry);
if (cnt.n > 0) {
console.log("word_entry 已有", cnt.n, "条,跳过灌入(视为已编辑数据)");
await conn.end();
return;
}
const rows = (raw as { word: string; meaning: string; day: number; seq: number }[]).map((w) => ({
word: w.word,
meaning: w.meaning,
day: w.day,
seq: w.seq,
}));
// 分批插入,避免单条 SQL 过大
for (let i = 0; i < rows.length; i += 500) {
await db.insert(wordEntry).values(rows.slice(i, i + 500));
}
console.log("word_entry 灌入完成:", rows.length, "条");
await conn.end();
}
main();