const path = require('path'); const dotenv = require('dotenv'); const nodeEnv = process.env.NODE_ENV; let envFile = '.env.devlopment'; if (nodeEnv === 'production') {envFile = '.env.production';} else {envFile = '.env.development';} dotenv.config({ path: path.resolve(__dirname, '..', envFile) }); const { processTicketsController } = require('./controllers/processTicketsController'); const { processCommentsController } = require('./controllers/processCommentsController'); const { processErrorController } = require('./controllers/processErrorController'); const { processStatusAndClosureController } = require('./controllers/processStatusController'); const { logInfo, logger } = require('./utils/logger'); logInfo(`šŸŒŽ Ambiente carregado: ${process.env.NODE_ENV || 'development'}`); logInfo('Aplicação iniciada', { timestamp: new Date().toISOString(), environment: process.env.NODE_ENV || 'development' }); async function main() { try { await processErrorController(); await processTicketsController(); await processCommentsController(); await processStatusAndClosureController(); logInfo('šŸŽ‰ Ciclo de sincronização concluĆ­do com sucesso! šŸŽ‰'); } catch (error) { logInfo('Erro na aplicação:', error); } } main(); /** * @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. */