diff --git a/src/main/java/com/aliens/backend/chat/domain/repository/CustomMessageRepositoryImpl.java b/src/main/java/com/aliens/backend/chat/domain/repository/CustomMessageRepositoryImpl.java index 50ac7fba..db6b7b72 100644 --- a/src/main/java/com/aliens/backend/chat/domain/repository/CustomMessageRepositoryImpl.java +++ b/src/main/java/com/aliens/backend/chat/domain/repository/CustomMessageRepositoryImpl.java @@ -55,6 +55,7 @@ public List aggregateMessageSummaries(List chatRoomIds AggregationOperation match = Aggregation.match(Criteria.where("roomId").in(chatRoomIds)); AggregationOperation group = Aggregation.group("roomId") .last("content").as("lastMessageContent") + .last("sendTime").as("lastMessageTime") .sum(ConditionalOperators.when(Criteria.where("receiverId").is(memberId).and("isRead").is(false)).then(1).otherwise(0)).as("unreadCount"); Aggregation aggregation = Aggregation.newAggregation(match, group); AggregationResults results = mongoTemplate.aggregate(aggregation, "message", ChatMessageSummary.class); diff --git a/src/main/java/com/aliens/backend/chat/service/model/ChatMessageSummary.java b/src/main/java/com/aliens/backend/chat/service/model/ChatMessageSummary.java index d15d9276..a581ef0e 100644 --- a/src/main/java/com/aliens/backend/chat/service/model/ChatMessageSummary.java +++ b/src/main/java/com/aliens/backend/chat/service/model/ChatMessageSummary.java @@ -1,4 +1,6 @@ package com.aliens.backend.chat.service.model; -public record ChatMessageSummary(Long roomId, String lastMessageContent, Long numberOfUnreadMessages) { +import java.util.Date; + +public record ChatMessageSummary(Long roomId, String lastMessageContent, Date lastMessageTime, Long numberOfUnreadMessages) { } \ No newline at end of file diff --git a/src/test/java/com/aliens/backend/chatting/service/ChatServiceTest.java b/src/test/java/com/aliens/backend/chatting/service/ChatServiceTest.java index eb049c70..d5cdda54 100644 --- a/src/test/java/com/aliens/backend/chatting/service/ChatServiceTest.java +++ b/src/test/java/com/aliens/backend/chatting/service/ChatServiceTest.java @@ -18,6 +18,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import java.util.Date; import java.util.List; import static org.mockito.ArgumentMatchers.any; @@ -36,10 +37,11 @@ void setUp() { receiver = dummyGenerator.generateSingleMember();; Message message = Message.of(makeMessageSendRequest()); + Date now = new Date(); doReturn(message).when(messageRepository).save(any()); doNothing().when(messageRepository).markMessagesAsRead(any(),any()); - ChatMessageSummary summary = new ChatMessageSummary(1L,"g",1L); + ChatMessageSummary summary = new ChatMessageSummary(1L,"this is the last message", now,1L); List givenSummary = List.of(summary,summary) ; doReturn(givenSummary).when(messageRepository).aggregateMessageSummaries(any(),any()); diff --git a/src/test/java/com/aliens/backend/docs/ChatRestDocsTest.java b/src/test/java/com/aliens/backend/docs/ChatRestDocsTest.java index 8be18efc..2c6e3687 100644 --- a/src/test/java/com/aliens/backend/docs/ChatRestDocsTest.java +++ b/src/test/java/com/aliens/backend/docs/ChatRestDocsTest.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.List; import static org.mockito.ArgumentMatchers.any; @@ -77,10 +78,11 @@ void getChatSummary() throws Exception { when(chatRoom2.getStatus()).thenReturn(ChatRoomStatus.OPEN); chatRooms.add(chatRoom1); chatRooms.add(chatRoom2); + Date now = new Date(); List chatMessageSummaries = List.of( - new ChatMessageSummary(1L, "Last message in Room 1", 5L), - new ChatMessageSummary(2L, "Last message in Room 2", 3L) + new ChatMessageSummary(1L, "Last message in Room 1", now, 5L), + new ChatMessageSummary(2L, "Last message in Room 2", new Date(now.getTime() - 3600000), 3L) ); ChatSummaryResponse result = new ChatSummaryResponse(chatRooms, chatMessageSummaries); @@ -103,6 +105,7 @@ void getChatSummary() throws Exception { fieldWithPath("result.chatMessageSummaries").description("각 채팅방의 요약 정보"), fieldWithPath("result.chatMessageSummaries[].roomId").description("채팅방 ID"), fieldWithPath("result.chatMessageSummaries[].lastMessageContent").description("채팅방의 마지막 메시지 내용"), + fieldWithPath("result.chatMessageSummaries[].lastMessageTime").description("채팅방의 마지막 메시지 시간"), fieldWithPath("result.chatMessageSummaries[].numberOfUnreadMessages").description("읽지 않은 메시지의 수") ) ));