# Pipes & Validation — NestJS

Source: https://www.geekswithgeeks.com/en/nestjs/nestjs-pipes-validation

> Transform and validate data before handlers receive it.

## Built-in pipes & class-validator

Use `ValidationPipe` with `class-validator` decorators to automatically validate DTOs.

```typescript
// dto
import { IsString, IsEmail, IsNumber } from 'class-validator';

export class CreateUserDto {
  @IsString()
  name: string;

  @IsEmail()
  email: string;

  @IsNumber()
  age: number;
}

// main.ts
app.useGlobalPipes(new ValidationPipe());
```

## Custom pipes

Implement `PipeTransform` to create a custom pipe for unique validation or transformation logic.

```typescript
@Injectable()
export class ParseIntPipe implements PipeTransform<string, number> {
  transform(value: string): number {
    const num = parseInt(value, 10);
    if (isNaN(num)) throw new BadRequestException();
    return num;
  }
}

@Get(':id')
findOne(@Param('id', ParseIntPipe) id: number) { ... }
```
