2026-01-02 18:19:11 -03:00
|
|
|
// 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')
|
2026-01-06 17:57:36 -03:00
|
|
|
await repository.insertSyncDataByIds(tickets.map(t => t.id_atendimento)
|
2026-01-02 18:19:11 -03:00
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
*/
|