diff --git a/ExpressAPI/src/middlewares/ParamsValidatorMiddleware.ts b/ExpressAPI/src/middlewares/ParamsValidatorMiddleware.ts new file mode 100644 index 0000000000000000000000000000000000000000..7bf77bf88fc528ea10a1e8bfb9bdf715cf664237 --- /dev/null +++ b/ExpressAPI/src/middlewares/ParamsValidatorMiddleware.ts @@ -0,0 +1,40 @@ +import * as ExpressValidator from 'express-validator'; +import express from 'express'; +import { StatusCodes } from 'http-status-codes'; +import ApiRequest from '../models/ApiRequest'; + + +class ParamsValidatorMiddleware { + private static _instance: ParamsValidatorMiddleware; + + private constructor() { } + + public static get instance(): ParamsValidatorMiddleware { + if ( !ParamsValidatorMiddleware._instance ) { + ParamsValidatorMiddleware._instance = new ParamsValidatorMiddleware(); + } + + return ParamsValidatorMiddleware._instance; + } + + validate(validations: Array<ExpressValidator.ValidationChain> | ExpressValidator.Schema): (req: ApiRequest, res: express.Response, next: express.NextFunction) => void { + return async (req: ApiRequest, res: express.Response, next: express.NextFunction) => { + + if ( !(validations instanceof Array) ) { + validations = ExpressValidator.checkSchema(validations); + } + + await Promise.all(validations.map(validation => validation.run(req))); + + const errors = ExpressValidator.validationResult(req); + if ( !errors.isEmpty() ) { + return req.session.sendResponse(res, StatusCodes.BAD_REQUEST, { errors: errors.array() }); + } + + return next(); + }; + } +} + + +export default ParamsValidatorMiddleware.instance;