feat(scripts): add diagnostic, seed, and test scripts

- Add add-ai-provider-visibility and add-missing-columns migration scripts

- Add clear-error-book, seed-error-book, diagnose-error-book scripts

- Add diagnose-tables and create-missing-tables scripts

- Add test-failing-modules and test-teacher-pages test scripts
This commit is contained in:
SpecialX
2026-06-24 12:01:54 +08:00
parent e4254f0f8e
commit 9783be58c0
9 changed files with 1713 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
/**
* 诊断 4 个失败模块的数据库表结构和查询问题
*/
require("dotenv/config");
const mysql = require("mysql2/promise");
async function main() {
const conn = await mysql.createConnection({ uri: process.env.DATABASE_URL });
const tables = [
"learning_diagnostic_reports",
"announcements",
"messages",
"message_notifications",
"error_book_items",
"error_book_reviews",
];
for (const table of tables) {
console.log(`\n${"=".repeat(60)}`);
console.log(`表: ${table}`);
console.log("=".repeat(60));
// 检查表是否存在
const [exists] = await conn.execute(
`SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,
[table],
);
if (exists.length === 0) {
console.log(" ❌ 表不存在!");
continue;
}
console.log(" ✅ 表存在");
// 获取列信息
const [cols] = await conn.execute(
`SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_TYPE
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?
ORDER BY ORDINAL_POSITION`,
[table],
);
console.log(" 列:");
for (const c of cols) {
console.log(` - ${c.COLUMN_NAME}: ${c.COLUMN_TYPE} (NULL=${c.IS_NULLABLE}, DEFAULT=${c.COLUMN_DEFAULT})`);
}
// 获取行数
try {
const [count] = await conn.execute(`SELECT COUNT(*) as cnt FROM \`${table}\``);
console.log(` 行数: ${count[0].cnt}`);
} catch (err) {
console.log(` 行数查询失败: ${err.message}`);
}
}
await conn.end();
}
main().catch((err) => {
console.error("致命错误:", err);
process.exit(1);
});