diff --git a/src/main/java/com/assu/server/domain/chat/converter/ChatConverter.java b/src/main/java/com/assu/server/domain/chat/converter/ChatConverter.java index 3144f7e..1a8a35a 100644 --- a/src/main/java/com/assu/server/domain/chat/converter/ChatConverter.java +++ b/src/main/java/com/assu/server/domain/chat/converter/ChatConverter.java @@ -49,8 +49,17 @@ public static ChatResponseDTO.CreateChatRoomResponseDTO toCreateChatRoomIdDTO(Ch .roomId(room.getId()) .adminViewName(room.getPartner().getName()) .partnerViewName(room.getAdmin().getName()) + .isNew(true) .build(); + } + public static ChatResponseDTO.CreateChatRoomResponseDTO toEnterChatRoomDTO(ChattingRoom room) { + return ChatResponseDTO.CreateChatRoomResponseDTO.builder() + .roomId(room.getId()) + .adminViewName(room.getPartner().getName()) + .partnerViewName(room.getAdmin().getName()) + .isNew(false) + .build(); } public static Message toMessageEntity(ChatRequestDTO.ChatMessageRequestDTO request, ChattingRoom room, Member sender, Member receiver) { diff --git a/src/main/java/com/assu/server/domain/chat/dto/ChatResponseDTO.java b/src/main/java/com/assu/server/domain/chat/dto/ChatResponseDTO.java index 37df472..9a8f3d9 100644 --- a/src/main/java/com/assu/server/domain/chat/dto/ChatResponseDTO.java +++ b/src/main/java/com/assu/server/domain/chat/dto/ChatResponseDTO.java @@ -21,6 +21,7 @@ public static class CreateChatRoomResponseDTO { private Long roomId; private String adminViewName; private String partnerViewName; + private Boolean isNew; } // 메시지 전송 diff --git a/src/main/java/com/assu/server/domain/chat/repository/ChatRepository.java b/src/main/java/com/assu/server/domain/chat/repository/ChatRepository.java index 6579a90..053b7f4 100644 --- a/src/main/java/com/assu/server/domain/chat/repository/ChatRepository.java +++ b/src/main/java/com/assu/server/domain/chat/repository/ChatRepository.java @@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; + import java.util.List; public interface ChatRepository extends JpaRepository { @@ -68,4 +69,24 @@ SELECT MAX(m2.createdAt) """) List findChattingRoomsByMemberId(@Param("memberId") Long memberId); + @Query(""" + SELECT CASE WHEN COUNT(c) > 0 THEN true ELSE false END + FROM ChattingRoom c + WHERE c.admin.id = :adminId AND c.partner.id = :partnerId + """) + Boolean checkChattingRoomByAdminIdAndPartnerId( + @Param("adminId") Long adminId, + @Param("partnerId") Long partnerId + ); + + + @Query(""" + SELECT c + FROM ChattingRoom c + WHERE c.admin.id = :adminId AND c.partner.id = :partnerId + """) + ChattingRoom findChattingRoomByAdminIdAndPartnerId( + @Param("adminId") Long adminId, + @Param("partnerId")Long partnerId + ); } diff --git a/src/main/java/com/assu/server/domain/chat/service/ChatServiceImpl.java b/src/main/java/com/assu/server/domain/chat/service/ChatServiceImpl.java index 084a963..17ce4e8 100644 --- a/src/main/java/com/assu/server/domain/chat/service/ChatServiceImpl.java +++ b/src/main/java/com/assu/server/domain/chat/service/ChatServiceImpl.java @@ -67,18 +67,25 @@ public ChatResponseDTO.CreateChatRoomResponseDTO createChatRoom(ChatRequestDTO.C throw new DatabaseException(ErrorStatus.NO_SUCH_STORE_WITH_THAT_PARTNER); } - ChattingRoom room = ChatConverter.toCreateChattingRoom(admin, partner); + boolean isExist = chatRepository.checkChattingRoomByAdminIdAndPartnerId(admin.getId(), partner.getId()); - room.updateStatus(ActivationStatus.ACTIVE); + if(!isExist) { + ChattingRoom room = ChatConverter.toCreateChattingRoom(admin, partner); - room.updateMemberCount(2); + room.updateStatus(ActivationStatus.ACTIVE); - room.updateName( - partner.getName(), - admin.getName() - ); - ChattingRoom savedRoom = chatRepository.save(room); - return ChatConverter.toCreateChatRoomIdDTO(savedRoom); + room.updateMemberCount(2); + + room.updateName( + partner.getName(), + admin.getName() + ); + ChattingRoom savedRoom = chatRepository.save(room); + return ChatConverter.toCreateChatRoomIdDTO(savedRoom); + } else { + ChattingRoom existChatRoom = chatRepository.findChattingRoomByAdminIdAndPartnerId(admin.getId(), partner.getId()); + return ChatConverter.toEnterChatRoomDTO(existChatRoom); + } } @Override