新增評分項目設定、資料庫整合

This commit is contained in:
2025-09-22 00:33:12 +08:00
parent 8de09129be
commit 9d4c586ad3
20 changed files with 2321 additions and 79 deletions

93
scripts/init-database.js Normal file
View File

@@ -0,0 +1,93 @@
const mysql = require('mysql2/promise');
const fs = require('fs');
const path = require('path');
// 資料庫配置
const dbConfig = {
host: process.env.DB_HOST || 'mysql.theaken.com',
port: parseInt(process.env.DB_PORT || '33306'),
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || 'zh6161168',
database: process.env.DB_NAME || 'db_AI_scoring',
charset: 'utf8mb4',
timezone: '+08:00',
multipleStatements: true,
};
async function initializeDatabase() {
let connection;
try {
console.log('🔄 正在連接資料庫...');
// 先連接到 MySQL 伺服器(不指定資料庫)
const serverConnection = await mysql.createConnection({
host: dbConfig.host,
port: dbConfig.port,
user: dbConfig.user,
password: dbConfig.password,
charset: dbConfig.charset,
timezone: dbConfig.timezone,
});
console.log('✅ 成功連接到 MySQL 伺服器');
// 讀取 SQL 腳本
const schemaPath = path.join(__dirname, '..', 'database', 'schema.sql');
const schemaSQL = fs.readFileSync(schemaPath, 'utf8');
console.log('🔄 正在執行資料庫初始化腳本...');
// 分割 SQL 語句並逐個執行
const statements = schemaSQL
.split(';')
.map(stmt => stmt.trim())
.filter(stmt => stmt.length > 0 && !stmt.startsWith('--'));
for (const statement of statements) {
if (statement.trim()) {
try {
await serverConnection.execute(statement);
console.log(`✅ 執行: ${statement.substring(0, 50)}...`);
} catch (error) {
console.warn(`⚠️ 跳過語句: ${error.message}`);
}
}
}
console.log('✅ 資料庫初始化完成');
// 關閉連接
await serverConnection.end();
// 測試新建立的資料庫連接
console.log('🔄 正在測試資料庫連接...');
connection = await mysql.createConnection(dbConfig);
// 測試查詢
const [rows] = await connection.execute('SELECT COUNT(*) as count FROM criteria_templates');
console.log(`✅ 資料庫測試成功,找到 ${rows[0].count} 個評分標準模板`);
// 顯示建立的資料表
const [tables] = await connection.execute('SHOW TABLES');
console.log('📊 已建立的資料表:');
tables.forEach(table => {
console.log(` - ${Object.values(table)[0]}`);
});
await connection.end();
console.log('🎉 資料庫初始化完成!');
} catch (error) {
console.error('❌ 資料庫初始化失敗:', error.message);
console.error('詳細錯誤:', error);
process.exit(1);
}
}
// 如果直接執行此腳本
if (require.main === module) {
initializeDatabase();
}
module.exports = { initializeDatabase };