/** * Custom Validation Pipe * * Enhanced validation pipe with custom error messages. */ import { PipeTransform, Injectable, BadRequestException } from '@nestjs/common'; import { validate, ValidationError } from 'class-validator'; import { plainToInstance } from 'class-transformer'; @Injectable() export class CustomValidationPipe implements PipeTransform { async transform(value: any, { metatype }: any) { if (!metatype || !this.toValidate(metatype)) { return value; } const object = plainToInstance(metatype, value); const errors = await validate(object); if (errors.length > 0) { throw new BadRequestException({ message: 'Validation failed', errors: this.formatErrors(errors), }); } return value; } // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type private toValidate(metatype: Function): boolean { // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type const types: Function[] = [String, Boolean, Number, Array, Object]; return !types.includes(metatype); } private formatErrors(errors: ValidationError[]) { return errors.map((error) => ({ field: error.property, constraints: error.constraints, })); } }