From 76640c976c20145c947e1eb5ddf7a46b02186d63 Mon Sep 17 00:00:00 2001 From: hyun7494 Date: Thu, 27 Jun 2024 22:06:42 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=95=88=EC=9D=BD=EC=9D=80=20=EC=B1=84?= =?UTF-8?q?=ED=8C=85=20=EA=B0=9C=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/application/ChatService.java | 3 +++ .../chat/application/ChatServiceImp.java | 16 ++++++++++++++++ .../data/dto/UnReadChatCountResponseDto.java | 17 +++++++++++++++++ .../chat/data/vo/UnReadChatCountResponseVo.java | 10 ++++++++++ .../chat/presentation/ChatController.java | 16 ++++++++++++++-- 5 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/skyhorsemanpower/chatService/chat/data/dto/UnReadChatCountResponseDto.java create mode 100644 src/main/java/com/skyhorsemanpower/chatService/chat/data/vo/UnReadChatCountResponseVo.java diff --git a/src/main/java/com/skyhorsemanpower/chatService/chat/application/ChatService.java b/src/main/java/com/skyhorsemanpower/chatService/chat/application/ChatService.java index 9c55207..619b006 100644 --- a/src/main/java/com/skyhorsemanpower/chatService/chat/application/ChatService.java +++ b/src/main/java/com/skyhorsemanpower/chatService/chat/application/ChatService.java @@ -2,6 +2,7 @@ import com.skyhorsemanpower.chatService.chat.data.dto.BeforeChatRoomDto; import com.skyhorsemanpower.chatService.chat.data.dto.ChatRoomMemberResponseDto; +import com.skyhorsemanpower.chatService.chat.data.dto.UnReadChatCountResponseDto; import com.skyhorsemanpower.chatService.chat.data.dto.UpdateProfileImageRequestDto; import com.skyhorsemanpower.chatService.chat.data.dto.ChatRoomTitleResponseDto; import com.skyhorsemanpower.chatService.chat.data.dto.LeaveChatRoomDto; @@ -38,4 +39,6 @@ PreviousChatResponseVo getPreviousChat(String roomNumber, LocalDateTime enterTim void updateProfileImage(UpdateProfileImageRequestDto updateProfileImageRequestDto); List getChatRoomMembers(String roomNumber); + + UnReadChatCountResponseDto getUnreadChatCount(String roomNumber, String uuid); } diff --git a/src/main/java/com/skyhorsemanpower/chatService/chat/application/ChatServiceImp.java b/src/main/java/com/skyhorsemanpower/chatService/chat/application/ChatServiceImp.java index 17751e7..fa4ca76 100644 --- a/src/main/java/com/skyhorsemanpower/chatService/chat/application/ChatServiceImp.java +++ b/src/main/java/com/skyhorsemanpower/chatService/chat/application/ChatServiceImp.java @@ -3,6 +3,7 @@ import com.mongodb.client.model.changestream.OperationType; import com.skyhorsemanpower.chatService.chat.data.dto.BeforeChatRoomDto; import com.skyhorsemanpower.chatService.chat.data.dto.ChatRoomMemberResponseDto; +import com.skyhorsemanpower.chatService.chat.data.dto.UnReadChatCountResponseDto; import com.skyhorsemanpower.chatService.chat.data.dto.UpdateProfileImageRequestDto; import com.skyhorsemanpower.chatService.chat.data.dto.ChatRoomTitleResponseDto; import com.skyhorsemanpower.chatService.chat.data.dto.LeaveChatRoomDto; @@ -395,4 +396,19 @@ public List getChatRoomMembers(String roomNumber) { } } + @Override + public UnReadChatCountResponseDto getUnreadChatCount(String roomNumber, String uuid) { + ChatRoomMember chatRoomMember = chatRoomMemberRepository + .findByMemberUuidAndRoomNumber(uuid, roomNumber) + .orElseThrow(() -> new CustomException(ResponseStatus.WRONG_CHATROOM_AND_MEMBER)); + // 해당 채팅방에서 uuid의 lastReadTime 이후의 채팅 개수 + Long count = mongoTemplate.count( + Query.query( + Criteria.where("roomNumber").is(roomNumber).and("createdAt") + .gt(chatRoomMember.getLastReadTime())), "chat"); + return UnReadChatCountResponseDto.builder() + .count(count) + .build(); + } + } \ No newline at end of file diff --git a/src/main/java/com/skyhorsemanpower/chatService/chat/data/dto/UnReadChatCountResponseDto.java b/src/main/java/com/skyhorsemanpower/chatService/chat/data/dto/UnReadChatCountResponseDto.java new file mode 100644 index 0000000..921b043 --- /dev/null +++ b/src/main/java/com/skyhorsemanpower/chatService/chat/data/dto/UnReadChatCountResponseDto.java @@ -0,0 +1,17 @@ +package com.skyhorsemanpower.chatService.chat.data.dto; + +import com.skyhorsemanpower.chatService.chat.data.vo.UnReadChatCountResponseVo; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class UnReadChatCountResponseDto { + Long count; + + public static UnReadChatCountResponseVo dtoToVo(UnReadChatCountResponseDto unReadChatCountResponseDto) { + return UnReadChatCountResponseVo.builder() + .count(unReadChatCountResponseDto.getCount()) + .build(); + } +} diff --git a/src/main/java/com/skyhorsemanpower/chatService/chat/data/vo/UnReadChatCountResponseVo.java b/src/main/java/com/skyhorsemanpower/chatService/chat/data/vo/UnReadChatCountResponseVo.java new file mode 100644 index 0000000..2fb6028 --- /dev/null +++ b/src/main/java/com/skyhorsemanpower/chatService/chat/data/vo/UnReadChatCountResponseVo.java @@ -0,0 +1,10 @@ +package com.skyhorsemanpower.chatService.chat.data.vo; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class UnReadChatCountResponseVo { + private Long count; +} diff --git a/src/main/java/com/skyhorsemanpower/chatService/chat/presentation/ChatController.java b/src/main/java/com/skyhorsemanpower/chatService/chat/presentation/ChatController.java index dfe850a..bfbf8d1 100644 --- a/src/main/java/com/skyhorsemanpower/chatService/chat/presentation/ChatController.java +++ b/src/main/java/com/skyhorsemanpower/chatService/chat/presentation/ChatController.java @@ -5,6 +5,7 @@ import com.skyhorsemanpower.chatService.chat.data.dto.ChatRoomTitleResponseDto; import com.skyhorsemanpower.chatService.chat.data.dto.LeaveChatRoomDto; import com.skyhorsemanpower.chatService.chat.data.dto.SendChatRequestDto; +import com.skyhorsemanpower.chatService.chat.data.dto.UnReadChatCountResponseDto; import com.skyhorsemanpower.chatService.chat.data.vo.ChatRoomMemberResponseVo; import com.skyhorsemanpower.chatService.chat.data.vo.ChatRoomResponseVo; import com.skyhorsemanpower.chatService.chat.data.vo.ChatRoomTitleResponseVo; @@ -13,6 +14,7 @@ import com.skyhorsemanpower.chatService.chat.data.vo.LeaveChatRoomRequestVo; import com.skyhorsemanpower.chatService.chat.data.vo.PreviousChatResponseVo; import com.skyhorsemanpower.chatService.chat.data.vo.SendChatRequestVo; +import com.skyhorsemanpower.chatService.chat.data.vo.UnReadChatCountResponseVo; import com.skyhorsemanpower.chatService.common.SuccessResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -141,12 +143,22 @@ public SuccessResponse chatRoomTitle( @GetMapping(value = "/roomNumber/{roomNumber}/member") @Operation(summary = "채팅방 멤버 목록", description = "채팅방 내에서 채팅방 멤버들을 표시합니다") - public SuccessResponse> chatRoomMembers(@PathVariable(value = "roomNumber") String roomNumber) { - List chatRoomMemberResponseDtos = chatService.getChatRoomMembers(roomNumber); + public SuccessResponse> chatRoomMembers( + @PathVariable(value = "roomNumber") String roomNumber) { + List chatRoomMemberResponseDtos = chatService.getChatRoomMembers( + roomNumber); List chatRoomMemberResponseVos = chatRoomMemberResponseDtos.stream() .map(ChatRoomMemberResponseDto::dtoToVo) .toList(); return new SuccessResponse<>(chatRoomMemberResponseVos); } + @GetMapping(value = "/roomNumber/{roomNumber}/unread") + @Operation(summary = "안 읽은 채팅 개수", description = "채팅 리스트에서 안 읽은 채팅 개수 최초 조회") + public SuccessResponse countUnreadChats( + @PathVariable(value = "roomNumber") String roomNumber, + @RequestHeader String uuid) { + return new SuccessResponse<>(UnReadChatCountResponseDto.dtoToVo(chatService + .getUnreadChatCount(roomNumber, uuid))); + } }