diff --git a/src/common/decorators/public.decorator.ts b/src/common/decorators/public.decorator.ts new file mode 100644 index 0000000..b3845e1 --- /dev/null +++ b/src/common/decorators/public.decorator.ts @@ -0,0 +1,4 @@ +import { SetMetadata } from '@nestjs/common'; + +export const IS_PUBLIC_KEY = 'isPublic'; +export const Public = () => SetMetadata(IS_PUBLIC_KEY, true); diff --git a/src/common/guards/jwt-auth.guard.ts b/src/common/guards/jwt-auth.guard.ts index 2155290..0604d1a 100755 --- a/src/common/guards/jwt-auth.guard.ts +++ b/src/common/guards/jwt-auth.guard.ts @@ -1,5 +1,24 @@ -import { Injectable } from '@nestjs/common'; +import { Injectable, ExecutionContext } from '@nestjs/common'; +import { Reflector } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; +import { IS_PUBLIC_KEY } from '../decorators/public.decorator'; @Injectable() -export class JwtAuthGuard extends AuthGuard('jwt') {} +export class JwtAuthGuard extends AuthGuard('jwt') { + constructor(private reflector: Reflector) { + super(); + } + + canActivate(context: ExecutionContext) { + const isPublic = this.reflector.getAllAndOverride(IS_PUBLIC_KEY, [ + context.getHandler(), + context.getClass(), + ]); + + if (isPublic) { + return true; + } + + return super.canActivate(context); + } +} diff --git a/src/modules/tourism/tourism.controller.ts b/src/modules/tourism/tourism.controller.ts index 08bbd69..a7ec466 100755 --- a/src/modules/tourism/tourism.controller.ts +++ b/src/modules/tourism/tourism.controller.ts @@ -12,6 +12,7 @@ import { UpdatePlaceDto } from './dto/update-place.dto'; import { CreateTourGuideDto } from './dto/create-tour-guide.dto'; import { UpdateTourGuideDto } from './dto/update-tour-guide.dto'; import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard'; +import { Public } from '../../common/decorators/public.decorator'; import { RolesGuard } from '../../common/guards/roles.guard'; import { Roles } from '../../common/decorators/roles.decorator'; import { Destination } from '../../entities/destination.entity'; @@ -154,6 +155,7 @@ export class TourismController { return this.tourismService.createTourGuide(createTourGuideDto); } + @Public() @Get('guides') @ApiOperation({ summary: 'Get all tour guides with filters' }) @ApiQuery({ name: 'page', required: false, type: Number })