Skip to content

Commit

Permalink
Merge pull request #40 from Keyneez/feat/version
Browse files Browse the repository at this point in the history
Feat/version
  • Loading branch information
InHyeok-J authored Aug 31, 2023
2 parents e6ecd5a + 36b529c commit fd6ce97
Show file tree
Hide file tree
Showing 52 changed files with 310 additions and 278 deletions.
4 changes: 2 additions & 2 deletions docs/auth/auth.swagger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import {
ApiOperation,
ApiTags,
} from '@nestjs/swagger';
import { RefreshResponseDto } from 'src/domain/auth/dtos/refresh-response.dto';
import { ResponseDto } from 'src/global/dtos/response.dto';
import { ApiSuccessResponse } from '../api.success.response';
import { RequireAccessToken } from '../require.access-token';
import { RefreshV1ResponseDto } from '../../src/domain/auth/v1/dtos/refresh-v1.response.dto';

export function LogOutDocs() {
return applyDecorators(
Expand Down Expand Up @@ -36,7 +36,7 @@ export function RefreshDocs() {
isArray: false,
exampleDesciption: 'access 토큰 재 발급 성공',
status: 200,
model: RefreshResponseDto,
model: RefreshV1ResponseDto,
isNotValue: false,
}),
ApiOperation({
Expand Down
10 changes: 5 additions & 5 deletions docs/auth/oauth.swagger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import {
ApiTags,
ApiUnauthorizedResponse,
} from '@nestjs/swagger';
import { OAuthLoginResponseDto } from 'src/domain/auth/dtos/oauth-login.response.dto';
import { OAuthSignUpResponseDto } from 'src/domain/auth/dtos/oauth-signup.response.dto';
import { ResponseDto } from 'src/global/dtos/response.dto';
import { ApiSuccessResponse } from '../api.success.response';
import { OAuthLoginV1ResponseDto } from '../../src/domain/auth/v1/dtos/oauth-login-v1.response.dto';
import { OAuthSignUpV1ResponseDto } from '../../src/domain/auth/v1/dtos/oauth-signup-v1.response.dto';

export function OAuthLoginDocs() {
return applyDecorators(
Expand All @@ -24,13 +24,13 @@ export function OAuthLoginDocs() {
description: '회원가입이 필요한 경우 is_new_user: true',
schema: {
type: 'object',
example: OAuthLoginResponseDto.newUser(),
example: OAuthLoginV1ResponseDto.newUser(),
},
}),
ApiSuccessResponse({
isArray: false,
exampleDesciption: '로그인 성공',
model: OAuthLoginResponseDto,
model: OAuthLoginV1ResponseDto,
}),
ApiBadRequestResponse({
description: 'token 값이 body에 없거나, 잘못된 토큰인 경우',
Expand All @@ -57,7 +57,7 @@ export function OAuthSignUpDocs() {
}),
ApiSuccessResponse({
isArray: false,
model: OAuthSignUpResponseDto,
model: OAuthSignUpV1ResponseDto,
exampleDesciption: '회원가입 성공',
status: 201,
}),
Expand Down
18 changes: 9 additions & 9 deletions docs/contents/contents.swagger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import {
ApiQuery,
ApiTags,
} from '@nestjs/swagger';
import { ContentsDetailResponseDto } from 'src/domain/contents/dtos/contents-detail-response.dto';
import { ContentsLikedResponseDto } from 'src/domain/contents/dtos/contents-liked-response.dto';
import { ContentsV1DetailResponseDto } from 'src/domain/contents/v1/dtos/contents-v1-detail-response.dto';
import { ContentsV1LikedResponseDto } from 'src/domain/contents/v1/dtos/contents-v1-liked-response.dto';
import { ApiSuccessResponse } from '../api.success.response';
import { RequireAccessToken } from '../require.access-token';

Expand All @@ -28,7 +28,7 @@ export function GetContentsDocs() {
required: false,
}),
ApiSuccessResponse({
model: ContentsDetailResponseDto,
model: ContentsV1DetailResponseDto,
isArray: true,
exampleDesciption: '게시글 전체 조회 성공',
}),
Expand All @@ -48,7 +48,7 @@ export function GetContentDetailDocs() {
description: '게시물 pk',
}),
ApiSuccessResponse({
model: ContentsDetailResponseDto,
model: ContentsV1DetailResponseDto,
isArray: false,
exampleDesciption: '게시글 상세 조회 성공',
}),
Expand All @@ -73,7 +73,7 @@ export function SearchByKeywordDocs() {
"keyword가 포함된 게시물이 없을 때: 'Not found contents including keyword: ' + ${keyword}'",
}),
ApiSuccessResponse({
model: ContentsDetailResponseDto,
model: ContentsV1DetailResponseDto,
isArray: true,
exampleDesciption: '게시글 검색 성공',
}),
Expand All @@ -93,7 +93,7 @@ export function LikeContentDocs() {
description: '게시물 pk',
}),
ApiSuccessResponse({
model: ContentsLikedResponseDto,
model: ContentsV1LikedResponseDto,
isArray: false,
exampleDesciption: '게시글 좋아요 성공',
}),
Expand Down Expand Up @@ -147,7 +147,7 @@ export function GetLikedContentsDocs() {
'좋아요를 누른 게시물이 없는 경우: 좋아요를 누른 (${contentsRequestDto.filter}) 게시물이 없습니다',
}),
ApiSuccessResponse({
model: ContentsLikedResponseDto,
model: ContentsV1LikedResponseDto,
isArray: true,
exampleDesciption: '좋아요한 게시글 조회 성공',
}),
Expand All @@ -168,7 +168,7 @@ export function RecommendContentsDocs() {
required: true,
}),
ApiSuccessResponse({
model: ContentsDetailResponseDto,
model: ContentsV1DetailResponseDto,
isArray: true,
exampleDesciption: '추천 게시물 조회 성공',
}),
Expand All @@ -191,7 +191,7 @@ export function PopularContentsDocs() {
required: false,
}),
ApiSuccessResponse({
model: ContentsDetailResponseDto,
model: ContentsV1DetailResponseDto,
isArray: true,
exampleDesciption: '인기 게시물 조회 성공',
}),
Expand Down
4 changes: 2 additions & 2 deletions docs/tag/tag.swagger.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { applyDecorators } from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { TagResponseDto } from '../../src/domain/tags/dtos/tag.response.dto';
import { ApiSuccessResponse } from '../api.success.response';
import { TagV1ResponseDto } from '../../src/domain/tags/v1/dtos/tag-v1.response.dto';

export function GetAllTagDocs() {
return applyDecorators(
Expand All @@ -13,7 +13,7 @@ export function GetAllTagDocs() {
ApiSuccessResponse({
isArray: true,
exampleDesciption: '태그 조회 성공',
model: TagResponseDto,
model: TagV1ResponseDto,
}),
);
}
4 changes: 2 additions & 2 deletions docs/user/user.swagger.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { applyDecorators } from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { UserInfoResponseDto } from 'src/domain/user/dtos/user-info.response.dto';
import { ApiSuccessResponse } from '../api.success.response';
import { RequireAccessToken } from '../require.access-token';
import { UserV1InfoResponseDto } from '../../src/domain/user/v1/dtos/user-v1-info.response.dto';

export function GetUserInfoDocs() {
return applyDecorators(
Expand All @@ -14,7 +14,7 @@ export function GetUserInfoDocs() {
}),
ApiSuccessResponse({
isArray: false,
model: UserInfoResponseDto,
model: UserV1InfoResponseDto,
status: 200,
exampleDesciption: '유저 조회 성공',
}),
Expand Down
2 changes: 1 addition & 1 deletion src/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AuthModule } from './domain/auth/auth.module';
import { AuthModule } from './domain/auth/v1/auth-v1.module';
import { ContentsModule } from './domain/contents/contents.module';
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { AppController } from './app.controller';
Expand Down
29 changes: 2 additions & 27 deletions src/domain/auth/auth.module.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,5 @@
import { Global, Module } from '@nestjs/common';
import { OAuthController } from './controller/oauth.controller';
import { OAuthService } from './service/oauth.service';
import { TokenService } from './service/token.service';
import { SnsService } from './service/sns.service';
import { HttpModule } from '@nestjs/axios';
import { CacheModule } from '@nestjs/cache-manager';
import { UserRepository } from '../user/repository/user.repository';
import { JwtModule } from '@nestjs/jwt';
import { AccessTokenGuard } from './guard/access-token.guard';
import { RefreshTokenGuard } from './guard/refresh-token.guard';
import { AuthController } from './controller/auth.controller';
import { AuthService } from './service/auth.service';

@Global()
import { Module } from '@nestjs/common';
@Module({
imports: [HttpModule, CacheModule.register(), JwtModule.register({})],
controllers: [OAuthController, AuthController],
providers: [
OAuthService,
TokenService,
SnsService,
UserRepository,
AccessTokenGuard,
RefreshTokenGuard,
AuthService,
],
exports: [TokenService],
imports: [AuthModule],
})
export class AuthModule {}
File renamed without changes.
23 changes: 0 additions & 23 deletions src/domain/auth/dtos/oauth-signup.response.dto.ts

This file was deleted.

30 changes: 30 additions & 0 deletions src/domain/auth/v1/auth-v1.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { Global, Module } from '@nestjs/common';
import { OAuthV1Controller } from './controller/oauth-v1.controller';
import { OAuthV1Service } from './service/oauth-v1.service';
import { TokenV1Service } from './service/token-v1.service';
import { SnsV1Service } from './service/sns-v1.service';
import { HttpModule } from '@nestjs/axios';
import { CacheModule } from '@nestjs/cache-manager';
import { JwtModule } from '@nestjs/jwt';
import { AccessTokenV1Guard } from './guard/access-token-v1.guard';
import { RefreshTokenV1Guard } from './guard/refresh-token-v1.guard';
import { AuthV1Controller } from './controller/auth-v1.controller';
import { AuthV1Service } from './service/auth-v1.service';
import { UserV1Repository } from '../../user/v1/repository/user-v1.repository';

@Global()
@Module({
imports: [HttpModule, CacheModule.register(), JwtModule.register({})],
controllers: [OAuthV1Controller, AuthV1Controller],
providers: [
OAuthV1Service,
TokenV1Service,
SnsV1Service,
UserV1Repository,
AccessTokenV1Guard,
RefreshTokenV1Guard,
AuthV1Service,
],
exports: [TokenV1Service],
})
export class AuthModule {}
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,23 @@ import {
Post,
UseGuards,
} from '@nestjs/common';
import { RefreshTokenGuard } from '../guard/refresh-token.guard';
import { RefreshTokenV1Guard } from '../guard/refresh-token-v1.guard';
import { JwtAuthUser, User } from 'src/global/decorators/jwt.decorator';
import { AuthService } from '../service/auth.service';
import { RefreshRequestDto } from '../dtos/refresh-request.dto';
import { AuthV1Service } from '../service/auth-v1.service';
import { RefreshV1RequestDto } from '../dtos/refresh-v1.request.dto';
import { ResponseDto } from 'src/global/dtos/response.dto';
import { AccessTokenGuard } from '../guard/access-token.guard';
import { AccessTokenV1Guard } from '../guard/access-token-v1.guard';
import { LogOutDocs, RefreshDocs, WithDrawDocs } from 'docs/auth/auth.swagger';
import { AppleWithdrawRequestDto } from '../dtos/apple-withdraw.request.dto';
import { AppleWithdrawV1RequestDto } from '../dtos/apple-withdraw-v1.request.dto';

@Controller('/api/v1/auth')
export class AuthController {
constructor(private authService: AuthService) {}
export class AuthV1Controller {
constructor(private authService: AuthV1Service) {}

@Post('/refresh')
@UseGuards(RefreshTokenGuard)
@UseGuards(RefreshTokenV1Guard)
@RefreshDocs()
async refresh(@User() user: JwtAuthUser, @Body() dto: RefreshRequestDto) {
async refresh(@User() user: JwtAuthUser, @Body() dto: RefreshV1RequestDto) {
const result = await this.authService.refresh(
user.userPk,
dto.refresh_token,
Expand All @@ -32,27 +32,27 @@ export class AuthController {
}

@Get('/logout')
@UseGuards(AccessTokenGuard)
@UseGuards(AccessTokenV1Guard)
@LogOutDocs()
async logout(@User() user: JwtAuthUser) {
await this.authService.logout(user.userPk);
return ResponseDto.ok(HttpStatus.OK, '로그아웃 성공');
}

@Delete('/withdraw/kakao')
@UseGuards(AccessTokenGuard)
@UseGuards(AccessTokenV1Guard)
@WithDrawDocs()
async withdrawKakao(@User() user: JwtAuthUser) {
await this.authService.withdrawKakao(user.userPk);
return ResponseDto.ok(HttpStatus.OK, '회원탈퇴 성공');
}

@Delete('/withdraw/apple')
@UseGuards(AccessTokenGuard)
@UseGuards(AccessTokenV1Guard)
@WithDrawDocs()
async withdrawApple(
@User() user: JwtAuthUser,
@Body() body: AppleWithdrawRequestDto,
@Body() body: AppleWithdrawV1RequestDto,
) {
const autoCode = Buffer.from(body.auth_code, 'base64').toString('utf8');
await this.authService.withdrawApple(user.userPk, autoCode);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
import { Body, Controller, HttpStatus, Post } from '@nestjs/common';
import { ResponseDto } from 'src/global/dtos/response.dto';
import { OAuthLoginRequestDto } from '../dtos/oauth-login.requst.dto';
import { OAuthService } from '../service/oauth.service';
import { OAuthSignUpRequestDto } from '../dtos/oauth-signup.request.dto';
import { OAuthLoginV1RequestDto } from '../dtos/oauth-login-v1.requst.dto';
import { OAuthV1Service } from '../service/oauth-v1.service';
import { OAuthSignUpV1RequestDto } from '../dtos/oauth-signup-v1.request.dto';
import { OAuthLoginDocs, OAuthSignUpDocs } from 'docs/auth/oauth.swagger';

@Controller('/api/v1/oauth')
export class OAuthController {
constructor(private oauthService: OAuthService) {}
export class OAuthV1Controller {
constructor(private oauthService: OAuthV1Service) {}

@Post('/sign-in')
@OAuthLoginDocs()
async oauthLogin(@Body() requestBody: OAuthLoginRequestDto) {
async oauthLogin(@Body() requestBody: OAuthLoginV1RequestDto) {
const result = await this.oauthService.oauthLogin(requestBody);
return ResponseDto.okWithData(HttpStatus.OK, 'OAuth Login', result);
}

@Post('/sign-up')
@OAuthSignUpDocs()
async kakaoSignUp(@Body() requestBody: OAuthSignUpRequestDto) {
async kakaoSignUp(@Body() requestBody: OAuthSignUpV1RequestDto) {
const result = await this.oauthService.oauthSignup(requestBody);
return ResponseDto.okWithData(
HttpStatus.CREATED,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsString } from 'class-validator';

export class AppleWithdrawRequestDto {
export class AppleWithdrawV1RequestDto {
@ApiProperty({
type: String,
required: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ApiProperty } from '@nestjs/swagger';
import { Transform } from 'class-transformer';
import { IsString } from 'class-validator';

export class OAuthLoginRequestDto {
export class OAuthLoginV1RequestDto {
@ApiProperty({
type: String,
required: true,
Expand Down
Loading

0 comments on commit fd6ce97

Please sign in to comment.