Skip to content

Commit 0aad232

Browse files
committed
[BOOK-106] fix: 도서 검색 startIndex 1로 변경
스크롤시 중복된 책이 추가되는 문제 해결 WIP
1 parent 715a781 commit 0aad232

File tree

2 files changed

+12
-10
lines changed
  • core/network/src/main/kotlin/com/ninecraft/booket/core/network/service
  • feature/search/src/main/kotlin/com/ninecraft/booket/feature/search

2 files changed

+12
-10
lines changed

core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/NoAuthService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ interface NoAuthService {
2424
@Query("queryType") queryType: String = "All",
2525
@Query("searchTarget") searchTarget: String? = null,
2626
@Query("maxResults") maxResults: Int = 20,
27-
@Query("start") start: Int = 0,
27+
@Query("start") start: Int = 1,
2828
@Query("sort") sort: String = "Accuracy",
2929
@Query("cover") cover: String? = null,
3030
@Query("categoryId") categoryId: Int? = null,

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchPresenter.kt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.ninecraft.booket.feature.search
33
import androidx.compose.foundation.text.input.rememberTextFieldState
44
import androidx.compose.runtime.Composable
55
import androidx.compose.runtime.getValue
6+
import androidx.compose.runtime.mutableIntStateOf
67
import androidx.compose.runtime.mutableStateOf
78
import androidx.compose.runtime.rememberCoroutineScope
89
import androidx.compose.runtime.setValue
@@ -30,6 +31,7 @@ class SearchPresenter @AssistedInject constructor(
3031
) : Presenter<SearchUiState> {
3132
companion object {
3233
private const val PAGE_SIZE = 20
34+
private const val START_INDEX = 1
3335
}
3436

3537
@Composable
@@ -40,12 +42,12 @@ class SearchPresenter @AssistedInject constructor(
4042
val queryState = rememberTextFieldState()
4143
var searchResult by rememberRetained { mutableStateOf(BookSearchModel()) }
4244
var books by rememberRetained { mutableStateOf(persistentListOf<BookSummaryModel>()) }
43-
var currentStartIndex by rememberRetained { mutableStateOf(0) }
45+
var currentStartIndex by rememberRetained { mutableIntStateOf(START_INDEX) }
4446
var isLastPage by rememberRetained { mutableStateOf(false) }
4547

46-
fun searchBooks(query: String, startIndex: Int = 0) {
48+
fun searchBooks(query: String, startIndex: Int = START_INDEX) {
4749
scope.launch {
48-
if (startIndex == 0) {
50+
if (startIndex == START_INDEX) {
4951
uiState = UiState.Loading
5052
} else {
5153
footerState = FooterState.Loading
@@ -54,7 +56,7 @@ class SearchPresenter @AssistedInject constructor(
5456
bookRepository.searchBook(query = query, start = startIndex)
5557
.onSuccess { result ->
5658
searchResult = result
57-
books = if (startIndex == 0) {
59+
books = if (startIndex == START_INDEX) {
5860
result.books.toPersistentList()
5961
} else {
6062
(books + result.books).toPersistentList()
@@ -63,7 +65,7 @@ class SearchPresenter @AssistedInject constructor(
6365
currentStartIndex = startIndex
6466
isLastPage = result.books.size < PAGE_SIZE
6567

66-
if (startIndex == 0) {
68+
if (startIndex == START_INDEX) {
6769
uiState = UiState.Success
6870
} else {
6971
footerState = if (isLastPage) FooterState.End else FooterState.Idle
@@ -72,7 +74,7 @@ class SearchPresenter @AssistedInject constructor(
7274
.onFailure { exception ->
7375
Logger.d(exception)
7476
val errorMessage = exception.message ?: "알 수 없는 오류가 발생했습니다."
75-
if (startIndex == 0) {
77+
if (startIndex == START_INDEX) {
7678
uiState = UiState.Error(errorMessage)
7779
} else {
7880
footerState = FooterState.Error(errorMessage)
@@ -88,18 +90,18 @@ class SearchPresenter @AssistedInject constructor(
8890
}
8991

9092
is SearchUiEvent.OnSearch -> {
91-
searchBooks(query = event.text, startIndex = 0)
93+
searchBooks(query = event.text, startIndex = START_INDEX)
9294
}
9395

9496
is SearchUiEvent.OnLoadMore -> {
9597
if (footerState !is FooterState.Loading && !isLastPage && queryState.text.toString().isNotEmpty()) {
96-
searchBooks(query = queryState.text.toString(), startIndex = currentStartIndex + 1)
98+
searchBooks(query = queryState.text.toString(), startIndex = currentStartIndex + PAGE_SIZE)
9799
}
98100
}
99101

100102
is SearchUiEvent.OnRetryClick -> {
101103
if (queryState.text.toString().isNotEmpty()) {
102-
searchBooks(query = queryState.text.toString(), startIndex = 0)
104+
searchBooks(query = queryState.text.toString(), startIndex = START_INDEX)
103105
}
104106
}
105107

0 commit comments

Comments
 (0)