From 9d9e47f120011f85af96ded794eb4e5049e05b11 Mon Sep 17 00:00:00 2001 From: Eunjin3395 Date: Fri, 6 Sep 2024 15:28:57 +0900 Subject: [PATCH 1/9] =?UTF-8?q?:recycle:=20[Refactor]=20=EC=B1=84=ED=8C=85?= =?UTF-8?q?=EB=B0=A9=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20API=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=EC=97=90=20blind=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/gamegoo/dto/chat/ChatResponse.java | 5 +++-- src/main/java/com/gamegoo/service/chat/ChatQueryService.java | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gamegoo/dto/chat/ChatResponse.java b/src/main/java/com/gamegoo/dto/chat/ChatResponse.java index 72ad64f8..ee682b61 100644 --- a/src/main/java/com/gamegoo/dto/chat/ChatResponse.java +++ b/src/main/java/com/gamegoo/dto/chat/ChatResponse.java @@ -21,8 +21,9 @@ public static class ChatroomViewDTO { Long targetMemberId; Integer targetMemberImg; String targetMemberName; - boolean friend; - boolean blocked; + Boolean friend; + Boolean blocked; + Boolean blind; Long friendRequestMemberId; String lastMsg; String lastMsgAt; diff --git a/src/main/java/com/gamegoo/service/chat/ChatQueryService.java b/src/main/java/com/gamegoo/service/chat/ChatQueryService.java index c0138f12..10498921 100644 --- a/src/main/java/com/gamegoo/service/chat/ChatQueryService.java +++ b/src/main/java/com/gamegoo/service/chat/ChatQueryService.java @@ -83,6 +83,7 @@ public List getChatroomList(Long memberId) { .targetMemberName(targetMember.getGameName()) .friend(friendService.isFriend(member, targetMember)) .blocked(MemberUtils.isBlocked(targetMember, member)) + .blind(targetMember.getBlind()) .friendRequestMemberId( friendService.getFriendRequestMemberId(member, targetMember)) .lastMsg(lastChat.isPresent() ? lastChat.get().getContents() : null) From 081d6e3098e3136cd0000042aec15abd064ef5e6 Mon Sep 17 00:00:00 2001 From: Eunjin3395 Date: Fri, 6 Sep 2024 15:29:22 +0900 Subject: [PATCH 2/9] =?UTF-8?q?:recycle:=20[Refactor]=20ChatroomEnterDTO?= =?UTF-8?q?=EC=97=90=20blind=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/gamegoo/dto/chat/ChatResponse.java | 2 ++ src/main/java/com/gamegoo/service/chat/ChatCommandService.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/main/java/com/gamegoo/dto/chat/ChatResponse.java b/src/main/java/com/gamegoo/dto/chat/ChatResponse.java index ee682b61..f246fd01 100644 --- a/src/main/java/com/gamegoo/dto/chat/ChatResponse.java +++ b/src/main/java/com/gamegoo/dto/chat/ChatResponse.java @@ -41,6 +41,7 @@ public static class ChatroomViewDTO { "memberProfileImg", "friend", "blocked", + "blind", "friendRequestMemberId", "system", "chatMessageList" @@ -53,6 +54,7 @@ public static class ChatroomEnterDTO { Integer memberProfileImg; Boolean friend; Boolean blocked; + Boolean blind; Long friendRequestMemberId; SystemFlagDTO system; ChatMessageListDTO chatMessageList; diff --git a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java index e3f68493..0fb8f184 100644 --- a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java +++ b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java @@ -97,6 +97,7 @@ public ChatResponse.ChatroomEnterDTO startChatroomByMemberId(Long memberId, .memberProfileImg(targetMember.getProfileImage()) .friend(friendService.isFriend(member, targetMember)) .blocked(false) + .blind(targetMember.getBlind()) .friendRequestMemberId( friendService.getFriendRequestMemberId(member, targetMember)) .system(null) @@ -157,6 +158,7 @@ public ChatResponse.ChatroomEnterDTO startChatroomByBoardId(Long memberId, Long .memberProfileImg(targetMember.getProfileImage()) .friend(friendService.isFriend(member, targetMember)) .blocked(false) + .blind(targetMember.getBlind()) .friendRequestMemberId( friendService.getFriendRequestMemberId(member, targetMember)) .system(systemFlagDTO) @@ -595,6 +597,7 @@ private ChatResponse.ChatroomEnterDTO enterExistingChatroom(Member member, Membe .memberProfileImg(targetMember.getProfileImage()) .friend(friendService.isFriend(member, targetMember)) .blocked(MemberUtils.isBlocked(targetMember, member)) + .blind(targetMember.getBlind()) .friendRequestMemberId(friendService.getFriendRequestMemberId(member, targetMember)) .system(systemFlagDTO) .chatMessageList(chatMessageListDTO) From 69746f9d879934ff152ba3b7c9a580d9d5513532 Mon Sep 17 00:00:00 2001 From: Eunjin3395 Date: Sun, 8 Sep 2024 16:01:40 +0900 Subject: [PATCH 3/9] =?UTF-8?q?:recycle:=20[Refactor]=20=EC=83=88=20?= =?UTF-8?q?=EC=B1=84=ED=8C=85=EB=B0=A9=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20?= =?UTF-8?q?chatMessageList=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/chat/ChatCommandService.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java index 0fb8f184..1f3994c3 100644 --- a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java +++ b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java @@ -24,6 +24,7 @@ import com.gamegoo.service.socket.SocketService; import com.gamegoo.util.MemberUtils; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.Optional; import java.util.UUID; import lombok.RequiredArgsConstructor; @@ -90,6 +91,15 @@ public ChatResponse.ChatroomEnterDTO startChatroomByMemberId(Long memberId, // 새 채팅방 생성 Chatroom newChatroom = createNewChatroom(member, targetMember, null); + + // 응답 생성 + ChatResponse.ChatMessageListDTO chatMessageListDTO = ChatResponse.ChatMessageListDTO.builder() + .chatMessageDtoList(new ArrayList<>()) + .list_size(0) + .has_next(false) + .next_cursor(null) + .build(); + return ChatroomEnterDTO.builder() .uuid(newChatroom.getUuid()) .memberId(targetMember.getId()) @@ -101,7 +111,7 @@ public ChatResponse.ChatroomEnterDTO startChatroomByMemberId(Long memberId, .friendRequestMemberId( friendService.getFriendRequestMemberId(member, targetMember)) .system(null) - .chatMessageList(null) + .chatMessageList(chatMessageListDTO) .build(); }); } @@ -145,12 +155,22 @@ public ChatResponse.ChatroomEnterDTO startChatroomByBoardId(Long memberId, Long // 새 채팅방 생성 Chatroom newChatroom = createNewChatroom(member, targetMember, null); + + // 응답 생성 // 시스템 메시지 기능을 위한 SystemFlagDTO 생성 ChatResponse.SystemFlagDTO systemFlagDTO = ChatResponse.SystemFlagDTO.builder() .flag(1) .boardId(boardId) .build(); + // chatMessageListDTO 생성 + ChatResponse.ChatMessageListDTO chatMessageListDTO = ChatResponse.ChatMessageListDTO.builder() + .chatMessageDtoList(new ArrayList<>()) + .list_size(0) + .has_next(false) + .next_cursor(null) + .build(); + return ChatroomEnterDTO.builder() .uuid(newChatroom.getUuid()) .memberId(targetMember.getId()) From 7497415acaef0ac22905674a8f878ac7175d3f61 Mon Sep 17 00:00:00 2001 From: Eunjin3395 Date: Sun, 8 Sep 2024 19:02:27 +0900 Subject: [PATCH 4/9] =?UTF-8?q?:recycle:=20[Refactor]=20memberId=EB=A5=BC?= =?UTF-8?q?=20=ED=86=B5=ED=95=9C=20=EC=B1=84=ED=8C=85=EB=B0=A9=20=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81=20=EB=B0=8F=20=EC=83=81=EB=8C=80=EB=B0=A9=20?= =?UTF-8?q?=ED=83=88=ED=87=B4=20=EC=97=AC=EB=B6=80=20=EA=B3=A0=EB=A0=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiPayload/code/status/ErrorStatus.java | 74 +++++------ .../com/gamegoo/converter/ChatConverter.java | 3 +- .../service/chat/ChatCommandService.java | 115 ++++++++++++------ 3 files changed, 119 insertions(+), 73 deletions(-) diff --git a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java index f8a3b986..2c56cd00 100644 --- a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java @@ -48,9 +48,9 @@ public enum ErrorStatus implements BaseErrorCode { // 매칭 관련 에러 MATCHING_STATUS_BAD_REQUEST(HttpStatus.BAD_REQUEST, "MATCH400", - "status는 SUCCESS, FAIL 둘 중 하나로만 변경이 가능합니다."), + "status는 SUCCESS, FAIL 둘 중 하나로만 변경이 가능합니다."), MATHCING_TYPE_BAD_REQUEST(HttpStatus.BAD_REQUEST, "MATCH401", - "matchingType은 BASIC, PRECISE 둘 중 하나여야합니다."), + "matchingType은 BASIC, PRECISE 둘 중 하나여야합니다."), MATCHING_NOT_FOUND(HttpStatus.NOT_FOUND, "MATCH402", "해당 사용자의 매칭 정보가 없습니다."), MATCHING_FAILED_BY_BLOCK(HttpStatus.BAD_REQUEST, "MATCH403", "차단된 사용자끼리의 매칭은 불가능합니다."), @@ -58,14 +58,14 @@ public enum ErrorStatus implements BaseErrorCode { // Riot 관련 에러 RIOT_NOT_FOUND(HttpStatus.NOT_FOUND, "RIOT404", "해당 Riot 계정이 존재하지 않습니다."), RIOT_MATCH_NOT_FOUND(HttpStatus.NOT_FOUND, "RIOTMATCH404", - "해당 Riot 계정의 매칭을 불러오는 도중 에러가 발생했습니다. 최근 100판 이내 이벤트 매칭 제외, 일반 매칭(일반게임,랭크게임,칼바람)을 많이 한 계정으로 다시 시도하세요."), + "해당 Riot 계정의 매칭을 불러오는 도중 에러가 발생했습니다. 최근 100판 이내 이벤트 매칭 제외, 일반 매칭(일반게임,랭크게임,칼바람)을 많이 한 계정으로 다시 시도하세요."), RIOT_PREFER_CHAMPION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "RIOTCHAMPION500", - "선호 챔피언을 연동하는 도중 에러가 발생했습니다"), + "선호 챔피언을 연동하는 도중 에러가 발생했습니다"), CHAMPION_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAMPION404", "해당 챔피언이 존재하지 않습니다."), RIOT_MEMBER_CONFLICT(HttpStatus.CONFLICT, "RIOT409", "해당 이메일 계정은 이미 다른 RIOT 계정과 연동되었습니다."), RIOT_ACCOUNT_CONFLICT(HttpStatus.CONFLICT, "RIOT409", "해당 RIOT 계정은 이미 다른 이메일과 연동되어있습니다."), RIOT_INSUFFICIENT_MATCHES(HttpStatus.NOT_FOUND, "RIOT404", - "해당 RIOT 계정은 최근 100판 이내에 솔로랭크, 자유랭크, 일반게임, 칼바람을 플레이한 적이 없기 때문에 선호하는 챔피언 3명을 정할 수 없습니다."), + "해당 RIOT 계정은 최근 100판 이내에 솔로랭크, 자유랭크, 일반게임, 칼바람을 플레이한 적이 없기 때문에 선호하는 챔피언 3명을 정할 수 없습니다."), RIOT_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "RIOT500", "RIOT API 연동 중 에러가 발생했습니다."), // 차단 관련 에러 @@ -80,7 +80,7 @@ public enum ErrorStatus implements BaseErrorCode { // 게시판 글 작성 관련 에러 BOARD_GAME_STYLE_BAD_REQUEST(HttpStatus.BAD_REQUEST, "BOARD400", - "게임 스타일 선택 개수(최대 3개)를 초과했습니다."), + "게임 스타일 선택 개수(최대 3개)를 초과했습니다."), GAME_MODE_INVALID(HttpStatus.BAD_REQUEST, "BOARD401", "게임모드 값은 1~4만 가능합니다."), MAIN_POSITION_INVALID(HttpStatus.BAD_REQUEST, "BOARD401", "주포지션 값은 0~5만 가능합니다."), SUB_POSITION_INVALID(HttpStatus.BAD_REQUEST, "BOARD401", "부포지션 값은 0~5만 가능합니다."), @@ -96,11 +96,11 @@ public enum ErrorStatus implements BaseErrorCode { // 매너평가 관련 에러 MANNER_TARGET_MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER401", "매너 평가 대상 회원을 찾을 수 없습니다."), BAD_MANNER_TARGET_MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER401", - "비매너 평가 대상 회원을 찾을 수 없습니다."), + "비매너 평가 대상 회원을 찾을 수 없습니다."), MANNER_UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "MANNER401", "매너평가 작성자만 수정 가능합니다."), MANNER_KEYWORD_TYPE_INVALID(HttpStatus.BAD_REQUEST, "MANNER401", "매너 키워드 유형은 1~6만 가능합니다."), BAD_MANNER_KEYWORD_TYPE_INVALID(HttpStatus.BAD_REQUEST, "MANNER401", - "비매너 키워드 유형은 7~12만 가능합니다."), + "비매너 키워드 유형은 7~12만 가능합니다."), MANNER_KEYWORD_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER404", "해당 매너 키워드를 찾을 수 없습니다."), MANNER_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER404", "해당 매너평가를 찾을 수 없습니다."), BAD_MANNER_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER404", "해당 비매너평가를 찾을 수 없습니다."), @@ -109,34 +109,38 @@ public enum ErrorStatus implements BaseErrorCode { MANNER_INSERT_BAD_REQUEST(HttpStatus.BAD_REQUEST, "MANNER410", "잘못된 매너평가 등록 요청입니다."), // 채팅 관련 에러 - CHAT_TARGET_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAT401", "채팅 대상 회원을 찾을 수 없습니다."), + CHAT_START_FAILED_CHAT_TARGET_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAT401", + "채팅 대상 회원을 찾을 수 없습니다."), CHATROOM_NOT_EXIST(HttpStatus.NOT_FOUND, "CHAT402", "채팅방을 찾을 수 없습니다."), CHATROOM_ACCESS_DENIED(HttpStatus.BAD_REQUEST, "CHAT403", "접근할 수 없는 채팅방 입니다."), CHAT_MESSAGE_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAT404", "해당 메시지를 찾을 수 없습니다"), - CHAT_TARGET_IS_BLOCKED_CHAT_START_FAILED(HttpStatus.FORBIDDEN, "CHAT405", - "채팅 상대 회원을 차단한 상태입니다. 채팅 시작이 불가능합니다."), - BLOCKED_BY_CHAT_TARGET_CHAT_START_FAILED(HttpStatus.FORBIDDEN, "CHAT406", - "채팅 상대 회원이 나를 차단했습니다. 채팅 시작이 불가능합니다."), - CHAT_TARGET_IS_BLOCKED_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT407", - "채팅 상대 회원을 차단한 상태입니다. 채팅 메시지 전송이 불가능합니다."), - BLOCKED_BY_CHAT_TARGET_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT408", - "채팅 상대 회원이 나를 차단했습니다. 채팅 메시지 전송이 불가능합니다."), - CHAT_TARGET_MEMBER_ID_INVALID(HttpStatus.BAD_REQUEST, "CHAT409", "채팅방 시작 대상 회원 id 값이 잘못되었습니다."), + CHAT_START_FAILED_CHAT_TARGET_IS_BLOCKED(HttpStatus.FORBIDDEN, "CHAT405", + "채팅 상대 회원을 차단한 상태입니다. 채팅 시작이 불가능합니다."), + CHAT_START_FAILED_BLOCKED_BY_CHAT_TARGET(HttpStatus.FORBIDDEN, "CHAT406", + "채팅 상대 회원이 나를 차단했습니다. 채팅 시작이 불가능합니다."), + CHAT_START_FAILED_TARGET_USER_DEACTIVATED(HttpStatus.NOT_FOUND, "CHAT407", + "채팅 상대 회원이 탈퇴했습니다. 채팅 시작이 불가능합니다."), + CHAT_TARGET_IS_BLOCKED_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT408", + "채팅 상대 회원을 차단한 상태입니다. 채팅 메시지 전송이 불가능합니다."), + BLOCKED_BY_CHAT_TARGET_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT409", + "채팅 상대 회원이 나를 차단했습니다. 채팅 메시지 전송이 불가능합니다."), + CHAT_TARGET_MEMBER_ID_INVALID(HttpStatus.BAD_REQUEST, "CHAT410", "채팅방 시작 대상 회원 id 값이 잘못되었습니다."), + // 친구 관련 에러 FRIEND_BAD_REQUEST(HttpStatus.BAD_REQUEST, "FRIEND401", "잘못된 친구 요청입니다."), FRIEND_TARGET_IS_BLOCKED(HttpStatus.BAD_REQUEST, "FRIEND402", - "내가 차단한 회원입니다. 친구 요청을 보낼 수 없습니다."), + "내가 차단한 회원입니다. 친구 요청을 보낼 수 없습니다."), BLOCKED_BY_FRIEND_TARGET(HttpStatus.BAD_REQUEST, "FRIEND403", - "나를 차단한 회원입니다. 친구 요청을 보낼 수 없습니다."), + "나를 차단한 회원입니다. 친구 요청을 보낼 수 없습니다."), MY_PENDING_FRIEND_REQUEST_EXIST(HttpStatus.BAD_REQUEST, "FRIEND404", - "해당 회원에게 보낸 수락 대기 중인 친구 요청이 존재합니다. 친구 요청을 보낼 수 없습니다."), + "해당 회원에게 보낸 수락 대기 중인 친구 요청이 존재합니다. 친구 요청을 보낼 수 없습니다."), TARGET_PENDING_FRIEND_REQUEST_EXIST(HttpStatus.BAD_REQUEST, "FRIEND405", - "해당 회원이 나에게 보낸 친구 요청이 수락 대기 중 입니다. 해당 요청을 수락 해주세요."), + "해당 회원이 나에게 보낸 친구 요청이 수락 대기 중 입니다. 해당 요청을 수락 해주세요."), ALREADY_FRIEND(HttpStatus.BAD_REQUEST, "FRIEND406", - "두 회원은 이미 친구 관계 입니다. 친구 요청을 보낼 수 없습니다."), + "두 회원은 이미 친구 관계 입니다. 친구 요청을 보낼 수 없습니다."), PENDING_FRIEND_REQUEST_NOT_EXIST(HttpStatus.NOT_FOUND, "FRIEND407", - "취소/수락/거절할 친구 요청이 존재하지 않습니다."), + "취소/수락/거절할 친구 요청이 존재하지 않습니다."), MEMBERS_NOT_FRIEND(HttpStatus.BAD_REQUEST, "FRIEND408", "두 회원은 친구 관계가 아닙니다."), ALREADY_STAR_FRIEND(HttpStatus.BAD_REQUEST, "FRIEND409", "이미 즐겨찾기 되어 있는 친구입니다."), NOT_STAR_FRIEND(HttpStatus.BAD_REQUEST, "FRIEND410", "즐겨찾기 되어 있는 친구가 아닙니다."), @@ -145,12 +149,12 @@ public enum ErrorStatus implements BaseErrorCode { NOTIFICATION_TYPE_NOT_FOUND(HttpStatus.NOT_FOUND, "NOTI401", "해당 알림 타입 데이터를 찾을 수 없습니다."), NOTIFICATION_METHOD_BAD_REQUEST(HttpStatus.BAD_REQUEST, "NOTI402", "알림 생성 메소드 호출이 잘못되었습니다."), INVALID_NOTIFICATION_TYPE(HttpStatus.BAD_REQUEST, "NOTI403", - "잘못된 알림 조회 타입입니다. general과 friend 중 하나를 입력하세요."), + "잘못된 알림 조회 타입입니다. general과 friend 중 하나를 입력하세요."), NOTIFICATION_NOT_FOUND(HttpStatus.NOT_FOUND, "NOTI404", "해당 알림 내역을 찾을 수 없습니다."), // SOCKET 서버 API 호출 에러 SOCKET_API_RESPONSE_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "SOCKET501", - "socket서버 api 요청에 실패했습니다."); + "socket서버 api 요청에 실패했습니다."); private final HttpStatus httpStatus; private final String code; @@ -159,19 +163,19 @@ public enum ErrorStatus implements BaseErrorCode { @Override public ErrorReasonDTO getReason() { return ErrorReasonDTO.builder() - .message(message) - .code(code) - .isSuccess(false) - .build(); + .message(message) + .code(code) + .isSuccess(false) + .build(); } @Override public ErrorReasonDTO getReasonHttpStatus() { return ErrorReasonDTO.builder() - .message(message) - .code(code) - .isSuccess(false) - .httpStatus(httpStatus) - .build(); + .message(message) + .code(code) + .isSuccess(false) + .httpStatus(httpStatus) + .build(); } } diff --git a/src/main/java/com/gamegoo/converter/ChatConverter.java b/src/main/java/com/gamegoo/converter/ChatConverter.java index 67398329..16406ed1 100644 --- a/src/main/java/com/gamegoo/converter/ChatConverter.java +++ b/src/main/java/com/gamegoo/converter/ChatConverter.java @@ -44,7 +44,8 @@ public static ChatResponse.ChatMessageDTO toChatMessageDto(Chat chat) { return ChatResponse.ChatMessageDTO.builder() .senderId(chat.getFromMember().getId()) - .senderName(chat.getFromMember().getGameName()) + .senderName( + chat.getFromMember().getBlind() ? "(탈퇴한 사용자)" : chat.getFromMember().getGameName()) .senderProfileImg(chat.getFromMember().getProfileImage()) .message(chat.getContents()) .createdAt(DatetimeUtil.toKSTString(chat.getCreatedAt())) diff --git a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java index 1f3994c3..ff6e93ac 100644 --- a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java +++ b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java @@ -64,42 +64,31 @@ public ChatResponse.ChatroomEnterDTO startChatroomByMemberId(Long memberId, Long targetMemberId) { // 대상 회원 검증 및 에러 처리 - MemberUtils.validateDifferentMembers(memberId, targetMemberId, - ErrorStatus.CHAT_TARGET_MEMBER_ID_INVALID); + validateDifferentMembers(memberId, targetMemberId); Member member = profileService.findMember(memberId); // 채팅 대상 회원의 존재 여부 검증 - Member targetMember = memberRepository.findById(targetMemberId) - .orElseThrow(() -> new ChatHandler(ErrorStatus.CHAT_TARGET_NOT_FOUND)); - - // 채팅 대상 회원이 탈퇴한 경우 - MemberUtils.checkBlind(targetMember); + Member targetMember = validateAndGetTargetMember(targetMemberId); - // 내가 채팅 대상 회원을 차단한 경우, 기존 채팅방 입장 및 새 채팅방 생성 모두 불가 - MemberUtils.validateBlocked(member, targetMember, - ErrorStatus.CHAT_TARGET_IS_BLOCKED_CHAT_START_FAILED); + // 내가 상대 회원 차단했는지 검증 + validateBlockedTargetMember(member, targetMember); - return chatroomRepository.findChatroomByMemberIds( - member.getId(), targetMember.getId()) - .map(existingChatroom -> enterExistingChatroom(member, targetMember, - existingChatroom, null))// 기존 채팅방 존재하는 경우, 해당 채팅방에 입장 + return chatroomRepository.findChatroomByMemberIds(member.getId(), targetMember.getId()) + .map(existingChatroom -> enterExistingChatroom(member, targetMember, existingChatroom, + null))// 기존 채팅방 존재하는 경우, 해당 채팅방에 입장 .orElseGet(() -> { - // 기존에 채팅방이 존재하지 않는 경우: 상대방의 차단 여부 검증 - MemberUtils.validateBlocked(targetMember, member, - ErrorStatus.BLOCKED_BY_CHAT_TARGET_CHAT_START_FAILED); + // 기존에 채팅방이 존재하지 않는 경우 + // 상대가 나를 차단했는지 검증 + validateBlockedByTargetMember(member, targetMember); + + // 상대가 탈퇴했는지 검증 + validateTargetMemberIsBlind(targetMember, + ErrorStatus.CHAT_START_FAILED_TARGET_USER_DEACTIVATED); // 새 채팅방 생성 Chatroom newChatroom = createNewChatroom(member, targetMember, null); - // 응답 생성 - ChatResponse.ChatMessageListDTO chatMessageListDTO = ChatResponse.ChatMessageListDTO.builder() - .chatMessageDtoList(new ArrayList<>()) - .list_size(0) - .has_next(false) - .next_cursor(null) - .build(); - return ChatroomEnterDTO.builder() .uuid(newChatroom.getUuid()) .memberId(targetMember.getId()) @@ -111,7 +100,7 @@ public ChatResponse.ChatroomEnterDTO startChatroomByMemberId(Long memberId, .friendRequestMemberId( friendService.getFriendRequestMemberId(member, targetMember)) .system(null) - .chatMessageList(chatMessageListDTO) + .chatMessageList(initChatMessageListDTO()) .build(); }); } @@ -131,7 +120,8 @@ public ChatResponse.ChatroomEnterDTO startChatroomByBoardId(Long memberId, Long // 채팅 대상 회원의 존재 여부 검증 Member targetMember = memberRepository.findById(board.getMember().getId()) - .orElseThrow(() -> new ChatHandler(ErrorStatus.CHAT_TARGET_NOT_FOUND)); + .orElseThrow( + () -> new ChatHandler(ErrorStatus.CHAT_START_FAILED_CHAT_TARGET_NOT_FOUND)); // 게시글 작성자가 본인인 경우 MemberUtils.validateDifferentMembers(member.getId(), targetMember.getId(), @@ -142,7 +132,7 @@ public ChatResponse.ChatroomEnterDTO startChatroomByBoardId(Long memberId, Long // 내가 채팅 대상 회원을 차단한 경우, 기존 채팅방 입장 및 새 채팅방 생성 모두 불가 MemberUtils.validateBlocked(member, targetMember, - ErrorStatus.CHAT_TARGET_IS_BLOCKED_CHAT_START_FAILED); + ErrorStatus.CHAT_START_FAILED_CHAT_TARGET_IS_BLOCKED); return chatroomRepository.findChatroomByMemberIds( member.getId(), targetMember.getId()) @@ -151,7 +141,7 @@ public ChatResponse.ChatroomEnterDTO startChatroomByBoardId(Long memberId, Long .orElseGet(() -> { // 기존에 채팅방이 존재하지 않는 경우: 상대방의 차단 여부 검증 MemberUtils.validateBlocked(targetMember, member, - ErrorStatus.BLOCKED_BY_CHAT_TARGET_CHAT_START_FAILED); + ErrorStatus.CHAT_START_FAILED_BLOCKED_BY_CHAT_TARGET); // 새 채팅방 생성 Chatroom newChatroom = createNewChatroom(member, targetMember, null); @@ -209,12 +199,12 @@ public String startChatroomByMatching(Long memberId1, Long memberId2) { // 내가 상대를 차단한 경우 if (MemberUtils.isBlocked(member1, member2)) { - throw new ChatHandler(ErrorStatus.CHAT_TARGET_IS_BLOCKED_CHAT_START_FAILED); + throw new ChatHandler(ErrorStatus.CHAT_START_FAILED_CHAT_TARGET_IS_BLOCKED); } // 상대가 나를 차단한 경우 if (MemberUtils.isBlocked(member2, member1)) { - throw new ChatHandler(ErrorStatus.BLOCKED_BY_CHAT_TARGET_CHAT_START_FAILED); + throw new ChatHandler(ErrorStatus.CHAT_START_FAILED_BLOCKED_BY_CHAT_TARGET); } Chatroom chatroom = chatroomRepository @@ -257,7 +247,7 @@ public ChatResponse.ChatroomEnterDTO enterChatroom(String chatroomUuid, Long mem // 내가 채팅 상대 회원을 차단한 경우 MemberUtils.validateBlocked(member, targetMember, - ErrorStatus.CHAT_TARGET_IS_BLOCKED_CHAT_START_FAILED); + ErrorStatus.CHAT_START_FAILED_CHAT_TARGET_IS_BLOCKED); return enterExistingChatroom(member, targetMember, chatroom, null); } @@ -584,10 +574,14 @@ private ChatResponse.ChatroomEnterDTO enterExistingChatroom(Member member, Membe member.getId(), chatroom.getId()) .orElseThrow(() -> new ChatHandler(ErrorStatus.CHATROOM_ACCESS_DENIED)); - // 상대방이 나를 차단 && 내가 퇴장한 상태 - if (MemberUtils.isBlocked(targetMember, member) - && memberChatroom.getLastJoinDate() == null) { - throw new ChatHandler(ErrorStatus.BLOCKED_BY_CHAT_TARGET_CHAT_START_FAILED); + // 내가 퇴장 상태인 경우 검증 + if (memberChatroom.getLastJoinDate() == null) { + // 상대방이 나를 차단했는지 검증 + validateBlockedByTargetMember(member, targetMember); + + // 상대방이 탈퇴했는지 검증 + validateTargetMemberIsBlind(targetMember, + ErrorStatus.CHAT_START_FAILED_BLOCKED_BY_CHAT_TARGET); } // 최근 메시지 내역 조회 @@ -613,7 +607,7 @@ private ChatResponse.ChatroomEnterDTO enterExistingChatroom(Member member, Membe return ChatroomEnterDTO.builder() .uuid(chatroom.getUuid()) .memberId(targetMember.getId()) - .gameName(targetMember.getGameName()) + .gameName(targetMember.getBlind() ? "(탈퇴한 사용자)" : targetMember.getGameName()) .memberProfileImg(targetMember.getProfileImage()) .friend(friendService.isFriend(member, targetMember)) .blocked(MemberUtils.isBlocked(targetMember, member)) @@ -640,4 +634,51 @@ private ChatResponse.SystemFlagDTO createSystemFlagDTO(MemberChatroom memberChat ? ChatResponse.SystemFlagDTO.builder().flag(1).boardId(boardId).build() : ChatResponse.SystemFlagDTO.builder().flag(2).boardId(boardId).build(); } + + /** + * ChatMessageListDTO 객체를 초기화해 리턴 + * + * @return + */ + private ChatResponse.ChatMessageListDTO initChatMessageListDTO() { + return ChatResponse.ChatMessageListDTO.builder() + .chatMessageDtoList(new ArrayList<>()) + .list_size(0) + .has_next(false) + .next_cursor(null) + .build(); + } + + //--- 검증 메소드 ---// + + private void validateDifferentMembers(Long member1, Long member2) { + if (member1.equals(member2)) { + throw new ChatHandler(ErrorStatus.CHAT_TARGET_MEMBER_ID_INVALID); + } + } + + private Member validateAndGetTargetMember(Long targetMemberId) { + return memberRepository.findById(targetMemberId) + .orElseThrow( + () -> new ChatHandler(ErrorStatus.CHAT_START_FAILED_CHAT_TARGET_NOT_FOUND)); + + } + + private void validateBlockedTargetMember(Member member, Member targetMember) { + if (MemberUtils.isBlocked(member, targetMember)) { + throw new ChatHandler(ErrorStatus.CHAT_START_FAILED_CHAT_TARGET_IS_BLOCKED); + } + } + + private void validateBlockedByTargetMember(Member member, Member targetMember) { + if (MemberUtils.isBlocked(targetMember, member)) { + throw new ChatHandler(ErrorStatus.CHAT_START_FAILED_BLOCKED_BY_CHAT_TARGET); + } + } + + private void validateTargetMemberIsBlind(Member targetMember, ErrorStatus errorStatus) { + if (targetMember.getBlind()) { + throw new ChatHandler(errorStatus); + } + } } From 862312ec6d9befd785ae2291307c7b1e627bf36a Mon Sep 17 00:00:00 2001 From: Eunjin3395 Date: Sun, 8 Sep 2024 20:02:53 +0900 Subject: [PATCH 5/9] =?UTF-8?q?:recycle:=20[Refactor]=20boardId=EB=A5=BC?= =?UTF-8?q?=20=ED=86=B5=ED=95=9C=20=EC=B1=84=ED=8C=85=EB=B0=A9=20=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81=20=EB=B0=8F=20=EC=83=81=EB=8C=80=EB=B0=A9=20?= =?UTF-8?q?=ED=83=88=ED=87=B4=20=EC=97=AC=EB=B6=80=20=EA=B3=A0=EB=A0=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiPayload/code/status/ErrorStatus.java | 4 + .../service/chat/ChatCommandService.java | 106 ++++++++++-------- 2 files changed, 61 insertions(+), 49 deletions(-) diff --git a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java index 2c56cd00..d5609421 100644 --- a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java @@ -120,6 +120,10 @@ public enum ErrorStatus implements BaseErrorCode { "채팅 상대 회원이 나를 차단했습니다. 채팅 시작이 불가능합니다."), CHAT_START_FAILED_TARGET_USER_DEACTIVATED(HttpStatus.NOT_FOUND, "CHAT407", "채팅 상대 회원이 탈퇴했습니다. 채팅 시작이 불가능합니다."), + CHAT_START_FAILED_BOARD_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAT408", + "해당 게시글이 존재하지 않습니다. 채팅 시작이 불가능합니다."), + CHAT_START_FAILED_BOARD_CREATOR_IS_SELF(HttpStatus.BAD_REQUEST, "CHAT409", + "해당 게시글의 작성자가 본인입니다. 채팅 시작이 불가능합니다."), CHAT_TARGET_IS_BLOCKED_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT408", "채팅 상대 회원을 차단한 상태입니다. 채팅 메시지 전송이 불가능합니다."), BLOCKED_BY_CHAT_TARGET_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT409", diff --git a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java index ff6e93ac..b6769cdb 100644 --- a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java +++ b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java @@ -12,7 +12,9 @@ import com.gamegoo.dto.chat.ChatRequest; import com.gamegoo.dto.chat.ChatRequest.SystemFlagRequest; import com.gamegoo.dto.chat.ChatResponse; +import com.gamegoo.dto.chat.ChatResponse.ChatMessageListDTO; import com.gamegoo.dto.chat.ChatResponse.ChatroomEnterDTO; +import com.gamegoo.dto.chat.ChatResponse.SystemFlagDTO; import com.gamegoo.repository.board.BoardRepository; import com.gamegoo.repository.chat.ChatRepository; import com.gamegoo.repository.chat.ChatroomRepository; @@ -89,19 +91,10 @@ public ChatResponse.ChatroomEnterDTO startChatroomByMemberId(Long memberId, // 새 채팅방 생성 Chatroom newChatroom = createNewChatroom(member, targetMember, null); - return ChatroomEnterDTO.builder() - .uuid(newChatroom.getUuid()) - .memberId(targetMember.getId()) - .gameName(targetMember.getGameName()) - .memberProfileImg(targetMember.getProfileImage()) - .friend(friendService.isFriend(member, targetMember)) - .blocked(false) - .blind(targetMember.getBlind()) - .friendRequestMemberId( - friendService.getFriendRequestMemberId(member, targetMember)) - .system(null) - .chatMessageList(initChatMessageListDTO()) - .build(); + ChatResponse.ChatMessageListDTO chatMessageListDTO = initChatMessageListDTO(); + + return createChatroomEnterDTO(member, targetMember, newChatroom.getUuid(), null, + chatMessageListDTO); }); } @@ -115,33 +108,31 @@ public ChatResponse.ChatroomEnterDTO startChatroomByMemberId(Long memberId, public ChatResponse.ChatroomEnterDTO startChatroomByBoardId(Long memberId, Long boardId) { Member member = profileService.findMember(memberId); - // 게시글 엔티티 조회 - Board board = boardService.findBoard(boardId); + // 게시글 존재 여부 검증 및 조회 + Board board = validateAndGetBoard(boardId); // 채팅 대상 회원의 존재 여부 검증 - Member targetMember = memberRepository.findById(board.getMember().getId()) - .orElseThrow( - () -> new ChatHandler(ErrorStatus.CHAT_START_FAILED_CHAT_TARGET_NOT_FOUND)); + Member targetMember = validateAndGetTargetMember(board.getMember().getId()); - // 게시글 작성자가 본인인 경우 - MemberUtils.validateDifferentMembers(member.getId(), targetMember.getId(), - ErrorStatus.CHAT_TARGET_MEMBER_ID_INVALID); - - // 채팅 대상 회원이 탈퇴한 경우 - MemberUtils.checkBlind(targetMember); + // 게시글 작성자가 본인이 아닌지 검증 + if (member.getId().equals(targetMember.getId())) { + throw new ChatHandler(ErrorStatus.CHAT_START_FAILED_BOARD_CREATOR_IS_SELF); + } + // 상대가 탈퇴했는지 검증 + validateTargetMemberIsBlind(targetMember, + ErrorStatus.CHAT_START_FAILED_TARGET_USER_DEACTIVATED); - // 내가 채팅 대상 회원을 차단한 경우, 기존 채팅방 입장 및 새 채팅방 생성 모두 불가 - MemberUtils.validateBlocked(member, targetMember, - ErrorStatus.CHAT_START_FAILED_CHAT_TARGET_IS_BLOCKED); + // 내가 상대 회원 차단했는지 검증 + validateBlockedTargetMember(member, targetMember); return chatroomRepository.findChatroomByMemberIds( member.getId(), targetMember.getId()) .map(exitChatroom -> enterExistingChatroom(member, targetMember, exitChatroom, board.getId())) // 기존 채팅방 존재하는 경우, 해당 채팅방에 입장 및 system 값 포함 .orElseGet(() -> { - // 기존에 채팅방이 존재하지 않는 경우: 상대방의 차단 여부 검증 - MemberUtils.validateBlocked(targetMember, member, - ErrorStatus.CHAT_START_FAILED_BLOCKED_BY_CHAT_TARGET); + // 기존에 채팅방이 존재하지 않는 경우 + // 상대가 나를 차단했는지 검증 + validateBlockedByTargetMember(member, targetMember); // 새 채팅방 생성 Chatroom newChatroom = createNewChatroom(member, targetMember, null); @@ -154,26 +145,10 @@ public ChatResponse.ChatroomEnterDTO startChatroomByBoardId(Long memberId, Long .build(); // chatMessageListDTO 생성 - ChatResponse.ChatMessageListDTO chatMessageListDTO = ChatResponse.ChatMessageListDTO.builder() - .chatMessageDtoList(new ArrayList<>()) - .list_size(0) - .has_next(false) - .next_cursor(null) - .build(); + ChatResponse.ChatMessageListDTO chatMessageListDTO = initChatMessageListDTO(); - return ChatroomEnterDTO.builder() - .uuid(newChatroom.getUuid()) - .memberId(targetMember.getId()) - .gameName(targetMember.getGameName()) - .memberProfileImg(targetMember.getProfileImage()) - .friend(friendService.isFriend(member, targetMember)) - .blocked(false) - .blind(targetMember.getBlind()) - .friendRequestMemberId( - friendService.getFriendRequestMemberId(member, targetMember)) - .system(systemFlagDTO) - .chatMessageList(null) - .build(); + return createChatroomEnterDTO(member, targetMember, newChatroom.getUuid(), + systemFlagDTO, chatMessageListDTO); }); } @@ -635,6 +610,34 @@ private ChatResponse.SystemFlagDTO createSystemFlagDTO(MemberChatroom memberChat : ChatResponse.SystemFlagDTO.builder().flag(2).boardId(boardId).build(); } + /** + * ChatroomEnterDTO를 생성 + * + * @param member + * @param targetMember + * @param uuid + * @param system + * @param chatMessageListDTO + * @return + */ + private ChatResponse.ChatroomEnterDTO createChatroomEnterDTO(Member member, + Member targetMember, String uuid, SystemFlagDTO system, + ChatMessageListDTO chatMessageListDTO) { + return ChatroomEnterDTO.builder() + .uuid(uuid) + .memberId(targetMember.getId()) + .gameName(targetMember.getGameName()) + .memberProfileImg(targetMember.getProfileImage()) + .friend(friendService.isFriend(member, targetMember)) + .blocked(MemberUtils.isBlocked(targetMember, member)) + .blind(targetMember.getBlind()) + .friendRequestMemberId( + friendService.getFriendRequestMemberId(member, targetMember)) + .system(system) + .chatMessageList(chatMessageListDTO) + .build(); + } + /** * ChatMessageListDTO 객체를 초기화해 리턴 * @@ -681,4 +684,9 @@ private void validateTargetMemberIsBlind(Member targetMember, ErrorStatus errorS throw new ChatHandler(errorStatus); } } + + private Board validateAndGetBoard(Long boardId) { + return boardRepository.findById(boardId) + .orElseThrow(() -> new ChatHandler(ErrorStatus.CHAT_START_FAILED_BOARD_NOT_FOUND)); + } } From 4a5d7c0c14b12803045184fcca95d9d09d480d2a Mon Sep 17 00:00:00 2001 From: Eunjin3395 Date: Sun, 8 Sep 2024 20:11:58 +0900 Subject: [PATCH 6/9] =?UTF-8?q?:recycle:=20[Refactor]=20=EB=A7=A4=EC=B9=AD?= =?UTF-8?q?=EC=9D=84=20=ED=86=B5=ED=95=9C=20=EC=B1=84=ED=8C=85=EB=B0=A9=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20=EB=B0=8F=20=EC=83=81=EB=8C=80?= =?UTF-8?q?=EB=B0=A9=20=ED=83=88=ED=87=B4=20=EC=97=AC=EB=B6=80=20=EA=B3=A0?= =?UTF-8?q?=EB=A0=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiPayload/code/status/ErrorStatus.java | 3 ++- .../service/chat/ChatCommandService.java | 24 +++++++------------ 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java index d5609421..975126fd 100644 --- a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java @@ -124,11 +124,12 @@ public enum ErrorStatus implements BaseErrorCode { "해당 게시글이 존재하지 않습니다. 채팅 시작이 불가능합니다."), CHAT_START_FAILED_BOARD_CREATOR_IS_SELF(HttpStatus.BAD_REQUEST, "CHAT409", "해당 게시글의 작성자가 본인입니다. 채팅 시작이 불가능합니다."), + CHAT_START_FAILED_TARGET_USER_IS_SELF(HttpStatus.BAD_REQUEST, "CHAT410", + "채팅 대상 회원이 본인입니다. 채팅 시작이 불가능합니다."), CHAT_TARGET_IS_BLOCKED_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT408", "채팅 상대 회원을 차단한 상태입니다. 채팅 메시지 전송이 불가능합니다."), BLOCKED_BY_CHAT_TARGET_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT409", "채팅 상대 회원이 나를 차단했습니다. 채팅 메시지 전송이 불가능합니다."), - CHAT_TARGET_MEMBER_ID_INVALID(HttpStatus.BAD_REQUEST, "CHAT410", "채팅방 시작 대상 회원 id 값이 잘못되었습니다."), // 친구 관련 에러 diff --git a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java index b6769cdb..ed1ea550 100644 --- a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java +++ b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java @@ -161,26 +161,19 @@ public ChatResponse.ChatroomEnterDTO startChatroomByBoardId(Long memberId, Long public String startChatroomByMatching(Long memberId1, Long memberId2) { // 매칭 대상 회원이 동일한 회원인 경우 - MemberUtils.validateDifferentMembers(memberId1, memberId2, - ErrorStatus.CHAT_TARGET_MEMBER_ID_INVALID); + validateDifferentMembers(memberId1, memberId2); Member member1 = profileService.findMember(memberId1); Member member2 = profileService.findMember(memberId2); // 대상 회원의 탈퇴 여부 검증 - if (member2.getBlind()) { - throw new MemberHandler(ErrorStatus.USER_DEACTIVATED); - } + validateTargetMemberIsBlind(member2, ErrorStatus.CHAT_START_FAILED_TARGET_USER_DEACTIVATED); - // 내가 상대를 차단한 경우 - if (MemberUtils.isBlocked(member1, member2)) { - throw new ChatHandler(ErrorStatus.CHAT_START_FAILED_CHAT_TARGET_IS_BLOCKED); - } + // 내가 상대를 차단했는지 검증 + validateBlockedTargetMember(member1, member2); - // 상대가 나를 차단한 경우 - if (MemberUtils.isBlocked(member2, member1)) { - throw new ChatHandler(ErrorStatus.CHAT_START_FAILED_BLOCKED_BY_CHAT_TARGET); - } + // 상대가 나를 차단했는지 검증 + validateBlockedByTargetMember(member1, member2); Chatroom chatroom = chatroomRepository .findChatroomByMemberIds(member1.getId(), member2.getId()) @@ -469,12 +462,13 @@ private void updateLastJoinDateBySystemChat(MemberChatroom memberChatroom, targetMemberChatroom.getChatroom().getUuid()); } } - + /** * 두 회원 간 새로운 채팅방 생성 * * @param member1 * @param member2 + * @param lastJoinDate * @return */ private Chatroom createNewChatroom(Member member1, Member member2, LocalDateTime lastJoinDate) { @@ -656,7 +650,7 @@ private ChatResponse.ChatMessageListDTO initChatMessageListDTO() { private void validateDifferentMembers(Long member1, Long member2) { if (member1.equals(member2)) { - throw new ChatHandler(ErrorStatus.CHAT_TARGET_MEMBER_ID_INVALID); + throw new ChatHandler(ErrorStatus.CHAT_START_FAILED_TARGET_USER_IS_SELF); } } From c1a82d6a72032f6f8935de6fb6d064fb6300039c Mon Sep 17 00:00:00 2001 From: Eunjin3395 Date: Sun, 8 Sep 2024 21:40:37 +0900 Subject: [PATCH 7/9] =?UTF-8?q?:recycle:=20[Refactor]=20readChatMessages?= =?UTF-8?q?=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiPayload/code/status/ErrorStatus.java | 4 +++ .../service/chat/ChatCommandService.java | 30 ++++++++++++++----- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java index 975126fd..51bd25cc 100644 --- a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java @@ -126,6 +126,10 @@ public enum ErrorStatus implements BaseErrorCode { "해당 게시글의 작성자가 본인입니다. 채팅 시작이 불가능합니다."), CHAT_START_FAILED_TARGET_USER_IS_SELF(HttpStatus.BAD_REQUEST, "CHAT410", "채팅 대상 회원이 본인입니다. 채팅 시작이 불가능합니다."), + CHAT_READ_FAILED_NOT_ENTERED_CHATROOM(HttpStatus.FORBIDDEN, "CHAT411", + "해당 채팅방에 입장 상태가 아닙니다. 채팅방 입장 후 메시지 읽음 처리하세요."), + CHAT_READ_FAILED_CHAT_MESSAGE_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAT412", + "해당 메시지를 찾을 수 없습니다. 채팅 메시지 읽음 처리 실패"), CHAT_TARGET_IS_BLOCKED_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT408", "채팅 상대 회원을 차단한 상태입니다. 채팅 메시지 전송이 불가능합니다."), BLOCKED_BY_CHAT_TARGET_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT409", diff --git a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java index ed1ea550..a1478e0d 100644 --- a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java +++ b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java @@ -207,15 +207,14 @@ public ChatResponse.ChatroomEnterDTO enterChatroom(String chatroomUuid, Long mem MemberChatroom memberChatroom = memberChatroomRepository.findByMemberIdAndChatroomId( memberId, chatroom.getId()) - .orElseThrow(() -> new ChatHandler(ErrorStatus.CHATROOM_ACCESS_DENIED)); + .orElseThrow(() -> new ChatHandler(ErrorStatus.CHATROOM_NOT_EXIST)); // 채팅 상대 회원 조회 Member targetMember = memberChatroomRepository.findTargetMemberByChatroomIdAndMemberId( chatroom.getId(), memberId); // 내가 채팅 상대 회원을 차단한 경우 - MemberUtils.validateBlocked(member, targetMember, - ErrorStatus.CHAT_START_FAILED_CHAT_TARGET_IS_BLOCKED); + validateBlockedTargetMember(member, targetMember); return enterExistingChatroom(member, targetMember, chatroom, null); } @@ -311,14 +310,20 @@ public void readChatMessages(String chatroomUuid, Long timestamp, Long memberId) MemberChatroom memberChatroom = memberChatroomRepository.findByMemberIdAndChatroomId( member.getId(), chatroom.getId()) - .orElseThrow(() -> new ChatHandler(ErrorStatus.CHATROOM_ACCESS_DENIED)); + .orElseThrow(() -> new ChatHandler(ErrorStatus.CHATROOM_NOT_EXIST)); + + // 내가 입장한 상태인지 검증 + if (memberChatroom.getLastJoinDate() == null) { + throw new ChatHandler(ErrorStatus.CHAT_READ_FAILED_NOT_ENTERED_CHATROOM); + } if (timestamp == null) { // timestamp 파라미터가 넘어오지 않은 경우, lastViewDate를 현재 시각으로 업데이트 memberChatroom.updateLastViewDate(LocalDateTime.now()); } else { // timestamp 파라미터가 넘어온 경우, lastViewDate를 해당 timestamp의 chat의 createdAt으로 업데이트 Chat chat = chatRepository.findByChatroomAndTimestamp(chatroom, timestamp) - .orElseThrow(() -> new ChatHandler(ErrorStatus.CHAT_MESSAGE_NOT_FOUND)); + .orElseThrow( + () -> new ChatHandler(ErrorStatus.CHAT_READ_FAILED_CHAT_MESSAGE_NOT_FOUND)); memberChatroom.updateLastViewDate(chat.getCreatedAt()); } } @@ -462,7 +467,7 @@ private void updateLastJoinDateBySystemChat(MemberChatroom memberChatroom, targetMemberChatroom.getChatroom().getUuid()); } } - + /** * 두 회원 간 새로운 채팅방 생성 * @@ -550,7 +555,7 @@ private ChatResponse.ChatroomEnterDTO enterExistingChatroom(Member member, Membe // 상대방이 탈퇴했는지 검증 validateTargetMemberIsBlind(targetMember, - ErrorStatus.CHAT_START_FAILED_BLOCKED_BY_CHAT_TARGET); + ErrorStatus.CHAT_START_FAILED_TARGET_USER_DEACTIVATED); } // 최근 메시지 내역 조회 @@ -683,4 +688,15 @@ private Board validateAndGetBoard(Long boardId) { return boardRepository.findById(boardId) .orElseThrow(() -> new ChatHandler(ErrorStatus.CHAT_START_FAILED_BOARD_NOT_FOUND)); } + + private Chatroom validateAndGetChatroom(Long memberId, String uuid) { + Chatroom chatroom = chatroomRepository.findByUuid(uuid) + .orElseThrow(() -> new ChatHandler(ErrorStatus.CHATROOM_NOT_EXIST)); + + MemberChatroom memberChatroom = memberChatroomRepository.findByMemberIdAndChatroomId( + memberId, chatroom.getId()) + .orElseThrow(() -> new ChatHandler(ErrorStatus.CHATROOM_NOT_EXIST)); + + return chatroom; + } } From 27197939d12985e6576154b8ea107b63ae5f6771 Mon Sep 17 00:00:00 2001 From: Eunjin3395 Date: Sun, 8 Sep 2024 23:11:28 +0900 Subject: [PATCH 8/9] =?UTF-8?q?:recycle:=20[Refactor]=20addChat=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gamegoo/apiPayload/code/status/ErrorStatus.java | 6 ++++-- .../gamegoo/service/chat/ChatCommandService.java | 13 ++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java index 51bd25cc..e31d0061 100644 --- a/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java @@ -130,9 +130,11 @@ public enum ErrorStatus implements BaseErrorCode { "해당 채팅방에 입장 상태가 아닙니다. 채팅방 입장 후 메시지 읽음 처리하세요."), CHAT_READ_FAILED_CHAT_MESSAGE_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAT412", "해당 메시지를 찾을 수 없습니다. 채팅 메시지 읽음 처리 실패"), - CHAT_TARGET_IS_BLOCKED_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT408", + CHAT_ADD_FAILED_TARGET_USER_DEACTIVATED(HttpStatus.BAD_REQUEST, "CHAT413", + "채팅 상대 회원이 탈퇴했습니다. 채팅 전송이 불가능합니다."), + CHAT_ADD_FAILED_CHAT_TARGET_IS_BLOCKED(HttpStatus.FORBIDDEN, "CHAT408", "채팅 상대 회원을 차단한 상태입니다. 채팅 메시지 전송이 불가능합니다."), - BLOCKED_BY_CHAT_TARGET_SEND_CHAT_FAILED(HttpStatus.FORBIDDEN, "CHAT409", + CHAT_ADD_FAILED_BLOCKED_BY_CHAT_TARGET(HttpStatus.FORBIDDEN, "CHAT409", "채팅 상대 회원이 나를 차단했습니다. 채팅 메시지 전송이 불가능합니다."), diff --git a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java index a1478e0d..cc7fb469 100644 --- a/src/main/java/com/gamegoo/service/chat/ChatCommandService.java +++ b/src/main/java/com/gamegoo/service/chat/ChatCommandService.java @@ -2,7 +2,6 @@ import com.gamegoo.apiPayload.code.status.ErrorStatus; import com.gamegoo.apiPayload.exception.handler.ChatHandler; -import com.gamegoo.apiPayload.exception.handler.MemberHandler; import com.gamegoo.converter.ChatConverter; import com.gamegoo.domain.board.Board; import com.gamegoo.domain.chat.Chat; @@ -237,20 +236,20 @@ public Chat addChat(ChatRequest.ChatCreateRequest request, String chatroomUuid, // 해당 채팅방이 회원의 것이 맞는지 검증 MemberChatroom memberChatroom = memberChatroomRepository.findByMemberIdAndChatroomId( memberId, chatroom.getId()) - .orElseThrow(() -> new ChatHandler(ErrorStatus.CHATROOM_ACCESS_DENIED)); + .orElseThrow(() -> new ChatHandler(ErrorStatus.CHATROOM_NOT_EXIST)); // 회원 간 차단 여부 및 탈퇴 여부 검증 // 대화 상대 회원 조회 Member targetMember = memberChatroomRepository.findTargetMemberByChatroomIdAndMemberId( chatroom.getId(), memberId); // 상대 탈퇴 여부 검증 - if (targetMember.getBlind()) { - throw new MemberHandler(ErrorStatus.USER_DEACTIVATED); - } + validateTargetMemberIsBlind(targetMember, + ErrorStatus.CHAT_ADD_FAILED_TARGET_USER_DEACTIVATED); + MemberUtils.validateBlocked(member, targetMember, - ErrorStatus.CHAT_TARGET_IS_BLOCKED_SEND_CHAT_FAILED); + ErrorStatus.CHAT_ADD_FAILED_CHAT_TARGET_IS_BLOCKED); MemberUtils.validateBlocked(targetMember, member, - ErrorStatus.BLOCKED_BY_CHAT_TARGET_SEND_CHAT_FAILED); + ErrorStatus.CHAT_ADD_FAILED_BLOCKED_BY_CHAT_TARGET); // 등록해야 할 시스템 메시지가 있는 경우 if (request.getSystem() != null) { From 2a49c9b18e52ea318c36aad53a449a3886d54bfd Mon Sep 17 00:00:00 2001 From: Eunjin3395 Date: Sun, 8 Sep 2024 23:15:36 +0900 Subject: [PATCH 9/9] =?UTF-8?q?:recycle:=20[Refactor]=20=EC=B1=84=ED=8C=85?= =?UTF-8?q?=EB=B0=A9=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20API?= =?UTF-8?q?=EC=9D=98=20gameName=20=ED=83=88=ED=87=B4=20=EC=97=AC=EB=B6=80?= =?UTF-8?q?=20=EA=B3=A0=EB=A0=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/gamegoo/service/chat/ChatQueryService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gamegoo/service/chat/ChatQueryService.java b/src/main/java/com/gamegoo/service/chat/ChatQueryService.java index 10498921..3d1e039d 100644 --- a/src/main/java/com/gamegoo/service/chat/ChatQueryService.java +++ b/src/main/java/com/gamegoo/service/chat/ChatQueryService.java @@ -80,7 +80,8 @@ public List getChatroomList(Long memberId) { .uuid(chatroom.getUuid()) .targetMemberId(targetMember.getId()) .targetMemberImg(targetMember.getProfileImage()) - .targetMemberName(targetMember.getGameName()) + .targetMemberName( + targetMember.getBlind() ? "(탈퇴한 사용자)" : targetMember.getGameName()) .friend(friendService.isFriend(member, targetMember)) .blocked(MemberUtils.isBlocked(targetMember, member)) .blind(targetMember.getBlind())