2025-10-09 09:39:07 -03:00
|
|
|
// src/models/glpiModel.js
|
2025-10-08 18:55:29 -03:00
|
|
|
const dbConfig = require('../config/dbConfig.js');
|
|
|
|
|
const { logError, logInfo} = require('../utils/logger');
|
2025-10-09 09:39:07 -03:00
|
|
|
const mysql = require('mysql2/promise');
|
2025-10-08 18:55:29 -03:00
|
|
|
|
2025-10-09 09:39:07 -03:00
|
|
|
const pool = mysql.createPool({
|
2025-10-08 18:55:29 -03:00
|
|
|
host: dbConfig.glpi.databaseHost,
|
|
|
|
|
port: dbConfig.glpi.databasePort,
|
|
|
|
|
database: dbConfig.glpi.databaseName,
|
|
|
|
|
user: dbConfig.glpi.databaseUser,
|
2025-10-09 09:39:07 -03:00
|
|
|
password: dbConfig.glpi.databasePassword,
|
|
|
|
|
waitForConnections: true,
|
|
|
|
|
connectionLimit: 10,
|
|
|
|
|
queueLimit: 0
|
2025-10-08 18:55:29 -03:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
2025-10-09 09:39:07 -03:00
|
|
|
class GlpiModel {
|
|
|
|
|
|
|
|
|
|
static async testConnection() {
|
|
|
|
|
try {
|
|
|
|
|
const connection = await pool.getConnection();
|
|
|
|
|
logInfo('Conexão com o banco de dados do GLPI estabelecida com sucesso!');
|
|
|
|
|
|
|
|
|
|
// Executa um select simples na tabela glpi_tickets
|
|
|
|
|
const [rows, fields] = await connection.execute('SELECT 1 FROM glpi_tickets LIMIT 1');
|
|
|
|
|
logInfo('Query SELECT 1 FROM glpi_tickets executada com sucesso!');
|
|
|
|
|
connection.release();
|
|
|
|
|
return true;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
logError('Erro ao testar a conexão com o banco de dados do GLPI:', error);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-10-08 18:55:29 -03:00
|
|
|
|
|
|
|
|
static async insertTicket(ticketData) {
|
|
|
|
|
|
|
|
|
|
const query = `
|
|
|
|
|
INSERT INTO glpi_tickets(
|
|
|
|
|
entities_id,
|
2025-10-09 09:39:07 -03:00
|
|
|
name,
|
|
|
|
|
date,
|
2025-10-08 18:55:29 -03:00
|
|
|
date_mod,
|
|
|
|
|
status,
|
|
|
|
|
user_id_recipient,
|
|
|
|
|
content,
|
|
|
|
|
urgency,
|
|
|
|
|
impact,
|
|
|
|
|
priority,
|
|
|
|
|
type,
|
|
|
|
|
itilcategories_id,
|
|
|
|
|
date_creation,
|
|
|
|
|
slas_id_ttr
|
|
|
|
|
)
|
2025-10-09 09:39:07 -03:00
|
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
2025-10-08 18:55:29 -03:00
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
const values = [
|
|
|
|
|
ticketData.entidades_id,
|
|
|
|
|
ticketData.cliente_nome,
|
|
|
|
|
ticketData.data_cadastro,
|
|
|
|
|
ticketData.date_mod,
|
|
|
|
|
ticketData.status_atendimento,
|
|
|
|
|
ticketData.user_id_recipient,
|
|
|
|
|
ticketData.descricao_abertura,
|
|
|
|
|
ticketData.urgency,
|
|
|
|
|
ticketData.impact,
|
|
|
|
|
ticketData.priority,
|
|
|
|
|
ticketData.type,
|
|
|
|
|
ticketData.itilcategories_id,
|
|
|
|
|
ticketData.date_creation,
|
2025-10-09 09:39:07 -03:00
|
|
|
ticketData.slas_id_ttr
|
2025-10-08 18:55:29 -03:00
|
|
|
];
|
|
|
|
|
|
2025-10-09 09:39:07 -03:00
|
|
|
try {
|
|
|
|
|
const [rows] = await pool.execute(query, values);
|
|
|
|
|
logInfo('Ticket inserido com sucesso:', rows);
|
|
|
|
|
return rows;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
logError('Erro ao inserir ticket:', error);
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
2025-10-08 18:55:29 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static async selectEntityId(entity_name) {
|
|
|
|
|
|
2025-10-09 09:39:07 -03:00
|
|
|
const query = `SELECT id FROM glpi_entities WHERE name = ?;`;
|
2025-10-08 18:55:29 -03:00
|
|
|
const values = [entity_name];
|
|
|
|
|
|
|
|
|
|
try {
|
2025-10-09 09:39:07 -03:00
|
|
|
const [rows] = await pool.execute(query, values);
|
|
|
|
|
logInfo('Entidade encontrada:', rows[0]);
|
|
|
|
|
return rows[0];
|
2025-10-08 18:55:29 -03:00
|
|
|
} catch (err) {
|
|
|
|
|
logError('Erro ao buscar entidade', err);
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-09 09:39:07 -03:00
|
|
|
module.exports = GlpiModel;
|