From bb198c03be189625cf6af6292d0126bfcf291d2f Mon Sep 17 00:00:00 2001 From: dg1418 Date: Thu, 6 Feb 2025 15:31:34 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat/#103/=EC=95=84=EC=9D=B4=ED=85=9C=20?= =?UTF-8?q?=EC=8A=A4=EC=9B=A8=EA=B1=B0=20=EC=9E=A0=EC=8B=9C=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/items/items.controller.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/items/items.controller.ts b/src/items/items.controller.ts index 174088a..5512097 100644 --- a/src/items/items.controller.ts +++ b/src/items/items.controller.ts @@ -14,7 +14,7 @@ import { UnequipItemDto, } from './dto/item-changeStatus.dto'; import { ApiTags } from '@nestjs/swagger'; -import { ApiItems } from './items.swagger'; +//import { ApiItems } from './items.swagger'; @ApiTags('items') @Controller('items') // '/items'경로 요청 처리 @@ -23,7 +23,7 @@ export class ItemsController { // GET /items 요청 처리 @Get() - @ApiItems.getAllItems() + //@ApiItems.getAllItems() async getAllItems() { return await this.itemsService.getAllItems(); //service에서 아이템 목록을 받아서, 반환(return) } @@ -31,14 +31,14 @@ export class ItemsController { // POST /items/buy 요청 처리 @Post('buy') @HttpCode(204) - @ApiItems.buyItem() + //@ApiItems.buyItem() async buyItem(@Body() buyItemDto: BuyItemDto): Promise { await this.itemsService.buyItem(buyItemDto); } // GET /items/user/:userId 요청 처리 @Get('users/:userId') - @ApiItems.getUserItems() + //@ApiItems.getUserItems() async getUserItems(@Param('userId') userId: number) { return await this.itemsService.getUserItems(userId); } @@ -46,7 +46,7 @@ export class ItemsController { // POST /items/equip 요청 처리 @Post('equip') @HttpCode(204) - @ApiItems.equipItem() + //@ApiItems.equipItem() async equipItem(@Body() equipItemDto: EquipItemDto) { await this.itemsService.equipItem(equipItemDto); } @@ -54,7 +54,7 @@ export class ItemsController { // POST /items/unequip 요청 처리 @Post('unequip') @HttpCode(204) - @ApiItems.unequipItem() + //@ApiItems.unequipItem() async unequipItem(@Body() unequipItemDto: UnequipItemDto) { await this.itemsService.unequipItem(unequipItemDto); } @@ -62,7 +62,7 @@ export class ItemsController { // DELETE /items/:userId/:itemId 요청 처리 @Delete('users/:userId/:itemId') @HttpCode(204) - @ApiItems.deleteUserItem() + //@ApiItems.deleteUserItem() async deleteUserItem( @Param('userId') userId: number, @Param('itemId') itemId: number, From 6f95c77add85f5d94b56ff29bf4a542843e0ed82 Mon Sep 17 00:00:00 2001 From: dg1418 Date: Thu, 6 Feb 2025 15:36:27 +0900 Subject: [PATCH 2/2] =?UTF-8?q?bugfix/#103/=EC=95=84=EC=9D=B4=ED=85=9C=20?= =?UTF-8?q?=EC=8A=A4=EC=9B=A8=EA=B1=B0=20=EC=9D=BC=EB=8B=A8=20=EB=B3=B5?= =?UTF-8?q?=EB=B6=99=EC=9C=BC=EB=A1=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/items/items.controller.ts | 14 +-- src/items/items.swagger.ts | 197 ++++++++++++++++++++++++++++++++++ 2 files changed, 204 insertions(+), 7 deletions(-) diff --git a/src/items/items.controller.ts b/src/items/items.controller.ts index 5512097..174088a 100644 --- a/src/items/items.controller.ts +++ b/src/items/items.controller.ts @@ -14,7 +14,7 @@ import { UnequipItemDto, } from './dto/item-changeStatus.dto'; import { ApiTags } from '@nestjs/swagger'; -//import { ApiItems } from './items.swagger'; +import { ApiItems } from './items.swagger'; @ApiTags('items') @Controller('items') // '/items'경로 요청 처리 @@ -23,7 +23,7 @@ export class ItemsController { // GET /items 요청 처리 @Get() - //@ApiItems.getAllItems() + @ApiItems.getAllItems() async getAllItems() { return await this.itemsService.getAllItems(); //service에서 아이템 목록을 받아서, 반환(return) } @@ -31,14 +31,14 @@ export class ItemsController { // POST /items/buy 요청 처리 @Post('buy') @HttpCode(204) - //@ApiItems.buyItem() + @ApiItems.buyItem() async buyItem(@Body() buyItemDto: BuyItemDto): Promise { await this.itemsService.buyItem(buyItemDto); } // GET /items/user/:userId 요청 처리 @Get('users/:userId') - //@ApiItems.getUserItems() + @ApiItems.getUserItems() async getUserItems(@Param('userId') userId: number) { return await this.itemsService.getUserItems(userId); } @@ -46,7 +46,7 @@ export class ItemsController { // POST /items/equip 요청 처리 @Post('equip') @HttpCode(204) - //@ApiItems.equipItem() + @ApiItems.equipItem() async equipItem(@Body() equipItemDto: EquipItemDto) { await this.itemsService.equipItem(equipItemDto); } @@ -54,7 +54,7 @@ export class ItemsController { // POST /items/unequip 요청 처리 @Post('unequip') @HttpCode(204) - //@ApiItems.unequipItem() + @ApiItems.unequipItem() async unequipItem(@Body() unequipItemDto: UnequipItemDto) { await this.itemsService.unequipItem(unequipItemDto); } @@ -62,7 +62,7 @@ export class ItemsController { // DELETE /items/:userId/:itemId 요청 처리 @Delete('users/:userId/:itemId') @HttpCode(204) - //@ApiItems.deleteUserItem() + @ApiItems.deleteUserItem() async deleteUserItem( @Param('userId') userId: number, @Param('itemId') itemId: number, diff --git a/src/items/items.swagger.ts b/src/items/items.swagger.ts index e69de29..38bedf0 100644 --- a/src/items/items.swagger.ts +++ b/src/items/items.swagger.ts @@ -0,0 +1,197 @@ +import { applyDecorators } from '@nestjs/common'; +import { ApiOperation, ApiResponse, ApiBody } from '@nestjs/swagger'; +import { + BuyItemDto, + EquipItemDto, + UnequipItemDto, +} from './dto/item-changeStatus.dto'; + +export const ApiItems = { + getAllItems: () => { + return applyDecorators( + ApiOperation({ + summary: '모든 items 조회', + description: '존재하는 모든 아이템을 조회합니다.', + }), + ApiResponse({ + status: 200, + description: '모든 items 성공적으로 조회됨', + content: { + JSON: { + example: { + id: 2, + name: 'blue-hat', + cost: 2000, + image: '2', + createdAt: '2024-11-05T10:30:15.000Z', + updatedAt: '2024-11-05T10:40:15.000Z', + }, + }, + }, + }), + ); + }, + buyItem: () => { + return applyDecorators( + ApiOperation({ + summary: '특정 user의 특정 item 구매하기', + description: '특정 user가 특정 item을 구매합니다.', + }), + ApiBody({ + description: 'userId와 itemId를 포함한 요청 바디', + type: BuyItemDto, + }), + ApiResponse({ + status: 204, + description: 'user가 item을 성공적으로 구매함', + }), + ApiResponse({ + status: 400, + description: '유효하지 않은 요청 값 (userId 또는 itemId 오류)', + content: { + JSON: { + example: { + statusCode: 400, + message: 'Invalid userId or itemId provided', + error: 'Bad request', + }, + }, + }, + }), + ); + }, + + equipItem: () => { + return applyDecorators( + ApiOperation({ + summary: '특정 user가 특정 item 장착', + description: '특정 user가 소유한 item을 장착', + }), + ApiBody({ + description: 'userId와 itemId를 포함한 요청 바디', + type: EquipItemDto, + }), + ApiResponse({ + status: 204, + description: 'item 장착 성공', + }), + ApiResponse({ + status: 400, + description: '유효하지 않은 요청 값 (userId 또는 itemId 오류)', + content: { + JSON: { + example: { + statusCode: 400, + message: 'Invalid userId or itemId provided', + error: 'Bad request', + }, + }, + }, + }), + ); + }, + + unequipItem: () => { + return applyDecorators( + ApiOperation({ + summary: '특정 user가 특정 item 해제', + description: '특정 user가 장착한 item을 해제한다', + }), + ApiBody({ + description: 'userId와 itemId를 포함한 요청 바디', + type: UnequipItemDto, + }), + ApiResponse({ + status: 204, + description: 'item 해제 성공', + }), + ApiResponse({ + status: 400, + description: '유효하지 않은 요청 값 (userId 또는 itemId 오류)', + content: { + JSON: { + example: { + statusCode: 400, + message: 'Invalid userId or itemId provided', + error: 'Bad request', + }, + }, + }, + }), + ); + }, + + deleteUserItem: () => { + return applyDecorators( + ApiOperation({ + summary: '특정 user의 특정 item 삭제', + description: '특정 user의 특정 item을 삭제한다', + }), + ApiResponse({ + status: 204, + description: 'user의 item 삭제 성공', + }), + ApiResponse({ + status: 400, + description: '유효하지 않은 요청 값 (userId 또는 itemId 오류)', + content: { + JSON: { + example: { + statusCode: 400, + message: 'Invalid userId or itemId provided', + error: 'Bad request', + }, + }, + }, + }), + ); + }, + + getUserItems: () => { + return applyDecorators( + ApiOperation({ + summary: '특정 user의 items 조회', + description: '특정 user가 소유한 모든 items를 조회한다', + }), + ApiResponse({ + status: 200, + description: 'user의 모든 items가 성공적으로 조회됨', + content: { + JSON: { + example: [ + { + id: 2, + itemId: 3, + userId: 1, + isEquipped: false, + createdAt: '2024-11-05T10:30:15.000Z', + updatedAt: '2024-11-05T10:40:15.000Z', + }, + { + id: 3, + itemId: 5, + userId: 1, + isEquipped: true, + createdAt: '2024-11-05T10:40:15.000Z', + updatedAt: '2024-11-05T10:40:15.000Z', + }, + ], + }, + }, + }), + ApiResponse({ + status: 404, + description: '해당 user를 찾을 수 없음', + content: { + JSON: { + example: { + statusCode: 404, + message: 'User not found', + error: 'Not Found', + }, + }, + }, + }), + ); + }, +};