// src/modules/createTickets/services/mundiale.service.js const repository = require('../repositories/ticket.repository.js'); const modelHubGlpi = require('../models/hubglpi/model.js'); const ticketEntityResolver = require('./resolveTicketEntity.service.js') const mundialeGlpiModel = require('../models/glpi/mundiale.model.js'); const { logInfo, logError, logWarning } = require('../../../shared/utils/logger.js'); // -------------------------------------- // Funções principais do serviço // -------------------------------------- async function fetchNew(watermark) { logInfo('[MUNDIALE] Coletando novos chamados') const rawTickets = await repository.getMundialeTickets(watermark) return rawTickets.map(t => modelHubGlpi.fromHubsoft(t, 'MUNDIALE')) } async function saveHubGlpi(tickets) { if (!tickets.length) return logInfo('[MUNDIALE] Inserindo chamados no HubGlpi') await repository.insertTicketsHubGlpi(tickets) logInfo('[MUNDIALE] Inserindo dado de sincronia dos chamados') await repository.insertSyncDataByIds(tickets.map(t => t.id_atendimentox) ) } async function sendToGlpi(ticket) { logInfo(`[MUNDIALE] Iniciando envio para GLPI - id_atendimento=${ticket.id_atendimento}`) try { logInfo('[MUNDIALE] Verificando id da entidade do ticket', { id_atendimento: ticket.id_atendimento }) const resolved = await ticketEntityResolver.resolveEntityId(ticket) logInfo('[MUNDIALE] Entidade resolvida', { id_atendimento: ticket.id_atendimento, resolved }) const payload = mundialeGlpiModel.toGlpiPayload(resolved) logInfo('[MUNDIALE] Payload preparado para GLPI') logInfo('[MUNDIALE] Inserindo ticket no GLPI', { id_atendimento: ticket.id_atendimento }) const glpiId = await repository.insertTicketGlpi(payload) logInfo('[MUNDIALE] Ticket inserido no GLPI', { id_atendimento: ticket.id_atendimento, glpiId }) await repository.insertGroupTicket(glpiId, 'MUNDIALE') logInfo('[MUNDIALE] Grupo associado ao ticket GLPI', { glpiId, group: 'MUNDIALE' }) await repository.updateSyncDataCreated(ticket.id_atendimento, glpiId) logInfo('[MUNDIALE] Dados de sincronização atualizados', { id_atendimento: ticket.id_atendimento, glpiId }) return glpiId } catch (error) { logError(error, `[MUNDIALE] Falha ao enviar ticket para GLPI - id_atendimento=${ticket.id_atendimento}`) throw error } } module.exports = { fetchNew, saveHubGlpi, sendToGlpi } /** * @module CreateTickets/MundialeService * @description Serviço responsável por interagir com o Hubsoft e GLPI criação de tickets que provêm da Mundiale. */