refactor(chat-room): 페이징 커서 fallback/저장 로직을 createdAt→messageId로 정합성 수정
- 왜: 서버 계약에 따라 cursor 의미가 단독 messageId로 확정됨. createdAt 기반 커서는 페이징 경계에서 중복/누락을 유발할 수 있음 - 무엇: ChatRoomActivity.loadMoreMessages()/loadInitialMessages()에서 cursor 계산 및 nextCursor 대체 저장을 messageId 기준으로 변경. Repository/API 타입은 그대로 유지
This commit is contained in:
@@ -423,7 +423,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
|
||||
// 페이지 상태 갱신
|
||||
hasMoreMessages = response.hasMoreMessages
|
||||
nextCursor = sorted.firstOrNull()?.createdAt
|
||||
nextCursor = sorted.firstOrNull()?.messageId
|
||||
|
||||
// 최신 메시지 위치로
|
||||
scrollToBottom()
|
||||
@@ -491,15 +491,15 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
isLoading = true
|
||||
|
||||
val token = "Bearer ${SharedPreferenceManager.token}"
|
||||
// 커서: API에서 내려준 nextCursor 우선, 없으면 현재 목록 중 가장 오래된 createdAt
|
||||
val fallbackOldestCreatedAt: Long? = items.firstOrNull()?.let {
|
||||
// 커서: API에서 내려준 nextCursor 우선, 없으면 현재 목록 중 가장 오래된 messageId
|
||||
val fallbackOldestMessageId: Long? = items.firstOrNull()?.let {
|
||||
when (it) {
|
||||
is ChatListItem.UserMessage -> it.data.createdAt
|
||||
is ChatListItem.AiMessage -> it.data.createdAt
|
||||
is ChatListItem.UserMessage -> it.data.messageId
|
||||
is ChatListItem.AiMessage -> it.data.messageId
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
val cursor: Long? = nextCursor ?: fallbackOldestCreatedAt
|
||||
val cursor: Long? = nextCursor ?: fallbackOldestMessageId
|
||||
|
||||
val disposable =
|
||||
chatRepository.loadMoreMessages(token = token, roomId = roomId, cursor = cursor)
|
||||
@@ -532,8 +532,8 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
hasMoreMessages = response.hasMore
|
||||
nextCursor = response.nextCursor ?: newChatItems.firstOrNull()?.let {
|
||||
when (it) {
|
||||
is ChatListItem.UserMessage -> it.data.createdAt
|
||||
is ChatListItem.AiMessage -> it.data.createdAt
|
||||
is ChatListItem.UserMessage -> it.data.messageId
|
||||
is ChatListItem.AiMessage -> it.data.messageId
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user