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.
103 lines
3.4 KiB
JavaScript
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 }
|