FEAT: Adiciona função para buscar todos os comentários de tickets no ServiceNow com suporte à paginação
This commit is contained in:
parent
33e78e70c3
commit
80401bd92d
12
src/services/servicenowCommentService.js
Normal file
12
src/services/servicenowCommentService.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
const axios = require('axios');
|
||||||
|
const apiConfig = require('../../config/apiConfig');
|
||||||
|
const TicketSnModel = require('../models/ticketSnModel');
|
||||||
|
const { logInfo, logError, logSync } = require('../utils/logger');
|
||||||
|
|
||||||
|
const syncCommentsInServiceNow = async () => {
|
||||||
|
try {
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,10 +1,8 @@
|
|||||||
// src/services/servicenowService.js
|
// src/services/servicenowService.js
|
||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
const apiConfig = require('../../config/apiConfig');
|
const apiConfig = require('../../config/apiConfig');
|
||||||
const fs = require('fs');
|
|
||||||
const TicketSnModel = require('../models/ticketSnModel');
|
const TicketSnModel = require('../models/ticketSnModel');
|
||||||
const { logInfo, logError, logSync } = require('../utils/logger');
|
const { logInfo, logError, logSync } = require('../utils/logger');
|
||||||
const TicketUpdateModel = require('../models/ticketUpdateModel');
|
|
||||||
|
|
||||||
const fetchTicketsFromServiceNow = async () => {
|
const fetchTicketsFromServiceNow = async () => {
|
||||||
try {
|
try {
|
||||||
@ -199,6 +197,67 @@ const syncCommentToServiceNow = async (ticketId, comment) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Função para buscar todos os comentários de tickets no ServiceNow a partir do ticket id no banco local
|
||||||
|
// Deve-se atentar para a paginação da API do ServiceNow
|
||||||
|
|
||||||
|
const getAllCommentsFromServiceNow = async (ticketId) => {
|
||||||
|
try {
|
||||||
|
const sys_id = await getTicketSysId(ticketId);
|
||||||
|
if (!sys_id) {
|
||||||
|
logError('sys_id não encontrado para ticket', { ticketId });
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const allComments = [];
|
||||||
|
const pageSize = 100;
|
||||||
|
let offset = 0;
|
||||||
|
let page = 0;
|
||||||
|
const internalMaxPages = 1000; // safeguard interno para evitar loop infinito
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
page++;
|
||||||
|
const params = {
|
||||||
|
sysparm_query: `element_id=${encodeURIComponent(sys_id)}^element=comments`,
|
||||||
|
sysparm_fields: 'sys_id,element,value,sys_created_on,sys_created_by,element_id',
|
||||||
|
sysparm_limit: pageSize,
|
||||||
|
sysparm_offset: offset
|
||||||
|
};
|
||||||
|
|
||||||
|
logInfo(`Buscando página ${page} de comentários do ticket SN Ticket: ${ticketId}`, { ticketId, page });
|
||||||
|
const response = await axios.get(apiConfig.snTableJournalConfig.baseUrl, {
|
||||||
|
auth: apiConfig.servicenowAuthentication.auth,
|
||||||
|
params
|
||||||
|
});
|
||||||
|
|
||||||
|
const comments = response?.data?.result || [];
|
||||||
|
|
||||||
|
if (!Array.isArray(comments) || comments.length === 0) {
|
||||||
|
break; // não há mais comentários
|
||||||
|
}
|
||||||
|
|
||||||
|
allComments.push(...comments);
|
||||||
|
|
||||||
|
if (comments.length < pageSize) {
|
||||||
|
break; // última página
|
||||||
|
}
|
||||||
|
|
||||||
|
// avançar para próxima página
|
||||||
|
offset += pageSize;
|
||||||
|
|
||||||
|
// proteção extra para evitar loop infinito em caso de comportamento inesperado da API
|
||||||
|
if (page >= internalMaxPages) {
|
||||||
|
logError(new Error('Max pages reached while paginating comments'), { ticketId, page });
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return allComments;
|
||||||
|
} catch (error) {
|
||||||
|
logError(error, '🚨Falha ao buscar comentários do ServiceNow');
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
fetchTicketsFromServiceNow,
|
fetchTicketsFromServiceNow,
|
||||||
fetchRequestsFromServiceNow,
|
fetchRequestsFromServiceNow,
|
||||||
@ -206,5 +265,6 @@ module.exports = {
|
|||||||
createCommentInServiceNow,
|
createCommentInServiceNow,
|
||||||
getCommentId,
|
getCommentId,
|
||||||
existingCommentInServiceNow,
|
existingCommentInServiceNow,
|
||||||
syncCommentToServiceNow
|
syncCommentToServiceNow,
|
||||||
|
getAllCommentsFromServiceNow
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user