diff --git a/src/main/java/com/campick/server/api/chat/controller/ChatController.java b/src/main/java/com/campick/server/api/chat/controller/ChatController.java index ad73683..0590a19 100644 --- a/src/main/java/com/campick/server/api/chat/controller/ChatController.java +++ b/src/main/java/com/campick/server/api/chat/controller/ChatController.java @@ -36,6 +36,14 @@ public ResponseEntity> getChatRoom(@PathVariable Lon return ApiResponse.success(SuccessStatus.SEND_LOAD_CHATROOM, chatService.getChatRoom(chatRoomId)); } + @PatchMapping("/{chatRoomId}") + public ResponseEntity> readChatRoom(@PathVariable Long chatRoomId, + @AuthenticationPrincipal SecurityMember securityMember) { + Long memberId = securityMember.getId(); + chatService.readChatRoom(chatRoomId, memberId); + return ApiResponse.success_only(SuccessStatus.READ_CHAT_SUCCESS); + } + @GetMapping("/my") public ResponseEntity> getMyChatRoom(@AuthenticationPrincipal SecurityMember securityMember) { Long memberId = securityMember.getId(); @@ -55,6 +63,5 @@ public ResponseEntity> completeChat(@PathVariable Long chatRoo Long memberId = securityMember.getId(); chatService.completeChat(chatRoomId, memberId); return ApiResponse.success_only(SuccessStatus.COMPLETE_CHAT); - } } diff --git a/src/main/java/com/campick/server/api/chat/repository/ChatMessageRepository.java b/src/main/java/com/campick/server/api/chat/repository/ChatMessageRepository.java index 65db83b..e7ffc2f 100644 --- a/src/main/java/com/campick/server/api/chat/repository/ChatMessageRepository.java +++ b/src/main/java/com/campick/server/api/chat/repository/ChatMessageRepository.java @@ -2,6 +2,7 @@ import com.campick.server.api.chat.entity.ChatMessage; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -14,6 +15,16 @@ public interface ChatMessageRepository extends JpaRepository "ORDER BY cm.createdAt ASC") List findMessagesByChatRoomId(@Param("chatRoomId") Long chatRoomId); + @Modifying + @Query("UPDATE ChatMessage m " + + "SET m.isRead = true " + + "WHERE m.chatRoom.id = :chatRoomId " + + "AND m.member.id <> :memberId " + + "AND m.isRead = false") + Integer markMessagesAsRead(@Param("chatRoomId") Long chatRoomId, + @Param("memberId") Long memberId); + + @Query("SELECT m FROM ChatMessage m " + "WHERE m.chatRoom.id = :chatRoomId " + "ORDER BY m.createdAt DESC LIMIT 1") diff --git a/src/main/java/com/campick/server/api/chat/repository/ChatRoomRepository.java b/src/main/java/com/campick/server/api/chat/repository/ChatRoomRepository.java index 7dade22..3ba29d2 100644 --- a/src/main/java/com/campick/server/api/chat/repository/ChatRoomRepository.java +++ b/src/main/java/com/campick/server/api/chat/repository/ChatRoomRepository.java @@ -23,7 +23,9 @@ public interface ChatRoomRepository extends JpaRepository { "JOIN FETCH cr.product p " + "JOIN FETCH cr.seller s " + "JOIN FETCH cr.buyer b " + - "WHERE s.id = :memberId OR b.id = :memberId") + "WHERE (s.id = :memberId OR b.id = :memberId) " + + "AND ((s.id = :memberId AND cr.isSellerOut = false) " + + " OR (b.id = :memberId AND cr.isBuyerOut = false))") List findAllByMemberId(@Param("memberId") Long memberId); Optional findByProductAndSellerAndBuyer(Product product, Member seller, Member buyer); diff --git a/src/main/java/com/campick/server/api/chat/service/ChatService.java b/src/main/java/com/campick/server/api/chat/service/ChatService.java index 2f82c70..0489fff 100644 --- a/src/main/java/com/campick/server/api/chat/service/ChatService.java +++ b/src/main/java/com/campick/server/api/chat/service/ChatService.java @@ -117,6 +117,10 @@ public ChatRoomResDto getChatRoom(Long chatRoomId) { return convertToChatRoomResDto(chatRoom, chatMessages); } + public void readChatRoom(Long chatRoomId, Long memberId) { + Integer readMessageCount = chatMessageRepository.markMessagesAsRead(chatRoomId, memberId); + } + public MyChatResDto getMyChatRooms(Long memberId) { List myChatRooms = chatRoomRepository.findAllByMemberId(memberId); List chatListDtos = myChatRooms.stream().map( diff --git a/src/main/java/com/campick/server/common/response/SuccessStatus.java b/src/main/java/com/campick/server/common/response/SuccessStatus.java index a0ceacc..013bef0 100644 --- a/src/main/java/com/campick/server/common/response/SuccessStatus.java +++ b/src/main/java/com/campick/server/common/response/SuccessStatus.java @@ -69,6 +69,7 @@ public enum SuccessStatus { SEND_TOTAL_UNREAD_MSG(HttpStatus.OK, "총 안 읽은 메시지 수 조회 성공"), COMPLETE_CHAT(HttpStatus.OK, "채팅방 종료 완료"), UPLOAD_CHAT_IMAGE_SUCCESS(HttpStatus.OK, "채팅방 내 이미지 업로드 성공"), + READ_CHAT_SUCCESS(HttpStatus.OK, "채팅방 읽음 성공"), /**