snglpi/src/models/ticketSyncModel.js
Rafael Lopes 07230dd1e4 FEAT: Entidades mapeadas a partir do CSV localizado na pasta tecnica
- Tabelas criadas para mapear entidades e sincronizar atualizações
- Atualização do banco de dados para melhor leitura e espaço para melhorias
- Atualização dos modelos para melhor sincronia com banco de dados
- Adicionada variaveis ao .ENV
- Criado sistema que efetua leitura do csv e aplica no banco de dados, revisando o conteudo do GLPI e do banco.
2025-09-17 20:56:32 -03:00

120 lines
4.3 KiB
JavaScript

// src/models/ticketSyncModel.js
const pool = require('../data/database');
const { logInfo, logError } = require('../utils/logger');
class TicketSyncModel {
// Cria um registro de sincronização
static async createSyncRecord(snTicketId, glpiTicketId = null) {
try {
const query = `
INSERT INTO ticket_sync (sn_ticket_id, glpi_ticket_id)
VALUES ($1, $2)
RETURNING *
`;
const result = await pool.query(query, [snTicketId, glpiTicketId]);
logInfo(`✅ Registro de sincronização criado para ticket SN: ${snTicketId}, GLPI: ${glpiTicketId || 'null'}`);
return result.rows[0];
} catch (error) {
logError(error, `❌ Erro ao criar registro de sincronização para ticket ${snTicketId}`);
throw error;
}
}
// Atualiza o status de sincronização com o GLPI
static async updateGlpiSyncStatus(syncId, status, glpiTicketId = null) {
try {
const query = `
UPDATE ticket_sync
SET glpi_sync_status = $1,
glpi_ticket_id = COALESCE($2, glpi_ticket_id),
last_glpi_sync = NOW()
WHERE id = $3
RETURNING *
`;
const result = await pool.query(query, [status, glpiTicketId, syncId]);
logInfo(`✅ Status GLPI atualizado para: ${status}, sync ID: ${syncId}`);
return result.rows[0];
} catch (error) {
logError(error, `❌ Erro ao atualizar status GLPI para sync ${syncId}`);
throw error;
}
}
// Atualiza o status de sincronização com o ServiceNow
static async updateSnSyncStatus(syncId, status) {
try {
const query = `
UPDATE ticket_sync
SET sn_sync_status = $1,
last_sn_sync = NOW()
WHERE id = $2
RETURNING *
`;
const result = await pool.query(query, [status, syncId]);
logInfo(`✅ Status SN atualizado para: ${status}, sync ID: ${syncId}`);
return result.rows[0];
} catch (error) {
logError(error, `❌ Erro ao atualizar status SN para sync ${syncId}`);
throw error;
}
}
// Busca registro de sincronização por ticket SN
static async findBySnTicketId(snTicketId) {
try {
const query = `SELECT * FROM ticket_sync WHERE sn_ticket_id = $1`;
const result = await pool.query(query, [snTicketId]);
return result.rows[0];
} catch (error) {
logError(error, `❌ Erro ao buscar sync por SN ticket ID: ${snTicketId}`);
return null;
}
}
// Busca registro de sincronização por ticket GLPI
static async findByGlpiTicketId(glpiTicketId) {
try {
const query = `SELECT * FROM ticket_sync WHERE glpi_ticket_id = $1`;
const result = await pool.query(query, [glpiTicketId]);
return result.rows[0];
} catch (error) {
logError(error, `❌ Erro ao buscar sync por GLPI ticket ID: ${glpiTicketId}`);
return null;
}
}
// Busca todos os registros de sincronização com status pendente para GLPI
static async findPendingGlpiSync() {
try {
const query = `
SELECT * FROM ticket_sync
WHERE glpi_sync_status = 'pending'
ORDER BY created_at
`;
const result = await pool.query(query);
return result.rows;
} catch (error) {
logError(error, '❌ Erro ao buscar sincronizações pendentes para GLPI');
return [];
}
}
// Busca todos os registros de sincronização com status pendente para ServiceNow
static async findPendingSnSync() {
try {
const query = `
SELECT * FROM ticket_sync
WHERE sn_sync_status = 'pending'
ORDER BY created_at
`;
const result = await pool.query(query);
return result.rows;
} catch (error) {
logError(error, '❌ Erro ao buscar sincronizações pendentes para ServiceNow');
return [];
}
}
}
module.exports = TicketSyncModel;