From 53be46567c9d3d4d9b53d7564972cbfee7b27153 Mon Sep 17 00:00:00 2001 From: dppfls Date: Wed, 3 Jun 2026 22:19:55 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20DIRECT=20=EC=B1=84=ED=8C=85=EB=B0=A9=20?= =?UTF-8?q?=EC=9E=AC=EC=9E=85=EC=9E=A5=20=EB=B0=8F=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20=EC=A0=84=EC=86=A1=20=EC=8B=9C=20ChatPart=20?= =?UTF-8?q?=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/chat/service/ChatMessageCommandServiceImpl.java | 6 ++++++ .../pickIt/api/chat/service/ChatRoomCommandServiceImpl.java | 5 +++++ .../pickIt/api/chat/service/ChatRoomQueryServiceImpl.java | 2 +- .../pickIt/domain/chat/repository/ChatPartRepository.java | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/capstone/pickIt/api/chat/service/ChatMessageCommandServiceImpl.java b/src/main/java/com/capstone/pickIt/api/chat/service/ChatMessageCommandServiceImpl.java index 7c7412ac..f3967180 100644 --- a/src/main/java/com/capstone/pickIt/api/chat/service/ChatMessageCommandServiceImpl.java +++ b/src/main/java/com/capstone/pickIt/api/chat/service/ChatMessageCommandServiceImpl.java @@ -155,6 +155,12 @@ public void sendMessage(Long currentUserId, ChatMessageSendRequestDTO request) { currentUserId ); + // DIRECT 채팅 상대방이 나간 상태라면 채팅방 재노출을 위해 복구 + if (chatRoom.getChatType() == ChatType.DIRECT) { + chatPartRepository.findOpponentIncludingDeleted(chatRoom.getId(), currentUserId) + .ifPresent(ChatPart::restore); + } + // 채팅 목록(lastMessage, unreadCount) 갱신용 개인 알림 이벤트 발행 eventPublisher.publishEvent( new ChatUserNotificationEvent(receiverId, notification) diff --git a/src/main/java/com/capstone/pickIt/api/chat/service/ChatRoomCommandServiceImpl.java b/src/main/java/com/capstone/pickIt/api/chat/service/ChatRoomCommandServiceImpl.java index d2552632..e1792043 100644 --- a/src/main/java/com/capstone/pickIt/api/chat/service/ChatRoomCommandServiceImpl.java +++ b/src/main/java/com/capstone/pickIt/api/chat/service/ChatRoomCommandServiceImpl.java @@ -378,7 +378,12 @@ private DirectChatRoomResponseDTO.CreateOrEnter restoreAndConvert( .findByChatRoomIdAndUserId(chatRoom.getId(), currentUserId) .orElseThrow(() -> new ChatException(ChatErrorCode.CHAT_PART_NOT_FOUND)); + ChatPart targetChatPart = chatPartRepository + .findByChatRoomIdAndUserId(chatRoom.getId(), targetUser.getId()) + .orElseThrow(() -> new ChatException(ChatErrorCode.CHAT_PART_NOT_FOUND)); + currentChatPart.restore(); + targetChatPart.restore(); return ChatRoomConverter.toCreateOrEnterResponse(chatRoom, targetUser, isNew); } diff --git a/src/main/java/com/capstone/pickIt/api/chat/service/ChatRoomQueryServiceImpl.java b/src/main/java/com/capstone/pickIt/api/chat/service/ChatRoomQueryServiceImpl.java index a0740327..ddf5d5d7 100644 --- a/src/main/java/com/capstone/pickIt/api/chat/service/ChatRoomQueryServiceImpl.java +++ b/src/main/java/com/capstone/pickIt/api/chat/service/ChatRoomQueryServiceImpl.java @@ -436,7 +436,7 @@ private ChatRoomResponseDTO.Opponent getOpponentOrNull( } ChatPart opponentChatPart = chatPartRepository - .findOpponent(chatRoomId, currentUserId) + .findOpponentIncludingDeleted(chatRoomId, currentUserId) .orElseThrow(() -> new ChatException(ChatErrorCode.CHAT_PART_NOT_FOUND)); return ChatMessageConverter.toOpponent(opponentChatPart); diff --git a/src/main/java/com/capstone/pickIt/domain/chat/repository/ChatPartRepository.java b/src/main/java/com/capstone/pickIt/domain/chat/repository/ChatPartRepository.java index f512a7fb..78a71e5b 100644 --- a/src/main/java/com/capstone/pickIt/domain/chat/repository/ChatPartRepository.java +++ b/src/main/java/com/capstone/pickIt/domain/chat/repository/ChatPartRepository.java @@ -35,7 +35,7 @@ Optional findActiveOpponent( WHERE cp.chatRoom.id = :chatRoomId AND cp.user.id <> :currentUserId """) - Optional findOpponent( + Optional findOpponentIncludingDeleted( Long chatRoomId, Long currentUserId );