Files
chatc2/src/database.js
T
AyronSantos 44a84301a3 fix: remove cache do configService; remove cacheService.js (nao usado)
- configService agora le direto do banco (sem TTL, sem stale data)
- invalidarConfig virou no-op (não há cache para invalidar)
- cacheService.js removido (so era usado pelo configService)
- endpoint /metrics sem referencia ao cacheService
2026-07-01 17:07:18 +00:00

143 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',
'GEN_MENSAGEM_CLIENTES_ID',
];
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,
};