2025-10-08 18:55:29 -03:00
|
|
|
// src/models/hubsoft_ticketsModel.js
|
|
|
|
|
const { log } = require('winston');
|
2025-10-07 17:57:23 -03:00
|
|
|
const dbConfig = require('../config/dbConfig.js');
|
|
|
|
|
const { logError, logInfo} = require('../utils/logger');
|
|
|
|
|
|
|
|
|
|
const { Pool } = require('pg');
|
|
|
|
|
const pool = new Pool({
|
|
|
|
|
host: dbConfig.hubglpi.databaseHost,
|
|
|
|
|
port: dbConfig.hubglpi.databasePort,
|
|
|
|
|
database: dbConfig.hubglpi.databaseName,
|
|
|
|
|
user: dbConfig.hubglpi.databaseUser,
|
|
|
|
|
password: dbConfig.hubglpi.databasePassword
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class HubglpiModel {
|
|
|
|
|
|
2025-10-08 18:55:29 -03:00
|
|
|
static async insertTicket(ticketData) {
|
|
|
|
|
const query = `
|
|
|
|
|
INSERT INTO hubsoft_tickets (
|
2025-10-07 17:57:23 -03:00
|
|
|
id_atendimento,
|
2025-10-08 18:55:29 -03:00
|
|
|
codigo_cliente,
|
|
|
|
|
status_atendimento,
|
|
|
|
|
codigo_servico,
|
2025-10-07 17:57:23 -03:00
|
|
|
servico_nome,
|
|
|
|
|
protocolo_hub,
|
|
|
|
|
ticket_mundiale,
|
|
|
|
|
cliente_nome,
|
|
|
|
|
created_at
|
2025-10-08 18:55:29 -03:00
|
|
|
)
|
|
|
|
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
|
|
|
|
|
ON CONFLICT (id_atendimento)
|
|
|
|
|
DO UPDATE SET
|
|
|
|
|
codigo_cliente = $2,
|
|
|
|
|
status_atendimento = $3,
|
|
|
|
|
codigo_servico = $4,
|
|
|
|
|
servico_nome = $5,
|
|
|
|
|
protocolo_hub = $6,
|
|
|
|
|
ticket_mundiale = $7,
|
|
|
|
|
cliente_nome = $8,
|
|
|
|
|
created_at = $9
|
|
|
|
|
RETURNING *;
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
const values = [
|
|
|
|
|
ticketData.id_atendimento,
|
|
|
|
|
ticketData.codigo_cliente,
|
|
|
|
|
ticketData.status_atendimento,
|
|
|
|
|
ticketData.codigo_servico,
|
|
|
|
|
ticketData.servico_nome,
|
|
|
|
|
ticketData.protocolo_hub,
|
|
|
|
|
ticketData.ticket_mundiale,
|
|
|
|
|
ticketData.cliente_nome,
|
|
|
|
|
ticketData.data_cadastro
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
console.log('Executando query de inserção/atualização na tabela hubsoft_tickets:', query, values);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const res = await pool.query(query, values);
|
|
|
|
|
logInfo('Ticket Inserido/Atualizado na tabela hubsoft_tickets com sucesso:', res.rows[0]);
|
|
|
|
|
return res.rows[0];
|
|
|
|
|
} catch (err) {
|
|
|
|
|
logError('Erro ao inserir/atualizar ticket na tabela hubsoft_tickets', err);
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-10-07 17:57:23 -03:00
|
|
|
|
|
|
|
|
|
2025-10-08 18:55:29 -03:00
|
|
|
static async insertSyncData(syncData) {
|
2025-10-07 17:57:23 -03:00
|
|
|
|
|
|
|
|
|
2025-10-08 18:55:29 -03:00
|
|
|
const query = `
|
|
|
|
|
INSERT INTO sync_data (
|
|
|
|
|
hubsoft_ticket_id
|
|
|
|
|
)
|
|
|
|
|
VALUES ($1)
|
|
|
|
|
ON CONFLICT (hubsoft_ticket_id)
|
|
|
|
|
DO UPDATE SET
|
|
|
|
|
hubsoft_ticket_id = $1
|
|
|
|
|
RETURNING *;
|
|
|
|
|
`;
|
2025-10-07 17:57:23 -03:00
|
|
|
const values = [
|
2025-10-08 18:55:29 -03:00
|
|
|
syncData
|
2025-10-07 17:57:23 -03:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const res = await pool.query(query, values);
|
2025-10-08 18:55:29 -03:00
|
|
|
logInfo('Dados inseridos/atualizados na tabela sync_data com sucesso:', res.rows[0]);
|
2025-10-07 17:57:23 -03:00
|
|
|
return res.rows[0];
|
|
|
|
|
} catch (err) {
|
2025-10-08 18:55:29 -03:00
|
|
|
logError('Erro ao inserir/atualizar dados na tabela sync_data', err);
|
2025-10-07 17:57:23 -03:00
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static async update_syncData(sync_update) {
|
|
|
|
|
const query = `
|
|
|
|
|
UPDATE sync_data
|
|
|
|
|
set glpi_ticket_id = $1,
|
2025-10-10 10:28:32 -03:00
|
|
|
created_at = $2
|
|
|
|
|
WHERE id = $3
|
2025-10-07 17:57:23 -03:00
|
|
|
RETURNING *;
|
|
|
|
|
`;
|
|
|
|
|
const values = [
|
2025-10-10 10:28:32 -03:00
|
|
|
sync_update[0],
|
|
|
|
|
sync_update[1].created_at,
|
|
|
|
|
sync_update[2]
|
|
|
|
|
]; //Todo colocar parametros dinamicos || null se não tiver
|
2025-10-07 17:57:23 -03:00
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const res = await pool.query(query, values);
|
|
|
|
|
logInfo('Dados atualizados na tabela sync_data com sucesso:', res.rows[0]);
|
|
|
|
|
return res.rows[0];
|
|
|
|
|
} catch (err) {
|
|
|
|
|
logError('Erro ao atualizar dados na tabela sync_data', err);
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static async get_idSyncByHubsoftId(hubsoft_ticket_id) {
|
|
|
|
|
const query = `
|
|
|
|
|
SELECT id FROM sync_data
|
|
|
|
|
WHERE hubsoft_ticket_id = $1;
|
|
|
|
|
`;
|
|
|
|
|
const values = [hubsoft_ticket_id];
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const res = await pool.query(query, values);
|
|
|
|
|
logInfo('ID de sync_data obtido com sucesso:', res.rows[0]);
|
|
|
|
|
return res.rows[0] ? res.rows[0].id : null;
|
|
|
|
|
} catch (err) {
|
|
|
|
|
logError('Erro ao obter ID de sync_data', err);
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static async get_idSyncByGlpiID(glpi_ticket_id) {
|
|
|
|
|
const query = `
|
|
|
|
|
SELECT id FROM sync_data
|
|
|
|
|
WHERE glpi_ticket_id = $1;
|
|
|
|
|
`;
|
|
|
|
|
const values = [glpi_ticket_id];
|
|
|
|
|
try {
|
|
|
|
|
const res = await pool.query(query, values);
|
|
|
|
|
logInfo('ID de sync_data obtido com sucesso:', res.rows[0]);
|
|
|
|
|
return res.rows[0] ? res.rows[0].id : null;
|
|
|
|
|
}
|
|
|
|
|
catch (err) {
|
|
|
|
|
logError('Erro ao obter ID de sync_data', err);
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-08 18:55:29 -03:00
|
|
|
static async getTicketDataPending() {
|
|
|
|
|
const query = ` SELECT ht.id_atendimento, ht.codigo_cliente, ht.status_atendimento, ht.codigo_servico, ht.servico_nome, ht.protocolo_hub, ht.ticket_mundiale, ht.cliente_nome, ht.created_at, sd.id AS sync_data_id, sd.glpi_ticket_id, sd.status_sync, sd.sync_metadata, sd.last_sync_attempt, sd.sync_error_message, sd.created_at AS sync_created_at, sd.updated_at AS sync_updated_at
|
|
|
|
|
FROM hubsoft_tickets AS ht
|
|
|
|
|
LEFT JOIN sync_data AS sd ON ht.id_atendimento = sd.hubsoft_ticket_id
|
|
|
|
|
WHERE sd.status_sync IS NULL OR sd.status_sync = 'pending_create'
|
|
|
|
|
ORDER BY ht.created_at ASC; `;
|
2025-10-07 17:57:23 -03:00
|
|
|
|
2025-10-08 18:55:29 -03:00
|
|
|
try {
|
|
|
|
|
const res = await pool.query(query);
|
|
|
|
|
logInfo('Tickets pendentes obtidos com sucesso:', res.rows);
|
|
|
|
|
return res.rows;
|
|
|
|
|
} catch (err) {
|
|
|
|
|
logError('Erro ao obter tickets pendentes', err);
|
|
|
|
|
throw err;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-10-07 17:57:23 -03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = HubglpiModel;
|