alterações de melhorias

This commit is contained in:
2026-06-24 14:13:09 +00:00
parent d942694ec0
commit 29190cd71c
34 changed files with 2570 additions and 950 deletions
+73
View File
@@ -0,0 +1,73 @@
/**
* Serviço de configuração da empresa com cache.
*
* As flags CFE_* (triagem, saudação, CSAT, etc.) são lidas em toda operação
* de chat/triagem/webhook. Este serviço armazena em cache (TTL 2min) e
* invalida automaticamente quando as configurações são alteradas.
*/
const db = require('../database');
const cache = require('./cacheService');
const TTL = 2 * 60 * 1000; // 2 minutos
/**
* Retorna a configuração completa de uma empresa (cacheada).
* Invalidação: chamar invalidarConfig(alias, empresaId) após salvar settings.
*
* @param {string} alias
* @param {number} empresaId
* @returns {Promise<object>} Linha da tabela CHATC2_CONFIGURACOES_EMPRESA
*/
async function getConfig(alias, empresaId) {
const key = 'cfg:' + alias + ':' + empresaId;
const cached = cache.get(key);
if (cached) return cached;
// Garante que o registro existe (insere se não existir)
await garantirRegistro(alias, empresaId);
const result = await db.query(alias,
'SELECT * FROM CHATC2_CONFIGURACOES_EMPRESA WHERE CFE_EMPRESA_ID = ?',
[empresaId]);
const config = result[0] || {};
cache.set(key, config, TTL);
return config;
}
/**
* Invalida o cache de configuração de uma empresa.
* Deve ser chamado após salvar alterações nas configurações.
*
* @param {string} alias
* @param {number} empresaId
*/
function invalidarConfig(alias, empresaId) {
cache.del('cfg:' + alias + ':' + empresaId);
}
/**
* Garante que existe um registro de configuração para a empresa.
* Idempotente — se já existe, não faz nada.
*/
async function garantirRegistro(alias, empresaId) {
try {
const existe = await db.query(alias,
'SELECT COUNT(*) AS CT FROM CHATC2_CONFIGURACOES_EMPRESA WHERE CFE_EMPRESA_ID = ?',
[empresaId]);
if (existe[0]?.CT === 0) {
await db.execute(alias, `
INSERT INTO CHATC2_CONFIGURACOES_EMPRESA (CFE_EMPRESA_ID)
VALUES (?)
`, [empresaId]);
}
} catch (e) {
// Tabela pode não existir ainda — ignora
if (!e.message.includes('unknown') && !e.message.includes('não encontrado')) {
console.error('[ConfigService] Erro ao garantir registro:', e.message.substring(0, 100));
}
}
}
module.exports = { getConfig, invalidarConfig };