import mysql from 'mysql2/promise'; // 資料庫配置 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', acquireTimeout: 60000, timeout: 60000, reconnect: true, multipleStatements: true, }; // 建立連接池 const pool = mysql.createPool({ ...dbConfig, waitForConnections: true, connectionLimit: 10, queueLimit: 0, }); // 資料庫連接函數 export async function getConnection() { try { const connection = await pool.getConnection(); return connection; } catch (error) { console.error('資料庫連接失敗:', error); throw error; } } // 執行查詢函數 export async function query(sql: string, params?: any[]) { try { const [rows] = await pool.execute(sql, params); return rows; } catch (error) { console.error('查詢執行失敗:', error); throw error; } } // 執行事務函數 export async function transaction(callback: (connection: mysql.PoolConnection) => Promise) { const connection = await pool.getConnection(); try { await connection.beginTransaction(); const result = await callback(connection); await connection.commit(); return result; } catch (error) { await connection.rollback(); throw error; } finally { connection.release(); } } // 測試資料庫連接 export async function testConnection() { try { const connection = await getConnection(); await connection.ping(); connection.release(); console.log('✅ 資料庫連接成功'); return true; } catch (error) { console.error('❌ 資料庫連接失敗:', error); return false; } } export default pool;