From 5d2151c9ba7ec9745cc5387f330edad7360adbb4 Mon Sep 17 00:00:00 2001 From: Thadeu Castelo Branco Ramos Date: Mon, 30 Sep 2024 17:56:59 +0000 Subject: [PATCH] Refactor main.js to include validateRequest middleware --- src/main.js | 2 ++ .../ai/validateRequest.middleware.js | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/middleware/ai/validateRequest.middleware.js diff --git a/src/main.js b/src/main.js index 7544c89..fa7e96c 100644 --- a/src/main.js +++ b/src/main.js @@ -6,6 +6,7 @@ import setupSwagger from './helper/swagger/swagger.config.js'; import gptMiddleware from './middleware/ai/gpt.middleware.js'; import asyncHandler from './middleware/error/asyncHandler.middlware.js'; import errorHandler from './middleware/error/errorHandler.middlware.js'; +import validateRequest from './middleware/ai/validateRequest.middleware.js'; const start = async () => { await startMongoose(); @@ -13,6 +14,7 @@ const start = async () => { const app = express(); app.use(express.json()); + app.use(asyncHandler(validateRequest)) app.use(asyncHandler(gptMiddleware)) app.use(errorHandler) diff --git a/src/middleware/ai/validateRequest.middleware.js b/src/middleware/ai/validateRequest.middleware.js new file mode 100644 index 0000000..53bf38f --- /dev/null +++ b/src/middleware/ai/validateRequest.middleware.js @@ -0,0 +1,21 @@ +import aiService from '../../service/ai/ai.service.js'; + +const context = 'You are an AI that acts as a middleware for API request validation. You will receive the body, header, query, method, and URL of a request. Your task is to analyze whether all fields in the request adhere to established patterns and are present. If any field is invalid or missing, return an error message in JSON format: { message, statusCode, status }. If it is a creation (POST) or update (PUT) request, you must also check if the schema for that operation exists and is valid using the get_schemas function. If the request is valid and all fields are correct, return a success message in JSON format: { message: "OK", statusCode: "200", status: "OK" }. Important, don’t send ```JSON in the response.'; + +const validateRequest = async (req, res, next) => { + console.log(`Request Method: ${req.method}, Request URL: ${req.url}`); + console.log(`Request Body: ${JSON.stringify(req.body)}`); + console.log(`Request Query: ${JSON.stringify(req.query)}`); + console.log(`Request Headers: ${JSON.stringify(req.headers)}`); + + const response = await aiService({ body: req.body, header: req.headers, query: req.query, method: req.method, url: req.url, firstContext: context }); + + const { message, statusCode, status } = JSON.parse(response.content); + console.log({ message, statusCode, status }); + if (statusCode != 200) { + return res.status(statusCode).json({ status, message }); + } + next() +} + +export default validateRequest \ No newline at end of file