hubxglpi/src/modules/tickets/services/implantacao.service.js

44 lines
1.5 KiB
JavaScript

// 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
}