From cb924ccf70caba2c4889f76cbb3fda81a4088ea9 Mon Sep 17 00:00:00 2001 From: KimSoo Date: Wed, 22 Feb 2023 13:36:12 +0900 Subject: [PATCH] =?UTF-8?q?Feature(hyunsoo/chat):=20=EC=B1=84=ED=8C=85?= =?UTF-8?q?=EB=B0=A9=20=EC=B4=88=EB=8C=80=20=EA=B1=B0=EC=A0=88=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84=20#92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/chats/chats-controller.service.ts | 18 +++++++ main-project/src/chats/chats.controller.ts | 22 +++++++- .../swagger/accept-invitation.decorator.ts | 2 +- .../swagger/rejected-invitation.decorator.ts | 50 +++++++++++++++++++ .../swagger/send-friend-request.decorator.ts | 2 +- 5 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 main-project/src/chats/swagger/rejected-invitation.decorator.ts diff --git a/main-project/src/chats/chats-controller.service.ts b/main-project/src/chats/chats-controller.service.ts index e46fd92b..807c6aae 100644 --- a/main-project/src/chats/chats-controller.service.ts +++ b/main-project/src/chats/chats-controller.service.ts @@ -402,4 +402,22 @@ export class ChatsControllerService { throw new InternalServerErrorException(`알림 삭제에 실패했습니다.`); } } + + async rejecteInvitation( + manager: EntityManager, + userNo: number, + chatRoomNo: number, + { senderNo, type }: AcceptInvitationDto, + ): Promise { + const noticeNo: number = await this.checkChatNotice( + userNo, + senderNo, + chatRoomNo, + type, + ); + if (!noticeNo) { + throw new NotFoundException(`초대 정보가 존재하지 않습니다.`); + } + await this.deleteNotice(manager, noticeNo); + } } diff --git a/main-project/src/chats/chats.controller.ts b/main-project/src/chats/chats.controller.ts index fc6ee028..23d11210 100644 --- a/main-project/src/chats/chats.controller.ts +++ b/main-project/src/chats/chats.controller.ts @@ -19,7 +19,7 @@ import { APIResponse } from 'src/common/interface/interface'; import { TransactionInterceptor } from 'src/common/interceptor/transaction-interceptor'; import { TransactionDecorator } from 'src/common/decorator/transaction-manager.decorator'; import { EntityManager } from 'typeorm'; -import { UseGuards } from '@nestjs/common/decorators'; +import { Delete, UseGuards } from '@nestjs/common/decorators'; import { JwtAuthGuard } from 'src/common/guards/jwt-auth.guard'; import { GetUser } from 'src/common/decorator/get-user.decorator'; import { ApiGetPreviousChatLog } from './swagger/get-previous-chat-log.decorator'; @@ -28,6 +28,7 @@ import { ApiInviteUser } from './swagger/invite-user.decorator'; import { ApiAcceptInvitation } from './swagger/accept-invitation.decorator'; import { APiUploadFile } from './swagger/upload-file.decorator'; import { ApiCreateChatRoom } from './swagger/create-chat-room.decorator'; +import { ApiRejecteInvitation } from './swagger/rejected-invitation.decorator'; @Controller('chats') @ApiTags('채팅 APi') @@ -130,6 +131,25 @@ export class ChatsController { }; } + @Delete('/:chatRoomNo/invitation') + @ApiRejecteInvitation() + @UseGuards(JwtAuthGuard) + @UseInterceptors(TransactionInterceptor) + async rejecteInvitation( + @GetUser() userNo: number, + @TransactionDecorator() manager: EntityManager, + @Param('chatRoomNo', ParseIntPipe) chatRoomNo: number, + @Body() invitation: AcceptInvitationDto, + ): Promise { + await this.chatControllerService.rejecteInvitation( + manager, + userNo, + chatRoomNo, + invitation, + ); + return { msg: '채팅방 초대 거절 성공' }; + } + @Post('/:chatRoomNo/files') @APiUploadFile() @UseInterceptors(FilesInterceptor('files', 10)) // 10은 최대파일개수 diff --git a/main-project/src/chats/swagger/accept-invitation.decorator.ts b/main-project/src/chats/swagger/accept-invitation.decorator.ts index fe9d18ba..1e24fc76 100644 --- a/main-project/src/chats/swagger/accept-invitation.decorator.ts +++ b/main-project/src/chats/swagger/accept-invitation.decorator.ts @@ -13,7 +13,7 @@ export function ApiAcceptInvitation() { return applyDecorators( ApiOperation({ summary: '채팅방 초대 수락 ', - description: '유저 번호, 타입, 채팅방 번호를 통해 초대 수락', + description: '유저 번호, notice타입, 채팅방 번호를 통해 초대 수락', }), ApiBearerAuth(), ApiBody({ diff --git a/main-project/src/chats/swagger/rejected-invitation.decorator.ts b/main-project/src/chats/swagger/rejected-invitation.decorator.ts new file mode 100644 index 00000000..ddebb703 --- /dev/null +++ b/main-project/src/chats/swagger/rejected-invitation.decorator.ts @@ -0,0 +1,50 @@ +import { applyDecorators } from '@nestjs/common'; +import { + ApiBearerAuth, + ApiBody, + ApiNotFoundResponse, + ApiOkResponse, + ApiOperation, +} from '@nestjs/swagger'; +import { SwaggerApiResponse } from 'src/common/swagger/api-response.swagger'; + +export function ApiRejecteInvitation() { + return applyDecorators( + ApiOperation({ + summary: '채팅방 초대 거절', + description: '유저 번호, notice타입, 채팅방 번호를 통해 초대 거절', + }), + ApiBearerAuth(), + ApiBody({ + schema: { + type: 'object', + properties: { + senderNo: { + type: 'number', + minLength: 1, + example: 9, + nullable: false, + description: '초대한 유저의 userNo', + }, + type: { + type: 'number', + maxLength: 1, + nullable: false, + description: '알람 typeNo', + }, + }, + }, + }), + ApiOkResponse( + SwaggerApiResponse.success('채팅방 초대 거절', '채팅방 초대 거절 성공'), + ), + ApiNotFoundResponse( + SwaggerApiResponse.exception([ + { + name: 'noticeNotFound', + example: { msg: '초대 정보가 존재하지 않습니다.' }, + }, + ]), + ), + ); +} diff --git a/main-project/src/friends/swagger/send-friend-request.decorator.ts b/main-project/src/friends/swagger/send-friend-request.decorator.ts index 2c17e205..af25ce6c 100644 --- a/main-project/src/friends/swagger/send-friend-request.decorator.ts +++ b/main-project/src/friends/swagger/send-friend-request.decorator.ts @@ -33,7 +33,7 @@ export function ApiSendFriendRequest() { }, { name: 'invalidRecipient', - exampel: { msg: '잘못된 요청입니다.' }, + example: { msg: '잘못된 요청입니다.' }, }, ]), ),