From c525ec03307114f3b5f9ee6437c8f63cfbd26666 Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 11 Aug 2025 14:26:00 +0900 Subject: [PATCH] =?UTF-8?q?feat(chat):=20=EB=82=B4=20=EC=B1=84=ED=8C=85?= =?UTF-8?q?=EB=B0=A9=20=EB=AA=A9=EB=A1=9D=20=ED=8E=98=EC=9D=B4=EC=A7=95=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=20=EB=B0=8F=20page=20=ED=8C=8C=EB=9D=BC?= =?UTF-8?q?=EB=AF=B8=ED=84=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Repository에 Pageable 인자로 전달하여 DB 레벨 limit/offset 적용 - Service에서 PageRequest.of(page, 20)로 20개 페이지 처리 고정 - Controller /api/chat/room/list에 page 요청 파라미터 추가 및 전달 왜: 참여 중인 채팅방 목록이 페이징되지 않아 20개 단위로 최신 메시지 기준 내림차순 페이징 처리 필요 --- .../chat/room/controller/ChatRoomController.kt | 5 +++-- .../chat/room/repository/ChatRoomRepository.kt | 4 +++- .../sodalive/chat/room/service/ChatRoomService.kt | 10 ++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/controller/ChatRoomController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/controller/ChatRoomController.kt index 9623f3f..1fbde14 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/controller/ChatRoomController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/controller/ChatRoomController.kt @@ -54,12 +54,13 @@ class ChatRoomController( */ @GetMapping("/list") fun listMyChatRooms( - @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, + @RequestParam(defaultValue = "0") page: Int ) = run { if (member == null || member.auth == null) { ApiResponse.ok(emptyList()) } else { - val response = chatRoomService.listMyChatRooms(member) + val response = chatRoomService.listMyChatRooms(member, page) ApiResponse.ok(response) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/repository/ChatRoomRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/repository/ChatRoomRepository.kt index c840948..0b719a0 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/repository/ChatRoomRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/repository/ChatRoomRepository.kt @@ -4,6 +4,7 @@ import kr.co.vividnext.sodalive.chat.character.ChatCharacter import kr.co.vividnext.sodalive.chat.room.ChatRoom import kr.co.vividnext.sodalive.chat.room.dto.ChatRoomListQueryDto import kr.co.vividnext.sodalive.member.Member +import org.springframework.data.domain.Pageable import org.springframework.data.jpa.repository.JpaRepository import org.springframework.data.jpa.repository.Query import org.springframework.data.repository.query.Param @@ -55,6 +56,7 @@ interface ChatRoomRepository : JpaRepository { """ ) fun findMemberRoomsOrderByLastMessageDesc( - @Param("member") member: Member + @Param("member") member: Member, + pageable: Pageable ): List } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/service/ChatRoomService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/service/ChatRoomService.kt index 661f73a..42d24e0 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/service/ChatRoomService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/chat/room/service/ChatRoomService.kt @@ -21,6 +21,7 @@ import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.member.Member import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Value +import org.springframework.data.domain.PageRequest import org.springframework.http.HttpEntity import org.springframework.http.HttpHeaders import org.springframework.http.HttpMethod @@ -183,8 +184,13 @@ class ChatRoomService( } @Transactional(readOnly = true) - fun listMyChatRooms(member: Member): List { - val rooms: List = chatRoomRepository.findMemberRoomsOrderByLastMessageDesc(member) + fun listMyChatRooms(member: Member, page: Int): List { + // 기본 페이지당 20개 고정 + val pageable = PageRequest.of(if (page < 0) 0 else page, 20) + val rooms: List = chatRoomRepository.findMemberRoomsOrderByLastMessageDesc( + member, + pageable + ) return rooms.map { q -> val room = ChatRoom( sessionId = "",