const { fetchCommentsFromServiceNow, fetchTicketLiveStatusFromServiceNow } = require('../services/servicenowService'); const { syncCommentsGlpitoSN, syncCommentsSNtoGlpi } = require('../services/glpiCommentService'); const TicketSyncModel = require('../models/ticketSyncModel'); const TicketSnModel = require('../models/ticketSnModel'); const TicketGlpiModel = require('../models/ticketGlpiModel'); const { logInfo } = require('../utils/logger'); const ensureReopenFromSNWhenGlpiSolved = async (ticket) => { if (ticket.glpi_sync_status !== 'solved') { return; } const ticketSn = await TicketSnModel.findById(ticket.sn_ticket_id); if (!ticketSn) { return; } const liveSnStatus = await fetchTicketLiveStatusFromServiceNow(ticketSn.sys_id, ticketSn.tipo); const snIsFinal = liveSnStatus === 'Resolvido' || liveSnStatus === 'Encerrado' || liveSnStatus === 'Encerrado - Omitido'; if (snIsFinal) { return; } const glpiStatus = await TicketGlpiModel.getTicketStatus(ticket.glpi_ticket_id); if (glpiStatus === 5) { await TicketGlpiModel.updateStatus(ticket.glpi_ticket_id, 'Em Atendimento'); await TicketSyncModel.updateStatus(ticket.sn_ticket_id, 'synced', 'synced'); logInfo(`Reabertura detectada no SN para ticket ${ticket.sn_ticket_id}. GLPI ${ticket.glpi_ticket_id} retornou para Em Atendimento.`); } }; const processCommentsController = async () => { const ticketsToMonitor = await TicketSyncModel.getTicketsToMonitor(); logInfo(`Tickets em monitoramento: ${ticketsToMonitor.length}`); for (const ticket of ticketsToMonitor) { await ensureReopenFromSNWhenGlpiSolved(ticket); const comments = await fetchCommentsFromServiceNow(ticket); if (comments.length !== 0) { await syncCommentsSNtoGlpi(comments, ticket); } await syncCommentsGlpitoSN(ticket); } }; module.exports = { processCommentsController };