feat(chat): 내 채팅방 목록 페이징 적용 및 page 파라미터 추가
- Repository에 Pageable 인자로 전달하여 DB 레벨 limit/offset 적용 - Service에서 PageRequest.of(page, 20)로 20개 페이지 처리 고정 - Controller /api/chat/room/list에 page 요청 파라미터 추가 및 전달 왜: 참여 중인 채팅방 목록이 페이징되지 않아 20개 단위로 최신 메시지 기준 내림차순 페이징 처리 필요
This commit is contained in:
parent
735f1e26df
commit
c525ec0330
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<ChatRoom, Long> {
|
|||
"""
|
||||
)
|
||||
fun findMemberRoomsOrderByLastMessageDesc(
|
||||
@Param("member") member: Member
|
||||
@Param("member") member: Member,
|
||||
pageable: Pageable
|
||||
): List<ChatRoomListQueryDto>
|
||||
}
|
||||
|
|
|
@ -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<ChatRoomListItemDto> {
|
||||
val rooms: List<ChatRoomListQueryDto> = chatRoomRepository.findMemberRoomsOrderByLastMessageDesc(member)
|
||||
fun listMyChatRooms(member: Member, page: Int): List<ChatRoomListItemDto> {
|
||||
// 기본 페이지당 20개 고정
|
||||
val pageable = PageRequest.of(if (page < 0) 0 else page, 20)
|
||||
val rooms: List<ChatRoomListQueryDto> = chatRoomRepository.findMemberRoomsOrderByLastMessageDesc(
|
||||
member,
|
||||
pageable
|
||||
)
|
||||
return rooms.map { q ->
|
||||
val room = ChatRoom(
|
||||
sessionId = "",
|
||||
|
|
Loading…
Reference in New Issue