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")
|
@GetMapping("/list")
|
||||||
fun listMyChatRooms(
|
fun listMyChatRooms(
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
|
@RequestParam(defaultValue = "0") page: Int
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null || member.auth == null) {
|
if (member == null || member.auth == null) {
|
||||||
ApiResponse.ok(emptyList())
|
ApiResponse.ok(emptyList())
|
||||||
} else {
|
} else {
|
||||||
val response = chatRoomService.listMyChatRooms(member)
|
val response = chatRoomService.listMyChatRooms(member, page)
|
||||||
ApiResponse.ok(response)
|
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.ChatRoom
|
||||||
import kr.co.vividnext.sodalive.chat.room.dto.ChatRoomListQueryDto
|
import kr.co.vividnext.sodalive.chat.room.dto.ChatRoomListQueryDto
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
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.JpaRepository
|
||||||
import org.springframework.data.jpa.repository.Query
|
import org.springframework.data.jpa.repository.Query
|
||||||
import org.springframework.data.repository.query.Param
|
import org.springframework.data.repository.query.Param
|
||||||
|
@ -55,6 +56,7 @@ interface ChatRoomRepository : JpaRepository<ChatRoom, Long> {
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
fun findMemberRoomsOrderByLastMessageDesc(
|
fun findMemberRoomsOrderByLastMessageDesc(
|
||||||
@Param("member") member: Member
|
@Param("member") member: Member,
|
||||||
|
pageable: Pageable
|
||||||
): List<ChatRoomListQueryDto>
|
): List<ChatRoomListQueryDto>
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.beans.factory.annotation.Value
|
import org.springframework.beans.factory.annotation.Value
|
||||||
|
import org.springframework.data.domain.PageRequest
|
||||||
import org.springframework.http.HttpEntity
|
import org.springframework.http.HttpEntity
|
||||||
import org.springframework.http.HttpHeaders
|
import org.springframework.http.HttpHeaders
|
||||||
import org.springframework.http.HttpMethod
|
import org.springframework.http.HttpMethod
|
||||||
|
@ -183,8 +184,13 @@ class ChatRoomService(
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
fun listMyChatRooms(member: Member): List<ChatRoomListItemDto> {
|
fun listMyChatRooms(member: Member, page: Int): List<ChatRoomListItemDto> {
|
||||||
val rooms: List<ChatRoomListQueryDto> = chatRoomRepository.findMemberRoomsOrderByLastMessageDesc(member)
|
// 기본 페이지당 20개 고정
|
||||||
|
val pageable = PageRequest.of(if (page < 0) 0 else page, 20)
|
||||||
|
val rooms: List<ChatRoomListQueryDto> = chatRoomRepository.findMemberRoomsOrderByLastMessageDesc(
|
||||||
|
member,
|
||||||
|
pageable
|
||||||
|
)
|
||||||
return rooms.map { q ->
|
return rooms.map { q ->
|
||||||
val room = ChatRoom(
|
val room = ChatRoom(
|
||||||
sessionId = "",
|
sessionId = "",
|
||||||
|
|
Loading…
Reference in New Issue