REFACTOR: Ajustes na tabela tickets_sntickets_sn

- Removido coluna ticket-sn da tabela
- Ajustado model para coletar id da localidade do Service Now
This commit is contained in:
Rafael Alves Lopes 2025-09-08 20:35:49 -03:00
parent b746ce5ea1
commit 3fb85ca9f1
3 changed files with 18 additions and 11 deletions

View File

@ -6,32 +6,37 @@ class TicketSnModel {
static async saveTicket(ticketData, typeTicket) { static async saveTicket(ticketData, typeTicket) {
const query = ` const query = `
INSERT INTO tickets_sn INSERT INTO tickets_sn
(ticket_number, short_description, description, caller_email, (ticket_number, short_description, description, caller_id, caller_email,
location_name, ramal, telefone, opened_at, tipo) location_id, location_name, ramal, telefone, opened_at, tipo)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)
ON CONFLICT (ticket_number) ON CONFLICT (ticket_number)
DO UPDATE SET DO UPDATE SET
short_description = EXCLUDED.short_description, short_description = EXCLUDED.short_description,
description = EXCLUDED.description, description = EXCLUDED.description,
location_id = EXCLUDED.location_id,
location_name = EXCLUDED.location_name, location_name = EXCLUDED.location_name,
caller_id = EXCLUDED.caller_id,
caller_email = EXCLUDED.caller_email, caller_email = EXCLUDED.caller_email,
ramal = EXCLUDED.ramal, ramal = EXCLUDED.ramal,
telefone = EXCLUDED.telefone, telefone = EXCLUDED.telefone,
updated_at = NOW() updated_at = NOW()
RETURNING id, xmax = 0 as inserted -- xmax = 0 indica INSERT, >0 indica UPDATE`; RETURNING id, xmax = 0 as inserted`;
const values = [ const values = [
ticketData.number?.value || null, ticketData.number?.value || null,
ticketData.short_description?.value || null, ticketData.short_description?.value || null,
ticketData.description?.value || null, ticketData.description?.value || null,
ticketData.opened_by?.display_value || null,
ticketData['opened_by.email']?.value || null, ticketData['opened_by.email']?.value || null,
ticketData.location?.display_value || null, ticketData.location?.value || null, // location_id (value)
ticketData.location?.display_value || null, // location_name (display_value)
ticketData['variables.numero_ramal']?.value || null, ticketData['variables.numero_ramal']?.value || null,
ticketData['variables.telephone_favorecido_rh']?.value || null, ticketData['variables.telephone_favorecido_rh']?.value || null,
ticketData.opened_at?.value ? new Date(ticketData.opened_at.value) : null, ticketData.opened_at?.value ? new Date(ticketData.opened_at.value) : null,
typeTicket typeTicket
]; ];
try { try {
const result = await pool.query(query, values); const result = await pool.query(query, values);
const wasInserted = result.rows[0].inserted; // true = INSERT, false = UPDATE const wasInserted = result.rows[0].inserted; // true = INSERT, false = UPDATE

View File

@ -1,11 +1,10 @@
CREATE TABLE tickets_sn ( CREATE TABLE tickets_sn (
id SERIAL PRIMARY KEY, -- ID automático (1, 2, 3...) id SERIAL PRIMARY KEY, -- ID automático (1, 2, 3...)
ticket_number VARCHAR(32) NOT NULL UNIQUE, -- Número do ticket (INC0140378) - ÚNICO ticket_number VARCHAR(32) NOT NULL UNIQUE, -- Número do ticket (INC0140378) - ÚNICO
sn_ticket_id VARCHAR(64), -- ID interno do ServiceNow
short_description TEXT, -- Resumo do problema short_description TEXT, -- Resumo do problema
tipo VARCHAR(10), -- Requisição ou incidente tipo VARCHAR(10), -- Requisição ou incidente
description TEXT, -- Descrição completa description TEXT, -- Descrição completa
caller_id VARCHAR(255), -- ID de quem abriu o ticket caller_id VARCHAR(255), -- Nome de quem abriu o ticket
caller_email VARCHAR(255), -- Email do solicitante caller_email VARCHAR(255), -- Email do solicitante
location_id VARCHAR(64), -- ID da localização location_id VARCHAR(64), -- ID da localização
location_name VARCHAR(255), -- Nome da localização location_name VARCHAR(255), -- Nome da localização
@ -16,3 +15,6 @@ CREATE TABLE tickets_sn (
updated_at TIMESTAMP DEFAULT NOW() -- Quando atualizamos pela última vez updated_at TIMESTAMP DEFAULT NOW() -- Quando atualizamos pela última vez
); );
SELECT * FROM tickets_sn;

View File

@ -13,7 +13,7 @@ const fetchTicketsFromServiceNow = async () => {
}); });
// comentado para evitar muitos arquivos // comentado para evitar muitos arquivos
//fs.writeFileSync('servicenow_tickets.json', JSON.stringify(ticketsResponse.data, null, 2)); fs.writeFileSync('servicenow_tickets.json', JSON.stringify(ticketsResponse.data, null, 2));
//logInfo('💾 Backup JSON de incidentes salvo', { count: ticketsResponse.data.result.length }); //logInfo('💾 Backup JSON de incidentes salvo', { count: ticketsResponse.data.result.length });
// Salvar os tickets no banco de dados // Salvar os tickets no banco de dados
@ -38,7 +38,7 @@ const fetchRequestsFromServiceNow = async () => {
}); });
// Comentado para evitar muitos arquivos // Comentado para evitar muitos arquivos
//fs.writeFileSync('servicenow_requests.json', JSON.stringify(requestsResponse.data, null, 2)); fs.writeFileSync('servicenow_requests.json', JSON.stringify(requestsResponse.data, null, 2));
//logInfo('💾 Backup JSON de requisições salvo', { count: requestsResponse.data.result.length }); //logInfo('💾 Backup JSON de requisições salvo', { count: requestsResponse.data.result.length });
// Salvar as requisições no banco de dados // Salvar as requisições no banco de dados