Skip to content

Commit f70ba8d

Browse files
author
eshc123
committed
refactor: 페이지 계산 개선
1 parent 797207c commit f70ba8d

File tree

4 files changed

+40
-14
lines changed

4 files changed

+40
-14
lines changed

core/data/history/src/main/java/com/goalpanzi/mission_mate/core/data/history/repository/HistoryRepositoryImpl.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,15 @@ import javax.inject.Inject
1212
class HistoryRepositoryImpl @Inject constructor(
1313
private val historyService: HistoryService
1414
) : HistoryRepository {
15-
override suspend fun getMissionHistories(page: Int): DomainResult<MissionHistories> =
15+
override suspend fun getMissionHistories(
16+
page: Int,
17+
pageSize: Int
18+
): DomainResult<MissionHistories> =
1619
handleResult {
17-
historyService.getMyMissionHistories(page)
20+
historyService.getMyMissionHistories(
21+
page = page,
22+
pageSize = pageSize
23+
)
1824
}.convert {
1925
it.toModel()
2026
}

core/domain/history/src/main/java/com/goalpanzi/mission_mate/core/domain/history/repository/HistoryRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ import com.goalpanzi.mission_mate.core.domain.common.DomainResult
44
import com.goalpanzi.mission_mate.core.domain.history.model.MissionHistories
55

66
interface HistoryRepository {
7-
suspend fun getMissionHistories(page: Int) : DomainResult<MissionHistories>
7+
suspend fun getMissionHistories(page: Int, pageSize: Int) : DomainResult<MissionHistories>
88
}

core/domain/history/src/main/java/com/goalpanzi/mission_mate/core/domain/history/usecase/GetMissionHistoriesUseCase.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,16 @@ import javax.inject.Inject
1010
class GetMissionHistoriesUseCase @Inject constructor(
1111
private val historyRepository: HistoryRepository
1212
) {
13-
operator fun invoke(page: Int) : Flow<DomainResult<MissionHistories>> = flow {
14-
emit(historyRepository.getMissionHistories(page))
13+
operator fun invoke(
14+
page: Int,
15+
pageSize: Int
16+
): Flow<DomainResult<MissionHistories>> = flow {
17+
emit(
18+
historyRepository.getMissionHistories(
19+
page = page,
20+
pageSize = pageSize
21+
)
22+
)
1523
}
1624
}
1725

feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/HistoryViewModel.kt

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.goalpanzi.mission_mate.feature.history
22

3-
import android.util.Log
43
import androidx.lifecycle.ViewModel
54
import androidx.lifecycle.viewModelScope
65
import com.goalpanzi.mission_mate.core.domain.common.DomainResult
@@ -19,34 +18,34 @@ class HistoryViewModel @Inject constructor(
1918
private val getMissionHistoriesUseCase: GetMissionHistoriesUseCase
2019
) : ViewModel() {
2120

22-
private var _page = 0
23-
2421
private val _historyState = MutableStateFlow<HistoryUiState>(HistoryUiState.Loading)
2522
val historyState: StateFlow<HistoryUiState> = _historyState.asStateFlow()
2623

2724
fun initHistories() {
2825
viewModelScope.launch {
2926
_historyState.emit(HistoryUiState.Loading)
30-
getHistories(0)
27+
getHistories()
3128
}
3229
}
3330

3431
fun refresh() {
3532
viewModelScope.launch {
3633
_historyState.emit(HistoryUiState.Refreshing)
37-
getHistories(0)
34+
getHistories()
3835
}
3936
}
4037

4138
fun fetchHistories() {
4239
viewModelScope.launch {
43-
getHistories(_page + 1)
40+
getHistories(getNextPage())
4441
}
4542
}
4643

47-
private suspend fun getHistories(page: Int) {
48-
_page = page
49-
getMissionHistoriesUseCase(page).collect { result ->
44+
private suspend fun getHistories(page: Int = 0) {
45+
getMissionHistoriesUseCase(
46+
page = page,
47+
pageSize = HISTORIES_PAGE_SIZE
48+
).collect { result ->
5049
val uiState = when (result) {
5150
is DomainResult.Success -> {
5251
val data = result.data.toUiModel()
@@ -75,4 +74,17 @@ class HistoryViewModel @Inject constructor(
7574
return if (historyUiState is HistoryUiState.Success) historyUiState.histories.resultList
7675
else emptyList()
7776
}
77+
78+
private fun getNextPage() : Int {
79+
return when(val state = historyState.value) {
80+
is HistoryUiState.Success -> {
81+
(state.histories.resultList.size % HISTORIES_PAGE_SIZE) + 1
82+
}
83+
else -> 0
84+
}
85+
}
86+
87+
companion object {
88+
private const val HISTORIES_PAGE_SIZE = 30
89+
}
7890
}

0 commit comments

Comments
 (0)