// Heavily based on: // https://github.com/TomDoesTech/REST-API-Tutorial-Updated/blob/7b5f040e1acd94d267df585516b33ee7e3b75f70/src/middleware/validateResource.ts import { Request, Response, NextFunction } from 'express'; import { ErrorDTO } from '../schemas/miscSchema'; import z from 'zod'; const validate = (schema: z.ZodObject) => (req: Request, res: Response, next: NextFunction) => { try { let validatedData = schema.parse({ body: req.body, query: req.query, params: req.params, }); res.locals.validated = validatedData; next(); } catch (e: any) { if (e instanceof z.ZodError) { let errorResponse: ErrorDTO = { status: 'error', error: e.issues[0]?.message ?? 'Unknown error', code: e.issues[0]?.code }; return res.status(400) .json(errorResponse); } else { console.log('Generic validation error triggered:', e); let errorResponse: ErrorDTO = { status: 'error', error: 'Unknown error', code: 'generic-error' }; return res.status(400) .json(errorResponse); } } }; export default validate;