Skip to content

Commit eb8f4fe

Browse files
authored
Merge pull request #244 from prgrms-web-devcourse-final-project/feature/EA3-111-groupchat
[EA3-111] feature : 과거 채팅 응답구조 개선 및 dto 추가
2 parents 51eb8ba + 8746562 commit eb8f4fe

File tree

5 files changed

+56
-14
lines changed

5 files changed

+56
-14
lines changed

src/main/java/grep/neogulcoder/domain/groupchat/controller/GroupChatRestController.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package grep.neogulcoder.domain.groupchat.controller;
22

3+
import grep.neogulcoder.domain.groupchat.controller.dto.response.ChatMessagePagingResponse;
34
import grep.neogulcoder.domain.groupchat.controller.dto.response.GroupChatMessageResponseDto;
45
import grep.neogulcoder.domain.groupchat.service.GroupChatService;
56
import grep.neogulcoder.global.response.ApiResponse;
@@ -17,15 +18,13 @@ public class GroupChatRestController implements GroupChatRestSpecification {
1718
// 과거 채팅 메시지 페이징 조회 (무한 스크롤용)
1819
@Override
1920
@GetMapping("/study/{studyId}/messages")
20-
public ApiResponse<PageResponse<GroupChatMessageResponseDto>> getMessages(
21+
public ApiResponse<ChatMessagePagingResponse> getMessages(
2122
@PathVariable("studyId") Long studyId,
2223
@RequestParam(defaultValue = "0") int page,
2324
@RequestParam(defaultValue = "20") int size
2425
) {
2526
// 서비스에서 페이징된 메시지 조회
26-
PageResponse<GroupChatMessageResponseDto> pageResponse =
27-
groupChatService.getMessages(studyId, page, size);
28-
29-
return ApiResponse.success(pageResponse);
27+
ChatMessagePagingResponse response = groupChatService.getMessages(studyId, page, size);
28+
return ApiResponse.success(response);
3029
}
3130
}

src/main/java/grep/neogulcoder/domain/groupchat/controller/GroupChatRestSpecification.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package grep.neogulcoder.domain.groupchat.controller;
22

3+
import grep.neogulcoder.domain.groupchat.controller.dto.response.ChatMessagePagingResponse;
34
import grep.neogulcoder.domain.groupchat.controller.dto.response.GroupChatMessageResponseDto;
45
import grep.neogulcoder.global.response.ApiResponse;
56
import grep.neogulcoder.global.response.PageResponse;
@@ -73,7 +74,7 @@ public interface GroupChatRestSpecification {
7374
"""
7475
)
7576

76-
ApiResponse<PageResponse<GroupChatMessageResponseDto>> getMessages(
77+
ApiResponse<ChatMessagePagingResponse> getMessages(
7778
@Parameter(description = "스터디 ID", example = "1")
7879
@PathVariable("studyId") Long studyId,
7980

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package grep.neogulcoder.domain.groupchat.controller.dto.response;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
import org.springframework.data.domain.Page;
7+
8+
import java.util.List;
9+
10+
@Getter
11+
public class ChatMessagePagingResponse {
12+
13+
@Schema(description = "채팅 메시지 목록")
14+
private final List<GroupChatMessageResponseDto> content;
15+
16+
@Schema(description = "현재 페이지 번호", example = "0")
17+
private final int currentPage;
18+
19+
@Schema(description = "페이지 크기", example = "20")
20+
private final int size;
21+
22+
@Schema(description = "전체 페이지 수", example = "5")
23+
private final int totalPages;
24+
25+
@Schema(description = "전체 메시지 수", example = "100")
26+
private final long totalElements;
27+
28+
@Schema(description = "다음 페이지 존재 여부", example = "true")
29+
private final boolean hasNext;
30+
31+
@Builder
32+
private ChatMessagePagingResponse(Page<GroupChatMessageResponseDto> page) {
33+
this.content = page.getContent();
34+
this.currentPage = page.getNumber();
35+
this.size = page.getSize();
36+
this.totalPages = page.getTotalPages();
37+
this.totalElements = page.getTotalElements();
38+
this.hasNext = page.hasNext();
39+
}
40+
41+
public static ChatMessagePagingResponse of(Page<GroupChatMessageResponseDto> page) {
42+
return new ChatMessagePagingResponse(page);
43+
}
44+
}

src/main/java/grep/neogulcoder/domain/groupchat/repository/GroupChatMessageRepository.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ public interface GroupChatMessageRepository extends JpaRepository<GroupChatMessa
1111

1212
// 채팅방(roomId)에 속한 메시지를 전송 시간 내림차순으로 페이징 조회
1313
@Query("SELECT m FROM GroupChatMessage m " +
14-
"WHERE m.groupChatRoom.roomId = :roomId " +
14+
"JOIN FETCH m.groupChatRoom r " +
15+
"WHERE r.roomId = :roomId " +
1516
"ORDER BY m.sentAt ASC")
1617
Page<GroupChatMessage> findMessagesByRoomIdAsc(@Param("roomId") Long roomId, Pageable pageable);
1718

src/main/java/grep/neogulcoder/domain/groupchat/service/GroupChatService.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package grep.neogulcoder.domain.groupchat.service;
22

3+
import grep.neogulcoder.domain.groupchat.controller.dto.response.ChatMessagePagingResponse;
34
import grep.neogulcoder.domain.groupchat.entity.GroupChatMessage;
45
import grep.neogulcoder.domain.groupchat.entity.GroupChatRoom;
56
import grep.neogulcoder.domain.groupchat.controller.dto.requset.GroupChatMessageRequestDto;
@@ -63,7 +64,8 @@ public GroupChatMessageResponseDto saveMessage(GroupChatMessageRequestDto reques
6364
}
6465

6566
// 과거 채팅 메시지 페이징 조회 (무한 스크롤용)
66-
public PageResponse<GroupChatMessageResponseDto> getMessages(Long studyId, int page, int size) {
67+
@Transactional(readOnly = true)
68+
public ChatMessagePagingResponse getMessages(Long studyId, int page, int size) {
6769
GroupChatRoom room = roomRepository.findByStudyId(studyId)
6870
.orElseThrow(() -> new IllegalArgumentException("채팅방이 존재하지 않습니다."));
6971

@@ -81,12 +83,7 @@ public PageResponse<GroupChatMessageResponseDto> getMessages(Long studyId, int p
8183
return GroupChatMessageResponseDto.from(message, sender);
8284
});
8385

84-
// PageResponse로 감싸서 반환
85-
return new PageResponse<>(
86-
"/api/chat/study/" + studyId + "/messages",
87-
messagePage,
88-
5 // 페이지 버튼 개수
89-
);
86+
return ChatMessagePagingResponse.of(messagePage);
9087
}
9188

9289

0 commit comments

Comments
 (0)