From 5f38348714dad34d980b15d3c02b5ac51140ae37 Mon Sep 17 00:00:00 2001 From: Admin Date: Wed, 24 Sep 2025 16:31:01 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=EC=9D=BD=EC=9D=8C=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/api/chat/controller/ChatController.java | 9 ++++++++- .../api/chat/repository/ChatMessageRepository.java | 11 +++++++++++ .../campick/server/api/chat/service/ChatService.java | 4 ++++ .../campick/server/common/response/SuccessStatus.java | 1 + src/main/resources/application.properties | 2 +- 5 files changed, 25 insertions(+), 2 deletions(-) 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/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, "채팅방 읽음 성공"), /** diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 9630357..54dfe8e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ #* To get setting local properties #! TODO When Start Deploy must caption below -#spring.profiles.active=local +spring.profiles.active=local ############################## From c5eb17b88e7871d5b1df0a24a50d6eda63d30bea Mon Sep 17 00:00:00 2001 From: Admin Date: Wed, 24 Sep 2025 16:36:19 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=EB=A1=9C=EC=BB=AC=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=8D=BC=ED=8B=B0=EC=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 54dfe8e..9630357 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ #* To get setting local properties #! TODO When Start Deploy must caption below -spring.profiles.active=local +#spring.profiles.active=local ############################## From 92f7e290caeb0e2b7a9662ccace40896a7cfee88 Mon Sep 17 00:00:00 2001 From: Admin Date: Wed, 24 Sep 2025 16:44:37 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=EB=82=98=EA=B0=84=20=EC=B1=84?= =?UTF-8?q?=ED=8C=85=EB=B0=A9=20=EB=82=B4=EA=B0=80=20=EB=82=98=EA=B0=84=20?= =?UTF-8?q?=EC=B1=84=ED=8C=85=EB=B0=A9=20=EB=B9=BC=EA=B3=A0=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/api/chat/repository/ChatRoomRepository.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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);