feat(home): 크리에이터 랭킹 ViewModel을 추가한다

This commit is contained in:
2026-06-08 17:41:25 +09:00
parent a4710ef6bb
commit 37dc3cd24a
2 changed files with 87 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
package kr.co.vividnext.sodalive.v2.main.home
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.orhanobut.logger.Logger
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.common.ToastMessage
import kr.co.vividnext.sodalive.v2.main.home.data.HomeCreatorRankingRepository
import kr.co.vividnext.sodalive.v2.main.home.model.HomeCreatorRankingUiState
import kr.co.vividnext.sodalive.v2.main.home.model.toCreatorRankingItems
class HomeCreatorRankingViewModel(
private val repository: HomeCreatorRankingRepository
) : BaseViewModel() {
private val _rankingStateLiveData = MutableLiveData<HomeCreatorRankingUiState>()
val rankingStateLiveData: LiveData<HomeCreatorRankingUiState>
get() = _rankingStateLiveData
private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData
private val _isLoading = MutableLiveData(false)
val isLoading: LiveData<Boolean>
get() = _isLoading
fun loadCreatorRankings() {
_isLoading.value = true
_rankingStateLiveData.value = HomeCreatorRankingUiState.Loading
compositeDisposable.add(
repository.getCreatorRankings(token = authToken())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
_isLoading.value = false
val data = it.data
if (it.success && data != null) {
val items = data.toCreatorRankingItems()
_rankingStateLiveData.value = if (items.isEmpty()) {
HomeCreatorRankingUiState.Empty
} else {
HomeCreatorRankingUiState.Content(items = items)
}
} else {
showUnknownError(it.message)
}
},
{
_isLoading.value = false
it.message?.let { message -> Logger.e(message) }
showUnknownError(it.message)
}
)
)
}
private fun showUnknownError(message: String?) {
_rankingStateLiveData.value = HomeCreatorRankingUiState.Error(message = message)
_toastLiveData.postValue(ToastMessage(resId = R.string.common_error_unknown))
}
private fun authToken(): String = "Bearer ${SharedPreferenceManager.token}"
}

View File

@@ -0,0 +1,17 @@
package kr.co.vividnext.sodalive.v2.main.home.model
import kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingItem
sealed interface HomeCreatorRankingUiState {
data object Loading : HomeCreatorRankingUiState
data class Content(
val items: List<CreatorRankingItem>
) : HomeCreatorRankingUiState
data object Empty : HomeCreatorRankingUiState
data class Error(
val message: String? = null
) : HomeCreatorRankingUiState
}