From 4d7fbfbaee50d0658696f1141539fab4ce8798b7 Mon Sep 17 00:00:00 2001 From: srgooglo Date: Wed, 22 Jun 2022 17:36:19 +0200 Subject: [PATCH] added utils --- src/utils/index.js | 3 ++ src/utils/schematized/index.js | 58 ++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/utils/index.js create mode 100644 src/utils/schematized/index.js diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..5aca29c --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,3 @@ +module.exports = { + schematized: require("./schematized"), +} \ No newline at end of file diff --git a/src/utils/schematized/index.js b/src/utils/schematized/index.js new file mode 100644 index 0000000..dd597cc --- /dev/null +++ b/src/utils/schematized/index.js @@ -0,0 +1,58 @@ +module.exports = (schema = {}, fn) => { + return async (req, res, next) => { + if (typeof req.body === "undefined") { + req.body = {} + } + + if (typeof req.query === "undefined") { + req.query = {} + } + + if (schema.required) { + if (Array.isArray(schema.required)) { + const missingKeys = [] + const requiredKeys = Array.isArray(schema.required) ? schema.required : [] + + for await (let key of requiredKeys) { + if (typeof req.body[key] === "undefined" && typeof req.query[key] === "undefined") { + req.selection[key] = req.body[key] + continue + } + } + + if (missingKeys.length > 0) { + return res.status(400).json({ error: `Missing ${missingKeys}` }) + } + } else { + console.warn("[INVALID SCHEMA] schema.required is defined but is not an array") + } + } + + if (schema.select) { + if (Array.isArray(schema.select)) { + if (typeof req.selection !== "object") { + req.selection = {} + } + + // assign objects along request body and query. + for await (let key of schema.select) { + if (req.body && typeof req.body[key] !== "undefined") { + req.selection[key] = req.body[key] + continue + } + + if (req.query && typeof req.query[key] !== "undefined") { + req.selection[key] = req.query[key] + continue + } + } + } else { + console.warn("[INVALID SCHEMA] schema.select is defined but is not an array") + } + } + + if (typeof fn === "function") { + return await fn(req, res, next) + } + } +} \ No newline at end of file