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 );