Skip to content

Commit

Permalink
[v0.1.1] 주문모듈 통계_관리자 관련 api 배포 ,에러코드화
Browse files Browse the repository at this point in the history
[v0.1.1] 주문모듈 통계_관리자 관련 api 배포 ,에러코드화
  • Loading branch information
ImNM authored Jul 30, 2022
2 parents c01fc80 + 3ba98ca commit d1d5c11
Show file tree
Hide file tree
Showing 53 changed files with 1,299 additions and 329 deletions.
1 change: 1 addition & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

69 changes: 12 additions & 57 deletions src/app.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,13 @@ import {
ForbiddenException,
Get,
HttpStatus,
Param,
Post,
Query,
UnauthorizedException,
UseGuards
UnauthorizedException
} from '@nestjs/common';
import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { ThrottlerException } from '@nestjs/throttler';
import { Role } from 'src/common/consts/enum';
import { Roles } from 'src/common/decorators/roles.decorator';
import { ReqUser } from 'src/common/decorators/user.decorator';
import { User } from 'src/database/entities/user.entity';
import { AuthErrorDefine } from './auth/Errors/AuthErrorDefine';

import { ErrorResponse } from './common/decorators/ErrorResponse.decorator';
import { ErrorCommonResponse } from './common/errors/ErrorCommonResponse.dto';
import { HttpExceptionErrorResponseDto } from './common/errors/HttpExceptionError.response.dto';
import { CustomValidationError } from './common/errors/ValidtionError';
@Controller()
@ApiTags('common')
Expand All @@ -28,63 +20,26 @@ export class CommonController {
model: BadRequestException,
exampleDescription: '400번 BadRequestException',
exampleTitle: '400 번의 BadRequestException',
exampleMessageInfo: '에러메시지 형식이 옵니다.'
message: '에러메시지 형식이 옵니다.'
},
{
model: CustomValidationError,
exampleDescription: '400번 ValidationError',
exampleTitle: '400번 ValidationError',
exampleMessageInfo: {
message: {
'검증오류가난 필드': ['어떤에러', '어떤에러2'],
'검증오류가난 필드2': ['어떤에러3', '어떤에러4']
}
}
])
@ErrorResponse(HttpStatus.UNAUTHORIZED, [
{
model: UnauthorizedException,
exampleDescription: '헤더 Bearer 형식을 지키지 않고 잘못 요청 보냈을 때',
exampleTitle: '어세스토큰-잘못된 헤더 요청',
exampleMessageInfo: '잘못된 헤더 요청'
},
{
model: UnauthorizedException,
exampleDescription:
'손상되거나 Bearer 형식은 맞췄는데 토큰이 이상한 토큰일 때',
exampleTitle: '어세스토큰-잘못된 토큰',
exampleMessageInfo: '잘못된 토큰'
},
{
model: UnauthorizedException,
exampleDescription: '기한이 지난 토큰일때',
exampleTitle: '어세스토큰-기한만료',
exampleMessageInfo: '기한만료'
},
{
model: UnauthorizedException,
exampleDescription:
'어세스토큰은 살아있지만 db에서 유저가 삭제되었을때 (테스트할때 발생할수있는 오류)',
exampleTitle: '어세스토큰-유저없음',
exampleMessageInfo: '없는 유저입니다.'
}
])
@ErrorResponse(HttpStatus.FORBIDDEN, [
{
model: ForbiddenException,
exampleDescription: '일반 유저가 관리자의 메소드에 접근 하려고 할때',
exampleTitle: '관리자메소드에 유저가 접근',
exampleMessageInfo: '권한이 없습니다.'
}
])
@ErrorResponse(HttpStatus.TOO_MANY_REQUESTS, [
{
model: ThrottlerException,
exampleDescription:
'과도한 요청을 보낼시에 ( 인증문자 요청 , 관리자 슬랙 인증 요청',
exampleTitle: '과도한 요청',
exampleMessageInfo: 'ThrottlerException: Too Many Requests'
}
AuthErrorDefine['Auth-1000'],
AuthErrorDefine['Auth-1001'],
AuthErrorDefine['Auth-1002'],
AuthErrorDefine['Auth-1003']
])
@ErrorResponse(HttpStatus.FORBIDDEN, [AuthErrorDefine['Auth-3000']])
@ErrorResponse(HttpStatus.TOO_MANY_REQUESTS, [AuthErrorDefine['Auth-9000']])
@ApiOperation({ summary: '공통 오류에 대해서 정의 합니다.' })
@Get()
commen() {}
Expand Down
2 changes: 1 addition & 1 deletion src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import { CommonController } from './app.controller';
port: Number(configService.get('REDIS_PORT')),
retryStrategy: times => {
// check connection
console.log('could not connect to redis!');
//console.log('could not connect to redis!');
process.exit(1);
}
}
Expand Down
136 changes: 136 additions & 0 deletions src/auth/Errors/AuthErrorDefine.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
import {
BadRequestException,
ForbiddenException,
InternalServerErrorException,
UnauthorizedException
} from '@nestjs/common';
import { ThrottlerException } from '@nestjs/throttler';
import { ErrorResponseOption } from 'src/common/decorators/ErrorResponse.decorator';
type Keys =
| 'Auth-1000'
| 'Auth-1001'
| 'Auth-1002'
| 'Auth-1003'
| 'Auth-3000'
| 'Auth-9000'
| 'Auth-5000'
| 'Auth-0000'
| 'Auth-0001'
| 'Auth-0002'
| 'Auth-0003'
| 'Auth-0004'
| 'Auth-0005';

export const AuthErrorDefine: Record<
Keys,
ErrorResponseOption & { code: string }
> = {
//400
'Auth-0000': {
model: BadRequestException,
exampleDescription: '3분짜리 인증번호 기한만료시에 발생하는 오류',
exampleTitle: '인증번호-기한만료',
message: '인증번호가 기한만료 되었습니다.',
code: 'Auth-0000'
},
'Auth-0001': {
model: BadRequestException,
exampleDescription: '인증번호가 일치하지 않으면 발생하는 오류',
exampleTitle: '인증번호-불일치',
message: '인증번호가 일치하지 않습니다.',
code: 'Auth-0001'
},
'Auth-0002': {
model: BadRequestException,
exampleDescription: '중복해서 회원가입을 시도하면 막습니다.',
exampleTitle: '중복회원가입요청',
message: '이미 회원가입한 유저입니다.',
code: 'Auth-0002'
},

'Auth-0003': {
model: BadRequestException,
exampleDescription: '슬랙에 등록되지않은 유저일때 발생하는 오류',
exampleTitle: '정보오류-유저정보,슬랙정보없음',
message: '가입한 유저나 어드민 유저가 아닙니다.',
code: 'Auth-0003'
},
'Auth-0004': {
model: BadRequestException,
exampleDescription: '받은 슬랙이메일이 올바르지않을경우',
exampleTitle: '정보오류-슬랙정보없음',
message: '가입한 슬랙 이메일을 올바르게 입력해 주세요',
code: 'Auth-0004'
},

'Auth-0005': {
model: BadRequestException,
exampleDescription: '가입한 유저나 어드민 유저가 아닐때',
exampleTitle: '인증번호-검증이후',
message: '가입한 유저나 어드민 유저가 아닙니다.',
code: 'Auth-0005'
},

//401
'Auth-1000': {
model: UnauthorizedException,
exampleDescription: '헤더 Bearer 형식을 지키지 않고 잘못 요청 보냈을 때',
exampleTitle: '어세스토큰-잘못된 헤더 요청',
message: '잘못된 헤더 요청',
code: 'Auth-1000'
},

'Auth-1001': {
model: UnauthorizedException,
exampleDescription:
'손상되거나 Bearer 형식은 맞췄는데 토큰이 이상한 토큰일 때',
exampleTitle: '어세스토큰-잘못된 토큰',
message: '잘못된 토큰',
code: 'Auth-1001'
},

'Auth-1002': {
model: UnauthorizedException,
exampleDescription: '기한이 지난 토큰일때',
exampleTitle: '어세스토큰-기한만료',
message: '기한만료',
code: 'Auth-1002'
},
'Auth-1003': {
model: UnauthorizedException,
exampleDescription:
'어세스토큰은 살아있지만 db에서 유저가 삭제되었을때 (테스트할때 발생할수있는 오류)',
exampleTitle: '어세스토큰-유저없음',
message: '없는 유저입니다.',
code: 'Auth-1003'
},

//403
'Auth-3000': {
model: ForbiddenException,
exampleDescription: '일반 유저가 관리자의 메소드에 접근 하려고 할때',
exampleTitle: '관리자메소드에 유저가 접근',
message: '권한이 없습니다.',
code: 'Auth-3000'
},

//500
'Auth-5000': {
model: InternalServerErrorException,
exampleDescription: '문자메시지 발송이 실패하면 발생합니다.',
exampleTitle: '문자메시지 발송실패 오류',
message:
'문자메시지 발송 실패. 고스락 카카오톡 채널을 활용해서 관리자한테 연락 부탁드립니다.',
code: 'Auth-5000'
},

// 스로틀
'Auth-9000': {
model: ThrottlerException,
exampleDescription:
'과도한 요청을 보낼시에 ( 인증문자 요청 , 관리자 슬랙 인증 요청',
exampleTitle: '과도한 요청',
message: 'ThrottlerException: Too Many Requests',
code: 'Auth-9000'
}
};
Loading

0 comments on commit d1d5c11

Please sign in to comment.