新增評分項目設定、資料庫整合
This commit is contained in:
78
lib/database.ts
Normal file
78
lib/database.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
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<any>) {
|
||||
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;
|
Reference in New Issue
Block a user