feat(home): 팔로잉 ViewModel을 추가한다

This commit is contained in:
2026-06-25 22:22:32 +09:00
parent 502bbd4f35
commit 2128bbf197
2 changed files with 244 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
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.common.UtcRelativeTimeTextFormatter
import kr.co.vividnext.sodalive.v2.main.home.data.HomeFollowingRepository
import kr.co.vividnext.sodalive.v2.main.home.model.HomeFollowingUiState
import kr.co.vividnext.sodalive.v2.main.home.model.homeFollowingAuthHeader
import kr.co.vividnext.sodalive.v2.main.home.model.toUiState
class HomeFollowingViewModel(
private val repository: HomeFollowingRepository,
private val relativeTimeTextFormatter: UtcRelativeTimeTextFormatter
) : BaseViewModel() {
private val _followingStateLiveData = MutableLiveData<HomeFollowingUiState>()
val followingStateLiveData: LiveData<HomeFollowingUiState>
get() = _followingStateLiveData
private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData
private val _isLoading = MutableLiveData(false)
val isLoading: LiveData<Boolean>
get() = _isLoading
fun loadFollowing() {
_isLoading.value = true
_followingStateLiveData.value = HomeFollowingUiState.Loading
compositeDisposable.add(
repository.getFollowing(authHeader = authHeader())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
_isLoading.value = false
val data = it.data
if (it.success && data != null) {
_followingStateLiveData.value = data.toUiState(relativeTimeTextFormatter)
} else {
showUnknownError(it.message)
}
},
{
_isLoading.value = false
it.message?.let { message -> Logger.e(message) }
showUnknownError(it.message)
}
)
)
}
private fun showUnknownError(message: String?) {
_followingStateLiveData.value = HomeFollowingUiState.Error(message = message)
_toastLiveData.value = ToastMessage(resId = R.string.common_error_unknown)
}
private fun authHeader(): String? = homeFollowingAuthHeader(SharedPreferenceManager.token)
}