新增評分項目設定、資料庫整合
This commit is contained in:
93
scripts/init-database.js
Normal file
93
scripts/init-database.js
Normal 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 };
|
Reference in New Issue
Block a user