반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Crawling
- dp
- 프로그래머스
- 가천대
- 수학
- Node.js
- TCP
- dfs
- 자바스크립트
- BFS
- 백준
- 타입스크립트
- 프로그래머스 레벨 2
- Nestjs
- javascript
- 크롤링
- typescript
- 알고리즘
- 쉬운 문제
- type challenge
- 그래프
- 타입 챌린지
- socket
- HTTP
- 문자열
- 소켓
- HTTP 완벽 가이드
- Algorithm
- 레벨 1
- ip
Archives
- Today
- Total
kakasoo
동일한 400 코드에 대해서 스웨거 에러 스키마 작성하기 본문
반응형
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: '이미지의 정렬 값이 동일한 경우가 존재합니다.' },
CANNOT_FINDONE_ARTICLE: { code: 4004, message: '게시글을 찾지 못했습니다.' },
SELECT_MORE_THAN_ONE_BODY_IMAGE: { code: 4005, message: '적어도 1장 이상의 이미지를 골라야 합니다.' },
NOT_FOUND_ARTICLE_TO_COMMENT: { code: 4006, message: '댓글을 작성할 게시글을 찾지 못했습니다.' },
TOO_MANY_REPORTED_ARTICLE: { code: 4007, message: '신고가 접수된 게시글이라 댓글 작성이 불가능합니다.' },
} as const;
type KeyOfError = keyof typeof ERROR;
type ValueOfError = (typeof ERROR)[KeyOfError];
type Push<T extends any[], U> = [...T, U];
type NTuple<N extends number, T extends any[] = []> = T['length'] extends N ? T : NTuple<N, Push<T, any>>;
export const createErrorSchemas = <T extends string[]>(errors: NTuple<T['length'], ValueOfError[]>): SchemaObject => {
return {
type: 'array',
items: {
anyOf: [...errors].map((error) => {
return {
properties: {
code: { type: 'number', example: error['code'] },
message: { type: 'string', example: error['message'] },
},
};
}),
},
};
};
@ApiBadRequestResponse({
schema: createErrorSchemas([ERROR.NOT_FOUND_ARTICLE_TO_COMMENT, ERROR.TOO_MANY_REPORTED_ARTICLE]),
})
더 나은 방법이 있을지 모르겠지만, 일단 swagger 문서의 표기에 맞게 anyOf에 프로퍼티를 가진 객체 배열을 주도록 만들었다.
주어진 form이 아니면 동작하지 않겠지만, 필요로 하는 사람들이 있을 거 같아 공유한다.
반응형
'프로그래밍 > NestJS' 카테고리의 다른 글
You provided an invalid object where a stream was expected. (0) | 2023.02.24 |
---|---|
Nestia 적용하기 (1) | 2023.02.19 |
NestJS에서 S3로 이미지 업로드하기 (0) | 2023.01.31 |
NestJS 스웨거에서 에러 스키마 작성하기 (0) | 2023.01.31 |
Strategy, AuthGuard에서 에러 커스텀하기 (2) | 2023.01.29 |