File: //matrixSwot/backend/modules/index.js
const express = require("express");
const router = express.Router();
//DEPENDENCIAS
const { validSchema } = require("./schemaValidate"); // Função para validação de dados do schema da API
router.put("/*", async (req, res) => {
await execPostPutPatch(req, res, "put");
});
router.patch("/*", async (req, res) => {
await execPostPutPatch(req, res, "patch");
});
router.post("/*", async (req, res) => {
await execPostPutPatch(req, res, "post");
});
router.get("/*", async (req, res) => {
await execPostPutPatch(req, res, "get");
});
router.delete("/*", async (req, res) => {
await execPostPutPatch(req, res, "delete");
});
async function execPostPutPatch(req, res, method) {
/* Executa a função chamada pelo client Ex: GET-> User/data/ *******/
let reqURL = req.originalUrl.split("/");
/* Validação do schema do Banco e dados recebidos na API *******/
try {
const {
schema
} = await require(`./${reqURL[1]}/${method}/${reqURL[2]}.schema.js`);
const data =
method === "get"
? req.query
: method === "delete"
? { id: reqURL[3] }
: req.body;
const schemaValidate = await validSchema(
method,
schema,
data,
req.tokenDecoded
);
if (schemaValidate !== true && schemaValidate && schemaValidate.code) {
res.status(schemaValidate.code);
res.send(schemaValidate.data);
return;
}
req.schema = schema;
if (method === "delete") {
req.body.id = reqURL[3];
}
} catch (err) {
console.log(`SCHEMA ./${reqURL[1]}/${method}/${reqURL[2]} :::ERROR:${err}`);
}
/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
try {
let reqMod = await require(`./${reqURL[1]}/${method}/${reqURL[2]}.js`);
let response = await reqMod.request(req);
return res.status(response.code).send(response.data);
} catch (err) {
console.log(`WS ./${reqURL[1]}/${method}/${reqURL[2]} :::ERROR:${err}`);
}
res.status(404);
res.send({
message: `Não foi possível encontrar a requisição ${method.toUpperCase()}->${
reqURL[1]
}/${reqURL[2]}/${reqURL[3] ? reqURL[3] : ``}`
});
}
module.exports = router;