// src/modules/tickets/services/implantacao.service.js const repository = require('../repositories/ticket.repository.js') const modelHubGlpi = require('../models/hubglpi/model.js') const ticketEntityResolver = require('./resolveTicketEntity.service.js') const implantacaoGlpiModel = require('../models/glpi/implantacao.model.js') const { logInfo, logError } = require('../../../shared/utils/logger.js') async function fetchNew(watermark) { logInfo('[IMPLANTACAO] Coletando novos chamados') const raw = await repository.getImplantacaoTickets(watermark) return raw.map(t => modelHubGlpi.fromHubsoft(t, 'IMPLANTACAO')) } async function saveHubGlpi(tickets) { if (!tickets.length) return logInfo('[IMPLANTACAO] Salvando tickets no HubGLPI') await repository.insertTicketsHubGlpi(tickets) await repository.insertSyncDataByIds(tickets.map(t => t.id_atendimento)) } async function sendToGlpi(ticket) { logInfo(`[IMPLANTACAO] Enviando ticket ${ticket.id_atendimento} para GLPI`) try { const resolved = await ticketEntityResolver.resolveEntityId(ticket) const payload = implantacaoGlpiModel.toGlpiPayload(resolved) const glpiId = await repository.insertTicketGlpi(payload) await repository.insertGroupTicket(glpiId, 'IMPLANTACAO') await repository.updateSyncDataCreated(ticket.id_atendimento, glpiId) return glpiId } catch (err) { logError(err, `[IMPLANTACAO] Erro ao enviar ticket ${ticket.id_atendimento}`) throw err } } module.exports = { fetchNew, saveHubGlpi, sendToGlpi }