cd48e8c458
- fix: migrationRunner.after() que falha agora impede registro da migracao - fix: adicionar EQU_MENSAGEM e EQU_ETIQUETA_ID ao banco novo - fix: recriar generators faltantes e tabela CHATC2_MOTIVOS_ATENDIMENTO no banco novo
182 lines
4.9 KiB
JavaScript
182 lines
4.9 KiB
JavaScript
/**
|
|
* Configuração de conexões (aliases de banco).
|
|
*
|
|
* Gerencia aliases estáticos (definidos em código) e customizados
|
|
* (adicionados via API e persistidos em databases_custom.json).
|
|
*/
|
|
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
|
|
const CUSTOM_DB_PATH = path.resolve(__dirname, '..', 'databases_custom.json');
|
|
|
|
// Conexões dinâmicas salvas em JSON
|
|
let customDatabases = {};
|
|
try {
|
|
if (fs.existsSync(CUSTOM_DB_PATH)) {
|
|
customDatabases = JSON.parse(fs.readFileSync(CUSTOM_DB_PATH, 'utf8'));
|
|
}
|
|
} catch (e) {
|
|
console.error('[Databases] Erro ao carregar databases_custom.json:', e.message);
|
|
}
|
|
|
|
// Valores padrão para Firebird
|
|
const DRIVER_DEFAULTS = {
|
|
firebird: {
|
|
host: 'localhost',
|
|
port: 3050,
|
|
user: 'SYSDBA',
|
|
password: 'masterkey',
|
|
encoding: 'UTF-8',
|
|
lowercase_keys: false,
|
|
pageSize: 4096,
|
|
wireCrypt: 1,
|
|
},
|
|
};
|
|
|
|
/**
|
|
* Conexões estáticas.
|
|
*/
|
|
const databases = {
|
|
novo_local: {
|
|
driver: 'firebird',
|
|
host: process.env.DB_HOST || 'localhost',
|
|
port: parseInt(process.env.DB_PORT, 10) || 3050,
|
|
database: process.env.DB_DATABASE || path.resolve(__dirname, '../../db/NOVO.FDB'),
|
|
user: process.env.DB_USER || 'SYSDBA',
|
|
password: process.env.DB_PASSWORD || 'masterkey',
|
|
encoding: process.env.DB_ENCODING || 'UTF-8',
|
|
lowercase_keys: false,
|
|
pageSize: 4096,
|
|
wireCrypt: 1,
|
|
},
|
|
novo: {
|
|
driver: 'firebird',
|
|
host: '177.70.23.53',
|
|
port: 3050,
|
|
database: 'sigef_web_novo',
|
|
user: process.env.DB_USER || 'SYSDBA',
|
|
password: process.env.DB_PASSWORD || 'masterkey',
|
|
encoding: process.env.DB_ENCODING || 'UTF-8',
|
|
lowercase_keys: false,
|
|
pageSize: 4096,
|
|
wireCrypt: 1,
|
|
},
|
|
paz_suprema: {
|
|
driver: 'firebird',
|
|
host: '177.70.23.53',
|
|
port: 3050,
|
|
database: 'sigef_web_paz_suprema',
|
|
user: process.env.DB_USER || 'SYSDBA',
|
|
password: process.env.DB_PASSWORD || 'masterkey',
|
|
encoding: process.env.DB_ENCODING || 'UTF-8',
|
|
lowercase_keys: false,
|
|
pageSize: 4096,
|
|
wireCrypt: 1,
|
|
},
|
|
};
|
|
|
|
function salvarCustomDatabases() {
|
|
try {
|
|
fs.writeFileSync(CUSTOM_DB_PATH, JSON.stringify(customDatabases, null, 2), 'utf8');
|
|
return true;
|
|
} catch (e) {
|
|
console.error('[Databases] Erro ao salvar databases_custom.json:', e.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/** Normaliza uma config bruta aplicando defaults do driver. */
|
|
function normalize(raw) {
|
|
const d = DRIVER_DEFAULTS['firebird'];
|
|
return {
|
|
driver: 'firebird',
|
|
host: raw.host || d.host,
|
|
port: raw.port || d.port,
|
|
database: raw.database,
|
|
user: raw.user || d.user,
|
|
password: raw.password || d.password,
|
|
encoding: raw.encoding || d.encoding,
|
|
lowercase_keys: raw.lowercase_keys || d.lowercase_keys,
|
|
role: raw.role || null,
|
|
pageSize: raw.pageSize || d.pageSize,
|
|
wireCrypt: raw.wireCrypt !== undefined ? raw.wireCrypt : d.wireCrypt,
|
|
};
|
|
}
|
|
|
|
/** Configuração normalizada de um alias. */
|
|
function getConfig(alias) {
|
|
if (!alias) throw new Error('Alias do banco não informado.');
|
|
const aliasLower = alias.toLowerCase();
|
|
const raw = customDatabases[aliasLower] || databases[aliasLower];
|
|
if (!raw) {
|
|
throw new Error(`Alias "${alias}" não encontrado. Aliases disponíveis: ${listAliases().join(', ')}`);
|
|
}
|
|
return normalize(raw);
|
|
}
|
|
|
|
/** Lista de aliases disponíveis. */
|
|
function listAliases() {
|
|
return Object.keys(databases).concat(
|
|
Object.keys(customDatabases).filter((a) => !databases[a])
|
|
);
|
|
}
|
|
|
|
/** Todos os aliases com tipo (estático ou custom). */
|
|
function listAllDatabases() {
|
|
const result = {};
|
|
Object.keys(databases).forEach((alias) => {
|
|
result[alias] = Object.assign({}, databases[alias], { _tipo: 'estatico' });
|
|
});
|
|
Object.keys(customDatabases).forEach((alias) => {
|
|
result[alias] = Object.assign({}, customDatabases[alias], { _tipo: 'custom' });
|
|
});
|
|
return result;
|
|
}
|
|
|
|
/** Adiciona/atualiza conexão customizada. */
|
|
function addDatabase(alias, config) {
|
|
if (!alias || !config || !config.database) {
|
|
throw new Error('Alias e database são obrigatórios.');
|
|
}
|
|
const aliasLower = alias.toLowerCase().replace(/[^a-z0-9_]/g, '_');
|
|
|
|
const stored = { driver: 'firebird' };
|
|
['host', 'port', 'database', 'user', 'password',
|
|
'encoding', 'lowercase_keys', 'role', 'pageSize', 'wireCrypt']
|
|
.forEach((k) => {
|
|
if (config[k] !== undefined && config[k] !== null && config[k] !== '') {
|
|
stored[k] = config[k];
|
|
}
|
|
});
|
|
|
|
customDatabases[aliasLower] = stored;
|
|
return salvarCustomDatabases();
|
|
}
|
|
|
|
/** Remove uma conexão customizada. */
|
|
function removeDatabase(alias) {
|
|
if (!alias) return false;
|
|
const aliasLower = alias.toLowerCase();
|
|
if (!customDatabases[aliasLower]) return false;
|
|
delete customDatabases[aliasLower];
|
|
return salvarCustomDatabases();
|
|
}
|
|
|
|
/** Nome do driver de um alias (sempre 'firebird'). */
|
|
function driverOf(alias) {
|
|
return 'firebird';
|
|
}
|
|
|
|
module.exports = {
|
|
databases,
|
|
customDatabases,
|
|
getConfig,
|
|
listAliases,
|
|
listAllDatabases,
|
|
addDatabase,
|
|
removeDatabase,
|
|
driverOf,
|
|
DRIVER_DEFAULTS,
|
|
};
|