2025-12-04 18:05:45 -03:00
|
|
|
// src/shared/repositories/glpi.repository.js
|
2025-12-10 07:10:37 -03:00
|
|
|
const { glpi } = require("../../shared/infra/database");
|
2025-12-04 18:05:45 -03:00
|
|
|
const { logInfo, logError } = require('../../utils/logger.js');
|
|
|
|
|
|
2025-12-10 07:10:37 -03:00
|
|
|
async function insertTicket(ticket) {
|
2025-12-04 18:05:45 -03:00
|
|
|
const sql = `
|
|
|
|
|
INSERT INTO glpi_tickets
|
2025-12-10 07:10:37 -03:00
|
|
|
(entities_id, name, date, date_mod, status, users_id_recipient, content, urgency, impact, priority, type, itilcategories_id, date_creation, slas_id_ttr)
|
|
|
|
|
VALUES (?, ?, ?, NOW(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
2025-12-04 18:05:45 -03:00
|
|
|
`;
|
|
|
|
|
|
2025-12-10 07:10:37 -03:00
|
|
|
const values = [
|
|
|
|
|
ticket.entities_id,
|
|
|
|
|
ticket.name,
|
|
|
|
|
ticket.date,
|
|
|
|
|
ticket.status,
|
|
|
|
|
ticket.users_id_recipient,
|
|
|
|
|
ticket.content,
|
|
|
|
|
ticket.urgency,
|
|
|
|
|
ticket.impact,
|
|
|
|
|
ticket.priority,
|
|
|
|
|
ticket.type,
|
|
|
|
|
ticket.itilcategories_id,
|
|
|
|
|
ticket.date_creation,
|
|
|
|
|
ticket.slas_id_ttr
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const [result] = await glpi.execute(sql, values);
|
|
|
|
|
return result.insertId;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function getEntitiesByService(codigoCliente, codigoServico) {
|
|
|
|
|
try {
|
|
|
|
|
const sql = `SELECT id FROM glpi_entities WHERE name LIKE ? or name LIKE ? or name LIKE ? LIMIT 1;`;
|
|
|
|
|
const values = [`${codigoCliente}-${codigoServico}-%`, `${codigoCliente} -${codigoServico}-%`, `${codigoCliente} - ${codigoServico} -%`];
|
|
|
|
|
const [rows] = await glpi.execute(sql, values);
|
|
|
|
|
if (rows.length > 0) {
|
|
|
|
|
return rows[0].id;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
logError(`Erro ao buscar entidade por código de serviço: ${error}`);
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function getEntitiesByClient(codigoCliente) {
|
|
|
|
|
try {
|
|
|
|
|
const sql = `SELECT id FROM glpi_entities WHERE name LIKE ? or name LIKE ? LIMIT 1;`;
|
|
|
|
|
const values = [`${codigoCliente}-%`, `${codigoCliente} -%`];
|
|
|
|
|
const [rows] = await glpi.execute(sql, values);
|
|
|
|
|
if (rows.length > 0) {
|
|
|
|
|
return rows[0].id;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
logError(`Erro ao buscar entidade por código de cliente: ${error}`);
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-12-04 18:05:45 -03:00
|
|
|
|
2025-12-10 07:10:37 -03:00
|
|
|
async function insertEntity(entity_name){
|
|
|
|
|
|
2025-12-04 18:05:45 -03:00
|
|
|
}
|
|
|
|
|
|
2025-12-10 13:43:08 -03:00
|
|
|
async function insertGroupTicket(ticketId, type) {
|
2025-12-10 07:10:37 -03:00
|
|
|
try {
|
2025-12-10 13:43:08 -03:00
|
|
|
|
2025-12-11 11:48:24 -03:00
|
|
|
let groupId = 25; // Grupo padrão (Operação NOC)
|
2025-12-10 13:43:08 -03:00
|
|
|
|
2025-12-11 11:48:24 -03:00
|
|
|
if (type === 'IMPLANTACAO') {
|
|
|
|
|
groupId = 36; // Grupo de Implantação
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const sql = `INSERT INTO glpi_groups_tickets (tickets_id, groups_id, type)
|
2025-12-10 13:43:08 -03:00
|
|
|
VALUES (?, ?, 2)
|
2025-12-10 07:10:37 -03:00
|
|
|
`;
|
2025-12-10 13:43:08 -03:00
|
|
|
const values = [ticketId, groupId];
|
2025-12-10 07:10:37 -03:00
|
|
|
await glpi.execute(sql, values);
|
|
|
|
|
logInfo(`Grupo associado ao ticket GLPI ID: ${ticketId}`);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
logError(`Erro ao associar grupo ao ticket GLPI ID ${ticketId}: ${error}`);
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
2025-12-04 18:05:45 -03:00
|
|
|
|
|
|
|
|
module.exports = {
|
2025-12-10 07:10:37 -03:00
|
|
|
insertTicket,
|
|
|
|
|
getEntitiesByService,
|
|
|
|
|
getEntitiesByClient,
|
|
|
|
|
insertGroupTicket
|
2025-12-04 18:05:45 -03:00
|
|
|
};
|