94 lines
2.7 KiB
JavaScript
94 lines
2.7 KiB
JavaScript
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 };
|