kakasoo

NestJS 스웨거에서 에러 스키마 작성하기 본문

프로그래밍/NestJS

NestJS 스웨거에서 에러 스키마 작성하기

카카수(kakasoo) 2023. 1. 31. 01:13
반응형
import { SchemaObject } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface';

export const ERROR = {
  ALREADY_CREATED_EMAIL: { code: 4001, message: '이미 생성된 이메일입니다.' },
  NO_AUTH_TOKEN: { code: 4002, message: '인증이 필요합니다.' },
  IS_SAME_POSITION: { code: 4003, message: '이미지의 정렬 값이 동일한 경우가 존재합니다.' },
} as const;

type KeyOfError = keyof typeof ERROR;
type ValueOfError = (typeof ERROR)[KeyOfError];

export const createErrorSchema = (error: ValueOfError): SchemaObject => {
  return {
    type: 'object',
    properties: {
      code: { type: 'number', example: error.code },
      message: { type: 'string', example: error.message },
    },
  };
};

 

@ApiOperation({ summary: '230129 - 게시글 조회 (incompleted)' })
@ApiOkResponse({ type: GetOneArticleResponseDto })
@ApiBadRequestResponse({
  description: '이미지들 중 position이 null이 아니면서 동일하게 배정된 경우',
  schema: createErrorSchema(ERROR.CANNOT_FINDONE_ARTICLE),
})
@ApiParam({ name: 'id', description: '조회하고자 하는 게시글의 id 값' })
@Get(':id')
async getOneDetailArticle(@UserId() userId: number, @Param('id', ParseIntPipe) articleId: number) {
  const article = await this.articlesService.getOneDetailArticle(userId, articleId);
  return article;
}

 

ERROR 객체에 미리 키 밸류로 에러 내용을 저장했다고 가정하자.

저런 객체 구조라면 아래의 createErrorSchema 함수를 이용해서 쉽게 schema를 표현해줄 수 있다.

 

반응형