// src/models/hubglpiModel.js 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 { static async insertTicket(ticketData) { const query = ` INSERT INTO hubsoft_tickets ( id_atendimento, codigo_cliente, status_atendimento, servico_nome, protocolo_hub, ticket_mundiale, cliente_nome, created_at ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING *; `; // Criando dicionario para traduzir status de atendimento const statusAtendimentoMap = { 1 : 'Pendente', 2 : 'Em atendimento', 3 : 'Resolvido', 31 : 'Pendente', 32 : 'Pendente', 33 : 'Novo'}; // Substituindo o status do atendimento pelo valor correspondente const status_atendimento = statusAtendimentoMap[ticketData.id_atendimento_status] || ticketData.id_atendimento_status; // Limpando todos os caracteres que não sao numeros e convertendo ticket_mundiale para int ticketData.descricao_abertura = ticketData.descricao_abertura.replace(/[^0-9]/g, ''); ticketData.ticket_mundiale = parseInt(ticketData.descricao_abertura) || null; ticketData.codigo_cliente = parseInt(ticketData.codigo_cliente) || null; const values = [ ticketData.id_atendimento, ticketData.codigo_cliente, status_atendimento, ticketData.descricao, ticketData.protocolo_hub, ticketData.ticket_mundiale, ticketData.cliente_nome, ticketData.data_cadastro ]; console.log('Valores para inserção do ticket:', values); try { const res = await pool.query(query, values); logInfo('Ticket Inserido na tabela hubsoft_tickets com sucesso:', res.rows[0]); return res.rows[0]; } catch (err) { logError('Erro ao inserir ticket na tabela hubsoft_tickets', err); throw err; } } static async insertSyncData(syncData) { const query = ` INSERT INTO sync_data ( hubsoft_ticket_id )VALUES ($1) RETURNING *; `; const values = [ syncData ]; try { const res = await pool.query(query, values); logInfo('Dados inseridos na tabela sync_data com sucesso:', res.rows[0]); return res.rows[0]; } catch (err) { logError('Erro ao inserir dados na tabela sync_data', err); throw err; } } static async update_syncData(sync_update) { const query = ` UPDATE sync_data set glpi_ticket_id = $1, status_sync = $2, sync_metadata = $3, last_sync_attempt = $4, sync_error_message = $5 created_at = $6 updated_at = $7 WHERE id = $8 RETURNING *; `; const values = [ sync_update.glpi_ticket_id, sync_update.status_sync, sync_update.sync_metadata, sync_update.last_sync_attempt, sync_update.sync_error_message, sync_update.created_at, sync_update.updated_at, sync_update.id ]; 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; } } } module.exports = HubglpiModel;