2025-10-29 14:20:21 -03:00
|
|
|
const path = require('path');
|
|
|
|
|
const dotenv = require('dotenv');
|
|
|
|
|
const nodeEnv = process.env.NODE_ENV;
|
2025-11-19 16:01:37 -03:00
|
|
|
let envFile = '.env.development';
|
2025-10-29 14:20:21 -03:00
|
|
|
if (nodeEnv === 'production') {envFile = '.env.production';} else {envFile = '.env.development';}
|
|
|
|
|
dotenv.config({ path: path.resolve(__dirname, '..', envFile) });
|
|
|
|
|
|
2025-10-13 06:06:52 -03:00
|
|
|
const { processTicketsController } = require('./controllers/processTicketsController');
|
2025-10-23 17:30:03 -03:00
|
|
|
const { processCommentsController } = require('./controllers/processCommentsController');
|
|
|
|
|
const { processErrorController } = require('./controllers/processErrorController');
|
|
|
|
|
const { processStatusAndClosureController } = require('./controllers/processStatusController');
|
2025-10-29 14:20:21 -03:00
|
|
|
const { logInfo, logger } = require('./utils/logger');
|
|
|
|
|
|
|
|
|
|
logInfo(`🌎 Ambiente carregado: ${process.env.NODE_ENV || 'development'}`);
|
2025-09-05 20:28:15 -03:00
|
|
|
|
2025-09-11 20:57:43 -03:00
|
|
|
logInfo('Aplicação iniciada', {
|
2025-09-05 20:28:15 -03:00
|
|
|
timestamp: new Date().toISOString(),
|
|
|
|
|
environment: process.env.NODE_ENV || 'development'
|
|
|
|
|
});
|
|
|
|
|
|
2025-09-11 20:57:43 -03:00
|
|
|
async function main() {
|
|
|
|
|
try {
|
2025-10-29 14:20:21 -03:00
|
|
|
await processErrorController();
|
|
|
|
|
await processTicketsController();
|
|
|
|
|
await processCommentsController();
|
|
|
|
|
await processStatusAndClosureController();
|
2025-10-23 17:30:03 -03:00
|
|
|
logInfo('🎉 Ciclo de sincronização concluído com sucesso! 🎉');
|
2025-09-11 20:57:43 -03:00
|
|
|
} catch (error) {
|
|
|
|
|
logInfo('Erro na aplicação:', error);
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-08-30 19:04:35 -03:00
|
|
|
|
2025-11-19 16:01:37 -03:00
|
|
|
// A chamada main() foi removida daqui.
|
|
|
|
|
// Agora, o app.js apenas define e exporta a função main.
|
|
|
|
|
// A responsabilidade de EXECUTAR a função main é do cron.js,
|
|
|
|
|
// que a importará e a chamará dentro do agendamento.
|
|
|
|
|
module.exports = { main };
|
2025-10-29 14:20:21 -03:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @file app.js
|
|
|
|
|
* @description
|
|
|
|
|
* Ponto de entrada principal da aplicação de sincronização. Este arquivo é responsável por:
|
|
|
|
|
* 1. Carregar as variáveis de ambiente corretas (`.env.development` ou `.env.production`) com base na variável `NODE_ENV`.
|
|
|
|
|
* 2. Orquestrar a execução sequencial dos controladores que compõem o ciclo de sincronização.
|
|
|
|
|
*
|
|
|
|
|
* O fluxo de execução é o seguinte:
|
|
|
|
|
* 1. `processErrorController`: Verifica e reseta tickets que falharam em execuções anteriores, permitindo que sejam reprocessados.
|
|
|
|
|
* 2. `processTicketsController`: Busca novos tickets (incidentes e requisições) do ServiceNow, os salva no banco de dados intermediário e cria os tickets correspondentes no GLPI.
|
|
|
|
|
* 3. `processCommentsController`: Realiza a sincronização bidirecional de comentários (notas/follow-ups) para os tickets que já estão sincronizados.
|
|
|
|
|
* 4. `processStatusAndClosureController`: Executa a sincronização bidirecional de status (aberto, em atendimento, resolvido, fechado) e gerencia o fechamento de tickets em ambas as plataformas.
|
|
|
|
|
*/
|