hubxglpi/src/modules/tickets/useCases/syncTickets.usecase.js
Rafael Lopes b398b22286 RAW: Comentários regra temporaria
Adiciona comentários para impedir abertura de chamados de:

- cancelamento
- SAC
- troca de titularidade

Regra temporária válida até 19/01, conforme definição da gerência.
2026-01-08 16:41:35 -03:00

103 lines
3.4 KiB
JavaScript

//src/modules/tickes/useCases/syncTickets.usecase.js
const notifyTicketCreated = require('../services/ticketNotifications.service.js')
const repository = require('../repositories/ticket.repository.js')
const mundialeService = require('../services/mundiale.service.js')
const implantacaoService = require('../services/implantacao.service.js')
const cancelamentoService = require('../services/cancelamento.service.js')
//const sacService = require('../services/sac.service.js') //TODO
const trocaTitularidadeService = require('../services/trocaTitularidade.service.js') //TODO
const getAuthToken = require('../../../infra/api/hubsoft.auth.js')
const ticketShared = require('../services/createTickets.service.js')
const { logInfo, logError } = require('../../../shared/utils/logger.js')
async function syncTicketsUseCase() {
logInfo('[USECASE] Buscando novos tickets no Hubsoft')
const waterMark = await repository.getWaterMark()
logInfo(`Buscando Tickets novos desde de: ${waterMark}`)
const mundiale = await mundialeService.fetchNew(waterMark)
logInfo(`[USECASE] ${mundiale.length} tickets Mundiale encontrados`)
//const implantacao = await implantacaoService.fetchNew(waterMark)
//logInfo(`[USECASE] ${implantacao.length} tickets Implantação encontrados`)
//const cancelamento = await cancelamentoService.fetchNew(waterMark)
//logInfo(`[USECASE] ${cancelamento.length} tickets Cancelamento encontrados`)
//const sac = await sacService.fetchNew(waterMark) //TODO
//logInfo(`[USECASE] ${sac.length} tickets SAC encontrados`)
//const trocaTitularidade = await trocaTitularidadeService.fetchNew(waterMark) //TODO
//logInfo(`[USECASE] ${trocaTitularidade.length} tickets Troca de Titularidade encontrados`)
await mundialeService.saveHubGlpi(mundiale)
//await implantacaoService.saveHubGlpi(implantacao)
//await cancelamentoService.saveHubGlpi(cancelamento)
//await sacService.saveHubGlpi(sac) //TODO
//await trocaTitularidadeService.saveHubGlpi(trocaTitularidade)
const allFetchedTickets = [
...mundiale,
//...implantacao,
//...cancelamento,
//...sac,
//...trocaTitularidade
]
const newWaterMark = resolveNewWatermark(allFetchedTickets, waterMark)
if (newWaterMark !== waterMark) {
await repository.updateWaterMark(newWaterMark)
logInfo(`[USECASE] Watermark atualizada para: ${newWaterMark}`)
}
const pendentes = await ticketShared.fetchPendingTickets()
logInfo(`[USECASE] ${pendentes.length} tickets pendentes para envio ao GLPI`)
for (const ticket of pendentes) {
try {
const service = resolveTicketService(ticket.ticket_type)
if (!service) continue
const glpiId = await service.sendToGlpi(ticket)
await notifyTicketCreated.notifyTicketCreated(ticket.id_atendimento, glpiId)
} catch (err) {
logError(err, `[USECASE] Falha ao processar ticket ${ticket.id_atendimento}`)
}
}
}
function resolveTicketService(type) {
const map = {
MUNDIALE: mundialeService,
//IMPLANTACAO: implantacaoService,
//CANCELAMENTO: cancelamentoService,
//SAC: sacService, //TODO
//TITULARIDADE: trocaTitularidadeService
}
return map[type]
}
function resolveNewWatermark(tickets, currentWatermark) {
if (!tickets?.length) return currentWatermark
return tickets.reduce((max, ticket) => {
if (!ticket.created_at) return max
return ticket.created_at > max ? ticket.created_at : max
}, currentWatermark)
}
module.exports = { syncTicketsUseCase }