research_db_snapshot_2026_fall.mjs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #!/usr/bin/env node
  2. import fs from "node:fs";
  3. import path from "node:path";
  4. import { fileURLToPath } from "node:url";
  5. import mysql from "mysql2/promise";
  6. import config from "../../src/config/dev.js";
  7. const taskDir = path.dirname(fileURLToPath(import.meta.url));
  8. const outputPath = path.join(taskDir, "research_db_snapshot_2026_fall.json");
  9. const miaoguoBookIds = [13, 15, 17, 19, 21, 23, 24, 54, 56, 58, 60, 61, 62, 63, 64];
  10. const hanziBookIds = [25, 27, 29, 31, 33, 35, 36, 74, 76, 78, 80, 81, 82, 83, 84];
  11. const connection = await mysql.createConnection({
  12. ...config.database,
  13. charset: "utf8mb4",
  14. });
  15. try {
  16. const [books] = await connection.query(
  17. `SELECT ID, BookIDOld, BookName, UnitNum, WordNum
  18. FROM MiaoguoBook
  19. WHERE ID IN (?)
  20. ORDER BY ID`,
  21. [miaoguoBookIds],
  22. );
  23. const [targetRows] = await connection.query(
  24. `SELECT ID, HanziBookID, Sort, Category, Tag, Title, ImgUrl,
  25. Author, Dynasty, PeomContent, Translation, Flag
  26. FROM AncientPoetry
  27. WHERE HanziBookID IN (?)
  28. ORDER BY HanziBookID, Sort, ID`,
  29. [hanziBookIds],
  30. );
  31. const [allRows] = await connection.query(
  32. `SELECT ID, HanziBookID, Sort, Category, Tag, Title, Author, Dynasty,
  33. PeomContent, Translation, Flag
  34. FROM AncientPoetry
  35. ORDER BY ID`,
  36. );
  37. fs.writeFileSync(
  38. outputPath,
  39. `${JSON.stringify({ capturedAt: new Date().toISOString(), books, targetRows, allRows }, null, 2)}\n`,
  40. "utf8",
  41. );
  42. console.log(JSON.stringify({ outputPath, books: books.length, targetRows: targetRows.length, allRows: allRows.length }));
  43. } finally {
  44. await connection.end();
  45. }