/** * 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, };