91 lines
2.3 KiB
JavaScript
91 lines
2.3 KiB
JavaScript
|
|
// 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;
|