Files
iddaai-be/src/common/decorators/index.ts
T
2026-04-16 17:21:48 +03:00

61 lines
1.4 KiB
TypeScript
Executable File

import {
createParamDecorator,
ExecutionContext,
SetMetadata,
} from "@nestjs/common";
/**
* Get the current authenticated user from request
*/
export const CurrentUser = createParamDecorator(
(data: string | undefined, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
const user = request.user;
if (data) {
return user?.[data];
}
return user;
},
);
/**
* Mark a route as public (no authentication required)
*/
export const IS_PUBLIC_KEY = "isPublic";
export const Public = () => SetMetadata(IS_PUBLIC_KEY, true);
/**
* Require specific roles to access a route
*/
export const ROLES_KEY = "roles";
export const Roles = (...roles: string[]) => SetMetadata(ROLES_KEY, roles);
/**
* Require specific permissions to access a route
*/
export const PERMISSIONS_KEY = "permissions";
export const RequirePermissions = (...permissions: string[]) =>
SetMetadata(PERMISSIONS_KEY, permissions);
/**
* Get tenant ID from request (for multi-tenancy)
*/
export const CurrentTenant = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return request.tenantId;
},
);
/**
* Get the current language from request headers
*/
export const CurrentLang = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return request.headers["accept-language"] || "en";
},
);