snglpi/src/models/ticketSyncModel.js

152 lines
5.6 KiB
JavaScript
Raw Normal View History

// src/models/ticketSyncModel.js
2025-10-13 06:06:52 -03:00
const { query } = require('winston');
const pool = require('../data/database');
const { logError } = require('../utils/logger');
class TicketSyncModel {
2025-10-13 06:06:52 -03:00
// Cria um registro de sincronização para um ticket
static async createSyncRecord(data) {
try {
2025-10-13 06:06:52 -03:00
const query = `INSERT INTO ticket_sync (
sn_ticket_id,
glpi_ticket_id,
last_sn_sync,
last_glpi_sync,
created_at,
updated_at,
sn_sync_status,
glpi_sync_status
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING id`;
const values = [
data.sn_ticket_id,
data.glpi_ticket,
data.last_sn_sync,
data.last_glpi_sync,
data.created_at,
data.updated_at,
data.sn_sync_status,
data.glpi_sync_status
]
await pool.query(query, values);
2025-10-13 06:06:52 -03:00
} catch (error) {
logError(error, '❌ Erro ao criar registro de sincronização');
throw error;
}
}
// Buscar tickets que foram criados com sucesso para sincronizar comentários
static async getTicketsToSync(glpi_sync_status, sn_sync_status) {
try {
const query = 'SELECT id, glpi_ticket_id, sn_ticket_id FROM ticket_sync WHERE glpi_sync_status = $1 AND sn_sync_status = $2';
const values =[glpi_sync_status , sn_sync_status];
const { rows } = await pool.query(query, values);
return rows;
} catch (error) {
logError(error, '❌ Erro ao buscar tickets para sincronizar');
throw error;
}
}
// Atualiza o status de sincronização de um ticket
static async updateStatus(ticketSyncId, glpiStatus, snStatus) {
try {
const query = 'UPDATE ticket_sync SET glpi_sync_status = $1, sn_sync_status = $2 WHERE sn_ticket_id = $3';
await pool.query(query, [glpiStatus, snStatus, ticketSyncId]);
} catch (error) {
logError(`${error} ❌ Erro ao atualizar status de sincronização para o ID: ${ticketSyncId}`);
throw error;
}
}
2025-10-10 08:12:26 -03:00
static async updateStatusAndGlpiTicket(ticketSyncId, glpiStatus, snStatus, glpiTicketId) {
try {
const query = 'UPDATE ticket_sync SET glpi_sync_status = $1, sn_sync_status = $2, glpi_ticket_id = $4 WHERE sn_ticket_id = $3';
await pool.query(query, [glpiStatus, snStatus, ticketSyncId, glpiTicketId]);
} catch (error) {
logError(error, `❌ Erro ao atualizar status de sincronização para o ID: ${ticketSyncId}`);
throw error;
}
}
2025-10-10 08:12:26 -03:00
// Buscar o ID de sincronização baseado no glpi_ticket_id
static async getIdSyncByGlpiId(glpiTicketId) {
try {
const query = 'SELECT id FROM ticket_sync WHERE glpi_ticket_id = $1';
const { rows } = await pool.query(query, [glpiTicketId]);
return rows[0] ? rows[0].id : null;
} catch (error) {
logError(error, `❌ Erro ao buscar ID de sincronização por GLPI ID: ${glpiTicketId}`);
throw error;
}
}
2025-10-10 08:12:26 -03:00
// Buscar o ID de sincronização baseado no sn_ticket_id
static async getIdSyncBySnId(snTicketId) {
try {
const query = 'SELECT id FROM ticket_sync WHERE sn_ticket_id = $1';
const { rows } = await pool.query(query, [snTicketId]);
return rows[0] ? rows[0].id : null;
} catch (error) {
logError(error, `❌ Erro ao buscar ID de sincronização por GLPI ID: ${glpiTicketId}`);
throw error;
}
}
2025-10-13 06:06:52 -03:00
static async getByTicketNumber(ticketNumber) {
try {
console.log(ticketNumber)
const query = 'SELECT * FROM ticket_sync WHERE sn_ticket_id = $1';
const { rows } = await pool.query(query, [ticketNumber]);
return rows[0] || null;
2025-10-10 08:12:26 -03:00
2025-10-13 06:06:52 -03:00
} catch (error) {
logError(`${error}, ❌ Erro ao buscar ticket ${ticketNumber}}` )
2025-10-13 06:06:52 -03:00
}
}
2025-10-10 08:12:26 -03:00
// Buscar tickets que estão sincronizados
static async getTicketsSynced() {
try {
const query = `
SELECT
tsync.id,
tsync.glpi_ticket_id,
tsync.sn_ticket_id,
tsn.sys_id
FROM ticket_sync tsync
JOIN tickets_sn tsn ON tsync.sn_ticket_id = tsn.id
WHERE tsync.glpi_sync_status = 'synced' AND tsync.sn_sync_status = 'synced'`;
const { rows } = await pool.query(query);
return rows;
} catch (error) {
logError(error, '❌ Erro ao buscar tickets para sincronizar');
throw error;
}
}
2025-10-10 08:12:26 -03:00
}
/**
* @module TicketSyncModel
* @description Este módulo fornece métodos para interagir com a tabela de sincronização de tickets (ticket_sync) no banco de dados.
* Inclui funcionalidades para buscar tickets para sincronização, atualizar o status de sincronização
* e buscar o ID de sincronização baseado no glpi_ticket_id.
*
* A função getTicketsToSync busca todos os tickets que possuem IDs tanto no GLPI quanto no ServiceNow.
* A função updateStatus atualiza os status de sincronização do GLPI e do ServiceNow para um ticket específico.
* A função getIdSyncByGlpiId retorna o ID de sincronização baseado no glpi_ticket_id.
* Essas funcionalidades são essenciais para manter a consistência e o rastreamento dos tickets entre os dois sistemas.
*/
module.exports = TicketSyncModel;