All files / bookmark bookmark.controller.ts

100% Statements 26/26
100% Branches 0/0
100% Functions 5/5
100% Lines 24/24

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 1204x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x   4x 4x           4x 15x                     4x       1x                                             4x 1x                                                   4x       1x                                           4x       1x      
import { Controller, Get, HttpStatus, Param, Patch, Post, Query, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiOperation, ApiParam, ApiTags } from '@nestjs/swagger';
import { JwtAuthGuard } from 'src/auth/guards/jwt-auth.guard';
import { BookmarkService } from 'src/bookmark/bookmark.service';
import { ApiBookmarkGetDetailResponseDto } from 'src/bookmark/dto/api-bookmark-get-detail-response.dto';
import { ApiBookmarkGetRequestQueryDto } from 'src/bookmark/dto/api-bookmark-get-request-query.dto';
import { ApiBookmarkGetResponseDto } from 'src/bookmark/dto/api-bookmark-get-response.dto';
import { ERROR } from 'src/commons/constants/error';
import { ApiArrayLastItemIdSuccessResponse } from 'src/commons/decorators/api-array-last-item-id-success-response.decorator';
import { ApiExceptionResponse } from 'src/commons/decorators/api-exception-response.decorator';
import { ApiSuccessResponse } from 'src/commons/decorators/api-success-response.decorator';
import { CurrentUser } from 'src/commons/decorators/user.decorator';
import { LastItemIdResponseDto } from 'src/commons/dtos/last-item-id-response.dto';
import { UuidResponseDto } from 'src/commons/dtos/uuid-response.dto';
import { UserDto } from 'src/user/dto/user.dto';
 
@ApiTags('북마크')
@Controller('/api/bookmark')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth('access-token')
export class BookmarkController {
  constructor(private readonly bookmarkService: BookmarkService) {}
 
  @Get('/')
  @ApiOperation({
    summary: '북마크 목록',
    description: '북마크 목록',
  })
  @ApiArrayLastItemIdSuccessResponse(ApiBookmarkGetResponseDto, {
    description: '북마크 목록 조회 성공',
    status: HttpStatus.OK,
  })
  async bookmarkList(
    @Query() dto: ApiBookmarkGetRequestQueryDto,
    @CurrentUser() user: UserDto,
  ): Promise<LastItemIdResponseDto<ApiBookmarkGetResponseDto>> {
    return this.bookmarkService.bookmarkList(dto, user);
  }
 
  @Get('/:uuid')
  @ApiOperation({
    summary: '북마크 상세',
    description: '북마크 상세',
    deprecated: true,
  })
  @ApiSuccessResponse(ApiBookmarkGetDetailResponseDto, {
    description: '북마크 상세 조회 성공',
    status: HttpStatus.OK,
  })
  @ApiExceptionResponse([ERROR.NOT_EXIST_DATA], {
    description: '코스 uuid가 존재하지 않을 경우',
    status: HttpStatus.NOT_FOUND,
  })
  @ApiParam({
    name: 'uuid',
    type: 'string',
    required: false,
    description: '코스 uuid',
  })
  async myCourseDetail(@Param('uuid') uuid: string): Promise<ApiBookmarkGetDetailResponseDto> {
    return this.bookmarkService.myCourseDetail(uuid);
  }
 
  @Post('/:uuid')
  @ApiOperation({
    summary: '북마크 저장',
    description: '북마크 저장',
  })
  @ApiSuccessResponse(UuidResponseDto, {
    description: '북마크 저장 완료',
    status: HttpStatus.CREATED,
  })
  @ApiExceptionResponse([ERROR.DUPLICATION], {
    description: '이미 저장한 북마크일 경우',
    status: HttpStatus.CONFLICT,
  })
  @ApiExceptionResponse([ERROR.NOT_EXIST_DATA], {
    description: '코스 uuid가 존재하지 않을 경우',
    status: HttpStatus.NOT_FOUND,
  })
  @ApiParam({
    name: 'uuid',
    type: 'string',
    required: false,
    description: '코스 uuid',
  })
  async bookmarkSave(
    @CurrentUser() user: UserDto,
    @Param('uuid') uuid: string,
  ): Promise<UuidResponseDto> {
    return this.bookmarkService.bookmarkSave(user, uuid);
  }
 
  @Patch('/:uuid')
  @ApiOperation({
    summary: '북마크 삭제',
    description: '북마크 삭제',
  })
  @ApiSuccessResponse(UuidResponseDto, {
    description: '북마크 삭제 완료',
    status: HttpStatus.NO_CONTENT,
  })
  @ApiExceptionResponse([ERROR.NOT_EXIST_DATA], {
    description: '코스 uuid가 존재하지 않을 경우',
    status: HttpStatus.NOT_FOUND,
  })
  @ApiParam({
    name: 'uuid',
    type: 'string',
    required: false,
    description: '코스 uuid',
  })
  async bookmarkDelete(
    @CurrentUser() user: UserDto,
    @Param('uuid') uuid: string,
  ): Promise<UuidResponseDto> {
    return this.bookmarkService.bookmarkDelete(user, uuid);
  }
}