FEATURE: Adicionado /health para verificar saude da API e rotas

This commit is contained in:
Rafael Alves Lopes 2026-01-06 08:37:47 -03:00
parent 783eb2f081
commit 0b66f26f60
5 changed files with 89 additions and 23 deletions

View File

@ -1,23 +1,44 @@
// src/infra/http/app.js
const express = require('express');
const router = require('./routes')
const routes = require('./routes');
function createApp() {
const app = express();
const app = express();
app.use('/api', router); // O router agora tem seu próprio middleware de JSON.
app.use(express.json());
app.use(express.text({ type: '*/*' }));
return app;
app.use((req, res, next) => {
let data = '';
req.on('data', chunk => {
data += chunk;
});
req.on('end', () => {
if (data && !req.body) {
req.rawBody = data;
// tenta JSON
try {
req.body = JSON.parse(data);
} catch {
req.body = data;
}
}
next();
});
});
app.use('/api', routes);
return app;
}
module.exports = createApp;
/**
* @module app
* @description Este módulo é responsável por criar e configurar a instância do aplicativo Express.
*
* Funções:
* - `createApp()`: Uma factory function que inicializa o Express, aplica middlewares essenciais (como o `express.json` para parsear o corpo das requisições) e anexa as rotas da aplicação.
* Isso desacopla a criação do app da sua execução, facilitando testes.
*/

View File

@ -0,0 +1,20 @@
// src/infra/http/routes/health.routes.js
const { Router } = require('express');
const { getRoutes } = require('./routeRegistry');
module.exports = () => {
const router = Router();
router.get('/health', (req, res) => {
res.json({
status: 'ok',
env: process.env.NODE_ENV,
uptime: process.uptime(),
timestamp: new Date().toISOString(),
routes: getRoutes()
});
});
return router;
};

View File

@ -1,16 +1,23 @@
// src/infra/http/routes/index.js
const { Router } = require('express');
const express = require('express');
const closureController = require('../../../modules/close/controller/close.controller.js');
const commentController = require('../../../modules/comments/controller/glpiComment.controller.js');
const { registerRoute } = require('./routeRegistry');
const closeController = require('../../../modules/close/controller/close.controller');
const commentController = require('../../../modules/comments/controller/glpiComment.controller');
const healthRoutes = require('./health.routes');
const router = Router();
router.use(express.json({ type: '*/*' }));
router.post('/webhook/close-ticket', closureController.closeTicket);
// health
router.use(healthRoutes());
registerRoute('GET', '/api/health');
// webhooks
router.post('/webhook/close-ticket', closeController.closeTicket);
registerRoute('POST', '/api/webhook/close-ticket');
router.post('/webhook/new-comment', commentController.handleGlpiComment);
registerRoute('POST', '/api/webhook/new-comment');
module.exports = router;
module.exports = router;

View File

@ -0,0 +1,16 @@
// src/infra/http/routes/routeRegistry.js
const routes = [];
function registerRoute(method, path) {
routes.push({ method, path });
}
function getRoutes() {
return routes;
}
module.exports = {
registerRoute,
getRoutes
};

View File

@ -9,6 +9,8 @@ const { logInfo, logError } = require('../../../shared/utils/logger');
* @param {import('express').Response} res - O objeto de resposta do Express.
*/
const closeTicket = async (req, res) => {
try {
const result = await close(req.body)
res.status(200).json(result)