UNPKG

giganet_conecta

Version:

Aplicação com o fim de facilitar conexões com APi's e Banco de Dados (MySql, Mongo e Elasticsearch).

84 lines (70 loc) 2.54 kB
const isIp = require("validator/lib/isIP"); const moment = require("moment"); /** * @typedef {Object} CenterLog * @property {string} project - O nome do projeto ou identificador * @property {string} action - A ação executada (ex: 'create', 'update', 'delete') * @property {'success' | 'fail' | 'warning' | 'info'} status - O status da execução da ação * @property {string} message - Mensagem descritiva sobre a ação * @property {number} [duration_ms] - (Opcional) Duração da execução em milissegundos * @property {{ id: string, name?: string }} [user] - (Opcional) Dados do usuário executando a ação * @property {Object<string, any>} [metadata] - (Opcional) Metadados adicionais para o log * @property {string} origin - O IP de origem da requisição (ex: '192.168.0.1') */ /** * @typedef {Object} CreateDocumentParams * @property {string} index - Nome do índice onde o documento será inserido * @property {CenterLog} body - O corpo do log a ser criado, com os campos necessários */ class DocumentsServiceServer32 { constructor(client) { this.client = client; } /** * @param {CenterLog} payload */ validateCenterLogPayload(payload) { const requiredFields = ["project", "action", "status", "message", "origin"]; const validStatuses = ["success", "fail", "warning", "info"]; for (const field of requiredFields) { if (!(field in payload)) { throw new Error(`Campo obrigatório ausente: ${field}`); } } if (!validStatuses.includes(payload.status)) { throw new Error(`Status inválido: ${payload.status}`); } if (!isIp(payload.origin)) { throw new Error("Campo 'origin' deve ser um IP válido"); } } autoFillDefaults(payload) { return { ...payload, timestamp: moment().format("YYYY-MM-DD HH:mm"), }; } /** * Cria um documento no índice informado * @param {CreateDocumentParams} params */ async createDocument({ index, body }) { try { if (!index) { throw new Error("É necessário informar o índice do documento"); } body = this.autoFillDefaults(body); this.validateCenterLogPayload(body); return await this.client.index({ index, refresh: true, body, }); } catch (error) { throw new Error(`Erro ao criar documento (${index}): ${error.message}`); } } } module.exports = { DocumentsServiceServer32, };