1
0

91 lines
2.3 KiB
JavaScript
Raw Normal View History

2025-06-23 14:27:18 +02:00
// db.js
const config = require('./config');
let db, mysqlPool, sqlite3;
const dbtype = config.dbtype;
if (dbtype === 'mysql') {
const mysql = require('mysql2/promise');
mysqlPool = mysql.createPool({
host: config.DB_HOST,
port: config.DB_PORT,
user: config.DB_USER,
password: config.DB_PASSWORD,
database: config.DB_DATABASE,
waitForConnections: true,
connectionLimit: 10,
});
db = {
async query(sql, params = []) {
return await mysqlPool.query(sql, params);
},
async close() {
await mysqlPool.end();
}
};
async function testConnection() {
try {
const conn = await mysqlPool.getConnection();
await conn.ping();
conn.release();
console.log('[DATABASE] Connexion MySQL OK');
} catch (err) {
console.error('[DATABASE] Échec connexion MySQL:', err.message);
process.exit(1);
}
}
db.testConnection = testConnection;
} else {
// SQLite
sqlite3 = require('sqlite3').verbose();
db = {
async query(sql, params = []) {
return new Promise((resolve, reject) => {
const lowered = sql.trim().toLowerCase();
let base = new sqlite3.Database(config.dbFile, lowered.startsWith('select') ? sqlite3.OPEN_READONLY : sqlite3.OPEN_READWRITE);
if (lowered.startsWith('select') && lowered.includes('count(')) {
base.get(sql, params, (err, row) => {
base.close();
if (err) return reject(err);
resolve([[row]]);
});
} else if (lowered.startsWith('select')) {
base.all(sql, params, (err, rows) => {
base.close();
if (err) return reject(err);
resolve([rows]);
});
} else {
base.run(sql, params, function(err) {
base.close();
if (err) return reject(err);
resolve([{ affectedRows: this.changes }]);
});
}
});
},
async close() {}
};
async function testConnection() {
try {
let base = new sqlite3.Database(config.dbFile);
base.get('SELECT 1', [], (err, row) => {
base.close();
if (err) {
console.error('[DATABASE] Échec connexion SQLite:', err.message);
process.exit(1);
} else {
console.log('[DATABASE] Connexion SQLite OK');
}
});
} catch (err) {
console.error('[DATABASE] Échec connexion SQLite:', err.message);
process.exit(1);
}
}
db.testConnection = testConnection;
}
module.exports = db;