improve Schematized util

This commit is contained in:
srgooglo 2022-11-12 08:57:49 +00:00
parent 075112dc04
commit 8f903245a8

View File

@ -1,37 +1,48 @@
export default (schema = {}, fn) => { export default (schema = {}, fn) => {
return async (req, res, next) => { return async (req, res, next) => {
// not necessary since linebridge lib will do this for you if (typeof req.body === "undefined") {
// if (typeof req.body === "undefined") { req.body = {}
// req.body = {} }
// } if (typeof req.query === "undefined") {
// if (typeof req.query === "undefined") { req.query = {}
// req.query = {} }
// }
if (typeof req.selection !== "object") {
req.selection = {}
}
if (schema.required) { if (schema.required) {
if (Array.isArray(schema.required)) { if (!Array.isArray(schema.required)) {
console.warn("[INVALID SCHEMA] schema.required is defined but is not an array")
return
}
const missingKeys = [] const missingKeys = []
const requiredKeys = Array.isArray(schema.required) ? schema.required : [] const requiredKeys = Array.isArray(schema.required) ? schema.required : []
for await (let key of requiredKeys) { for (let key of requiredKeys) {
if (typeof req.body[key] === "undefined" && typeof req.query[key] === "undefined") { const value = req.body[key] || req.query[key]
req.selection[key] = req.body[key]
continue if (!value || typeof value === "undefined") {
missingKeys.push(key)
break
} }
req.selection[key] = value
} }
if (missingKeys.length > 0) { if (missingKeys.length > 0) {
return res.status(400).json({ error: `Missing ${missingKeys}` }) return res.status(400).json({
} error: `Missing required keys > ${missingKeys}`,
} else { missingKeys: missingKeys
console.warn("[INVALID SCHEMA] schema.required is defined but is not an array") })
} }
} }
if (schema.select) { if (schema.select) {
if (Array.isArray(schema.select)) { if (!Array.isArray(schema.select)) {
if (typeof req.selection !== "object") { console.warn("[INVALID SCHEMA] schema.select is defined but is not an array")
req.selection = {} return
} }
// assign objects along request body and query. // assign objects along request body and query.
@ -46,9 +57,6 @@ export default (schema = {}, fn) => {
continue continue
} }
} }
} else {
console.warn("[INVALID SCHEMA] schema.select is defined but is not an array")
}
} }
if (typeof fn === "function") { if (typeof fn === "function") {