diff --git a/.env.example b/.env.example index 40adcf7..2d4a924 100644 --- a/.env.example +++ b/.env.example @@ -32,6 +32,7 @@ HUBSOFT_MUNDIALE_USER_ID=248 HUBSOFT_IMPLANTACAO_RESPONSAVEL_USER_IDS=142 HUBSOFT_CANCELAMENTO_RESPONSAVEL_USER_IDS=142 HUBSOFT_TITULARIDADE_RESPONSAVEL_USER_IDS=142 +HUBSOFT_RESPONSAVEL_LOOKBACK_DAYS=365 # ============================================================================== # BANCO DE DADOS INTERMEDIƁRIO - HUBGLPI (PostgreSQL - Desenvolvimento) diff --git a/src/infra/db/repositories/hubsoft/tickets.repository.js b/src/infra/db/repositories/hubsoft/tickets.repository.js index 73f5a78..7bbef13 100644 --- a/src/infra/db/repositories/hubsoft/tickets.repository.js +++ b/src/infra/db/repositories/hubsoft/tickets.repository.js @@ -7,6 +7,7 @@ async function getTicketsByTipo({ tipoAtendimento, usuarioAbertura = null, usuariosResponsaveisIds = null, + lookbackDays = null, watermark = null }) { try { @@ -99,7 +100,12 @@ async function getTicketsByTipo({ params.push(responsibleUserIds); } - if (watermark) { + const lookbackDaysNumber = normalizePositiveInteger(lookbackDays); + + if (responsibleUserIds.length && lookbackDaysNumber) { + query += ` AND a.data_cadastro >= NOW() - ($${paramIndex++}::int * INTERVAL '1 day')`; + params.push(lookbackDaysNumber); + } else if (watermark) { query += ` AND a.data_cadastro > $${paramIndex++}`; params.push(watermark); } @@ -119,6 +125,11 @@ function normalizeUserIds(values) { .filter(Number.isInteger); } +function normalizePositiveInteger(value) { + const number = Number(value); + return Number.isInteger(number) && number > 0 ? number : null; +} + async function getTicketsClosedSince(thresholdDate) { try { diff --git a/src/modules/tickets/repositories/ticket.repository.js b/src/modules/tickets/repositories/ticket.repository.js index 04fa258..09c86b7 100644 --- a/src/modules/tickets/repositories/ticket.repository.js +++ b/src/modules/tickets/repositories/ticket.repository.js @@ -29,6 +29,10 @@ const TYPES = Object.freeze({ TITULARIDADE: 60 }); +const RESPONSAVEL_LOOKBACK_DAYS = parsePositiveIntegerEnv( + process.env.HUBSOFT_RESPONSAVEL_LOOKBACK_DAYS, + 365 +); async function getMundialeTickets(watermark) { return hubsoftTicketsRepo.getTicketsByTipo({ @@ -45,6 +49,7 @@ async function getImplantacaoTickets(watermark) { process.env.HUBSOFT_IMPLANTACAO_RESPONSAVEL_USER_IDS, [142] ), + lookbackDays: RESPONSAVEL_LOOKBACK_DAYS, watermark }); } @@ -56,6 +61,7 @@ async function getCancelamentoTickets(watermark) { process.env.HUBSOFT_CANCELAMENTO_RESPONSAVEL_USER_IDS, [142] ), + lookbackDays: RESPONSAVEL_LOOKBACK_DAYS, watermark }); } @@ -74,6 +80,7 @@ async function getTrocaTTickets(watermark) { process.env.HUBSOFT_TITULARIDADE_RESPONSAVEL_USER_IDS, [142] ), + lookbackDays: RESPONSAVEL_LOOKBACK_DAYS, watermark }); } @@ -153,6 +160,11 @@ function parseCsvNumberEnv(value, fallback = []) { return parsed.length ? parsed : fallback; } +function parsePositiveIntegerEnv(value, fallback) { + const parsed = Number(value); + return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback; +} + module.exports = { // watermark