From 8f903245a81533a956ad368b44c1389695cfb3cb Mon Sep 17 00:00:00 2001 From: srgooglo Date: Sat, 12 Nov 2022 08:57:49 +0000 Subject: [PATCH] improve `Schematized` util --- packages/server/src/lib/schematized/index.js | 88 +++++++++++--------- 1 file changed, 48 insertions(+), 40 deletions(-) diff --git a/packages/server/src/lib/schematized/index.js b/packages/server/src/lib/schematized/index.js index b66248b3..87ec0030 100755 --- a/packages/server/src/lib/schematized/index.js +++ b/packages/server/src/lib/schematized/index.js @@ -1,53 +1,61 @@ export default (schema = {}, fn) => { return async (req, res, next) => { - // not necessary since linebridge lib will do this for you - // if (typeof req.body === "undefined") { - // req.body = {} - // } - // if (typeof req.query === "undefined") { - // req.query = {} - // } + if (typeof req.body === "undefined") { + req.body = {} + } + if (typeof req.query === "undefined") { + req.query = {} + } + + if (typeof req.selection !== "object") { + req.selection = {} + } 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 { + if (!Array.isArray(schema.required)) { console.warn("[INVALID SCHEMA] schema.required is defined but is not an array") + return + } + + const missingKeys = [] + const requiredKeys = Array.isArray(schema.required) ? schema.required : [] + + for (let key of requiredKeys) { + const value = req.body[key] || req.query[key] + + if (!value || typeof value === "undefined") { + missingKeys.push(key) + break + } + + req.selection[key] = value + } + + if (missingKeys.length > 0) { + return res.status(400).json({ + error: `Missing required keys > ${missingKeys}`, + missingKeys: missingKeys + }) } } 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 { + if (!Array.isArray(schema.select)) { console.warn("[INVALID SCHEMA] schema.select is defined but is not an array") + return + } + + // 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 + } } }