ncc-prototype-email-alerts-sub
Version:
Northumberland Council Front End Email Alerts Subscription Prototype
39 lines (31 loc) • 1.44 kB
text/typescript
import { Request } from "express";
import { ValidationRule } from "../../types/controller";
import {FormError, fieldError} from "../../types/custom"
import logger from "../../libs/logger";
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const validate = (req: Request, validators: ValidationRule<any>[]): boolean => {
if (validators.length === 0) return true;
const bodyValues = Object.entries(req.body);
req.session.formErrors = [] as FormError[];
req.session.error = {} as fieldError
const errorObject = req.session?.error as fieldError;
const validationResult = validators.map((item) => {
const {fieldNames, validate, message} = item;
return fieldNames.map((fieldName) => {
return bodyValues.map((bodyValue) => {
if (fieldName === bodyValue[0]) {
const isValid = validate(bodyValue[1])
if(!isValid){
logger.debug(`${fieldName} ${bodyValue[1]} is not valid`)
req.session.formErrors?.push({errorMessage: message, field: fieldName} as FormError)
errorObject[fieldName] = { text : `${message}`}
}
return isValid
}
return true;
}).flat();
}).flat();
});
return !validationResult.flat().some((i) => i == false);
}
export default validate;