# Custom Decorators — नेस्टजेएस

Source: https://www.geekswithgeeks.com/hi/nestjs/nestjs-custom-decorators

> Reusable parameter या class-level logic के लिए अपने decorators बनाएँ।

## Parameter decorator

Custom decorator का उपयोग करके request से specific values को extract करें।

```typescript
import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const User = createParamDecorator(
  (data: unknown, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    return request.user;
  }
);

// usage
@Get('profile')
getProfile(@User() user) {
  return user;
}
```

## Method decorator

Methods को custom logic से mark करें—उदा. guards को skip करने के लिए `@Public()`, या role-based access के लिए `@Roles()`।

```typescript
export const Public = () => SetMetadata('isPublic', true);
export const Roles = (...roles: string[]) => SetMetadata('roles', roles);

@Public()
@Get('health')
health() {
  return { status: 'ok' };
}
```
