142 lines
3.9 KiB
JavaScript
142 lines
3.9 KiB
JavaScript
/**
|
|
* CAMADA DE BANCO DE DADOS (dispatcher)
|
|
* ========================================
|
|
*
|
|
* API pública usada por todo o sistema. Delega para:
|
|
* - config/connections.js → aliases, configuração
|
|
* - drivers/firebird.js → operações Firebird puras
|
|
*
|
|
* Todos os controllers importam deste arquivo. A API permanece
|
|
* idêntica — apenas a implementação foi modularizada.
|
|
*/
|
|
|
|
const connections = require('./config/connections');
|
|
const firebird = require('./drivers/firebird');
|
|
|
|
// ============================================================
|
|
// 1) DISPATCHER — API pública
|
|
// ============================================================
|
|
|
|
function getConn(alias) {
|
|
const config = connections.getConfig(alias);
|
|
return { config, driver: firebird };
|
|
}
|
|
|
|
function query(alias, sql, params = []) {
|
|
let d;
|
|
try { d = getConn(alias); } catch (err) { return Promise.reject(err); }
|
|
return d.driver.query(d.config, sql, params)
|
|
.catch((err) => { throw new Error(`[${alias}] ${err.message}`); });
|
|
}
|
|
|
|
function execute(alias, sql, params = []) {
|
|
let d;
|
|
try { d = getConn(alias); } catch (err) { return Promise.reject(err); }
|
|
return d.driver.execute(d.config, sql, params)
|
|
.catch((err) => { throw new Error(`[${alias}] ${err.message}`); });
|
|
}
|
|
|
|
async function testConnection(alias) {
|
|
try {
|
|
const { config } = getConn(alias);
|
|
await firebird.testConnection(config);
|
|
return true;
|
|
} catch (err) {
|
|
console.error(`[${alias}] Falha na conexão:`, err.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async function testAllConnections() {
|
|
const results = {};
|
|
for (const alias of connections.listAliases()) {
|
|
results[alias] = await testConnection(alias);
|
|
}
|
|
return results;
|
|
}
|
|
|
|
function listTables(alias) {
|
|
const { config } = getConn(alias);
|
|
return firebird.listTables(config);
|
|
}
|
|
|
|
function tableInfo(alias, tableName) {
|
|
const { config } = getConn(alias);
|
|
return firebird.tableInfo(config, tableName);
|
|
}
|
|
|
|
function tableExists(alias, tableName) {
|
|
const { config } = getConn(alias);
|
|
return firebird.tableExists(config, tableName);
|
|
}
|
|
|
|
function columnExists(alias, tableName, columnName) {
|
|
const { config } = getConn(alias);
|
|
return firebird.columnExists(config, tableName, columnName);
|
|
}
|
|
|
|
function driverOf(alias) {
|
|
return connections.driverOf(alias);
|
|
}
|
|
|
|
async function closeAll() {
|
|
await firebird.close();
|
|
}
|
|
|
|
// ============================================================
|
|
// 2) GERADORES DE ID (GEN_ID) — thread-safe
|
|
// ============================================================
|
|
|
|
const GENERATORS = [
|
|
'GEN_CHATC2_CONVERSAS',
|
|
'GEN_CONVERSAS_MENSAGENS',
|
|
'GEN_MENSAGENS_ATENDIMENTOS',
|
|
'GEN_CHATC2_EQUIPES',
|
|
'GEN_CHATC2_ETIQUETAS',
|
|
'GEN_CHATC2_INSTANCIAS',
|
|
'GEN_CHATC2_MENUS_EMPRESA',
|
|
'GEN_CHATC2_CSAT_AVALIACOES',
|
|
'GEN_CHATC2_MOTIVOS_ATENDIMENTO',
|
|
'GEN_CHATC2_AGENDAMENTOS',
|
|
];
|
|
|
|
async function nextId(alias, generatorName) {
|
|
if (!GENERATORS.includes(generatorName)) {
|
|
throw new Error('Generator inválido: ' + generatorName);
|
|
}
|
|
const result = await query(alias,
|
|
'SELECT GEN_ID(' + generatorName + ', 1) AS NEW_ID FROM RDB$DATABASE');
|
|
return result[0].NEW_ID;
|
|
}
|
|
|
|
// ============================================================
|
|
// 3) EXPORTS — API completa (compatível com versão anterior)
|
|
// ============================================================
|
|
|
|
module.exports = {
|
|
// Operações de dados
|
|
query,
|
|
execute,
|
|
testConnection,
|
|
testAllConnections,
|
|
listTables,
|
|
tableInfo,
|
|
tableExists,
|
|
columnExists,
|
|
driverOf,
|
|
closeAll,
|
|
nextId,
|
|
GENERATORS,
|
|
poolStats: firebird.poolStats,
|
|
// Configuração / aliases (delegados)
|
|
databases: connections.databases,
|
|
customDatabases: connections.customDatabases,
|
|
DRIVERS: ['firebird'],
|
|
DEFAULT_DRIVER: 'firebird',
|
|
getConfig: connections.getConfig,
|
|
listAliases: connections.listAliases,
|
|
listAllDatabases: connections.listAllDatabases,
|
|
addDatabase: connections.addDatabase,
|
|
removeDatabase: connections.removeDatabase,
|
|
};
|