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
JavaScript
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,
};