Skip to main content

Decoradores

Ubicados en src/app/core/decorators/.

@Auth()​

Aplica AuthGuard al endpoint. Equivalente a @UseGuards(AuthGuard) pero más legible.

@Auth()
@Get('profile')
getProfile() { ... }

@ApiKeyAuth()​

Aplica ApiKeyGuard. Para endpoints consumidos por clientes externos.

@ApiKeyAuth()
@Post('webhook')
receiveWebhook() { ... }

@CurrentUser()​

Extrae el usuario autenticado de request.user. Usado dentro de controladores protegidos por @Auth().

@Auth()
@Get('me')
getMe(@CurrentUser() user: UserInterface) {
return user;
}

@Lang()​

Extrae la preferencia de idioma del request (header Accept-Language o query param). Usado para internacionalización de mensajes de respuesta.

@Get('labels')
getLabels(@Lang() lang: string) { ... }

@CatchWebSocket()​

Decorador de manejo de errores para eventos WebSocket. Captura excepciones en los handlers del gateway y las convierte al formato de error estándar del WS.

// En ChatGateway
@CatchWebSocket()
@SubscribeMessage('send_message')
handleSendMessage(@MessageBody() dto: SendMessageDto) { ... }

@RawResponse()​

src/app/core/decorators/raw-response.decorator.ts. Marca un handler o controlador con la metadata rawResponse; el ResponseInterceptor entonces no aplica el formato { statusCode, status, message, data }. Útil para webhooks de terceros (que esperan un cuerpo exacto) y redirects.

@Get(':channelType')
@RawResponse()
@Header('Content-Type', 'text/plain')
verify(...) { ... }

@RequirePermission(acronym)​

src/app/core/decorators/require-permission.decorator.ts. Declara el permiso que debe tener el rol del usuario para ejecutar un handler (o todo un controlador). Solo escribe metadata con SetMetadata(PERMISSION_KEY, acronym), donde PERMISSION_KEY vale 'permission'; la comprobación real la hace PermissionsGuard.

Recibe un único acrónimo (un string), por ejemplo USER_CREATE o ACCESS_CONTROL_READ. Los acrónimos del catálogo siguen el patrón {MODULO}_{CREATE|READ|UPDATE|DELETE} más algunos permisos extra de tickets (ver RBAC).

@UseGuards(PermissionsGuard)
@Auth()
@Controller({ path: API_PATHS.USERS, version: API_VERSION.V1 })
export class UserController {
@RequirePermission('USER_CREATE')
@Post(CRUD_ROUTES.CREATE)
create(...) { ... }

// Sin @RequirePermission: basta con estar autenticado
@Get('get-me')
getMe(...) { ... }
}

:::warning Requiere el guard El decorador por sí solo no protege nada: el controlador debe declarar @UseGuards(PermissionsGuard) junto con @Auth(). Sin el guard, la metadata se ignora. :::

@Roles(...roles)​

roles.decorator.ts. Guarda en la metadata roles una lista de valores de userType (admin, agent). Lo lee RolesGuard (ver Guards).

@Roles('admin')

@PlatformAdmin()​

platform-admin.decorator.ts. Compone UseGuards(AuthGuard, PlatformAdminGuard): exige sesión válida y que el usuario tenga isPlatformAdmin === true.

@Paginate()​

paginate.decorator.ts. Decorador de parámetro que lee page y limit del query string y devuelve { page, limit }. page mínimo 1; limit se acota entre 1 y PAGINATION.MAX_LIMIT, y usa los valores por defecto de PAGINATION si no son numéricos.