const TicketSyncModel = require('../models/ticketSyncModel'); const { logInfo, logError, logWarning } = require('../utils/logger'); const processErrorController = async () => { logInfo('Iniciando verificação de tickets com erro...'); try { const errorTickets = await TicketSyncModel.getTicketsInErrorState(); if (errorTickets.length === 0) { logInfo('Nenhum ticket com erro encontrado para reprocessamento.'); return; } logWarning(`Encontrados ${errorTickets.length} tickets com erro. Tentando reprocessar...`); for (const ticket of errorTickets) { let newSnStatus = ticket.sn_sync_status; let newGlpiStatus = ticket.glpi_sync_status; if (ticket.glpi_sync_status === 'error') { newGlpiStatus = 'pending_check'; } if (ticket.sn_sync_status === 'error_sync') newSnStatus = 'synced'; if (ticket.glpi_sync_status === 'error_sync') newGlpiStatus = 'synced'; if (ticket.sn_sync_status === 'error_closing') newSnStatus = 'pending_close'; if (ticket.glpi_sync_status === 'error_closing') newGlpiStatus = 'pending_close'; await TicketSyncModel.updateStatus(ticket.sn_ticket_id, newGlpiStatus, newSnStatus); logInfo(`Ticket SN ID ${ticket.sn_ticket_id} resetado para reprocessamento (SN: ${newSnStatus}, GLPI: ${newGlpiStatus}).`); } } catch (error) { logError(error, 'Erro ao processar tickets com falha.'); } }; module.exports = { processErrorController }; /** * @file processErrorController.js * @description Este controlador é responsável por gerenciar tickets que entraram em estado de erro durante o processo de sincronização. * Ele busca todos os tickets marcados com status de erro (ex: 'error', 'error_sync') e os reseta para um estado anterior válido * (ex: 'pending_check', 'synced'). Isso permite que os tickets sejam automaticamente reprocessados na próxima execução do ciclo de sincronização, * aumentando a resiliência do sistema. */