|
|
@@ -0,0 +1,36 @@
|
|
|
+import {
|
|
|
+ NextFunction,
|
|
|
+ Response,
|
|
|
+ Request
|
|
|
+} from "express";
|
|
|
+import {
|
|
|
+ plainToInstance
|
|
|
+} from "class-transformer";
|
|
|
+import {
|
|
|
+ validate
|
|
|
+} from "class-validator";
|
|
|
+
|
|
|
+export const validateQuery = (dtoClass: any) => {
|
|
|
+ return async (req: Request, res: Response, next: NextFunction): Promise<void> => {
|
|
|
+ const instance = plainToInstance(dtoClass, req.query) as object;
|
|
|
+
|
|
|
+ const errors = await validate(instance, {
|
|
|
+ whitelist: true,
|
|
|
+ forbidNonWhitelisted: false
|
|
|
+ });
|
|
|
+
|
|
|
+ if (errors.length > 0) {
|
|
|
+ const formattedErrors = errors.map((err) => Object.values(err.constraints || {
|
|
|
+ })).flat();
|
|
|
+ res.status(400).json({
|
|
|
+ message: "validation-error",
|
|
|
+ code: 400,
|
|
|
+ errors: formattedErrors
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ (req as any).validatedQuery = instance;
|
|
|
+ next();
|
|
|
+ };
|
|
|
+};
|