FactuGES_ERP/apps/server/src/common/presentation/express/validate-request-dto.ts

30 lines
983 B
TypeScript
Raw Normal View History

2025-02-01 21:48:13 +00:00
import { NextFunction, Request, Response } from "express";
import httpStatus from "http-status";
import { ZodSchema } from "zod";
import { ApiError } from "./api-error";
2025-02-07 11:14:18 +00:00
export const validateRequestDTO =
2025-02-01 21:48:13 +00:00
(schema: ZodSchema) => (req: Request, res: Response, next: NextFunction) => {
const result = schema.safeParse(req.body);
if (!result.success) {
// Construye errores detallados
const validationErrors = result.error.errors.map((err) => ({
field: err.path.join("."),
message: err.message,
}));
throw new ApiError({
status: httpStatus.BAD_REQUEST, //400
title: "Validation Error",
detail: "Algunos campos no cumplen con los criterios de validación.",
type: "https://example.com/probs/validation-error",
instance: req.originalUrl,
errors: validationErrors,
});
}
// Si pasa la validación, opcionalmente reescribe req.body
req.body = result.data;
next();
};