diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailActivity.kt index fe81955..7818ec4 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailActivity.kt @@ -182,7 +182,18 @@ class SeriesDetailActivity : BaseActivity( } binding.ivFollow.setOnClickListener { + if (creator.isFollow) { + viewModel.unFollow(creator.creatorId) { + creator.isFollow = false + binding.ivFollow.setImageResource(R.drawable.btn_follow_big) + } + } else { + viewModel.follow(creator.creatorId) { + creator.isFollow = true + binding.ivFollow.setImageResource(R.drawable.btn_following_big) + } + } } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailViewModel.kt index 52543da..3a54ce7 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailViewModel.kt @@ -8,8 +8,12 @@ import io.reactivex.rxjava3.schedulers.Schedulers import kr.co.vividnext.sodalive.audio_content.series.SeriesRepository import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.common.SharedPreferenceManager +import kr.co.vividnext.sodalive.user.UserRepository -class SeriesDetailViewModel(private val repository: SeriesRepository) : BaseViewModel() { +class SeriesDetailViewModel( + private val repository: SeriesRepository, + private val userRepository: UserRepository +) : BaseViewModel() { private val _toastLiveData = MutableLiveData() val toastLiveData: LiveData get() = _toastLiveData @@ -58,4 +62,70 @@ class SeriesDetailViewModel(private val repository: SeriesRepository) : BaseView ) ) } + + fun follow(creatorId: Long, onSuccess: () -> Unit) { + _isLoading.value = true + compositeDisposable.add( + userRepository.creatorFollow( + creatorId, + "Bearer ${SharedPreferenceManager.token}" + ) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { + if (it.success && it.data != null) { + onSuccess() + } else { + if (it.message != null) { + _toastLiveData.postValue(it.message) + } else { + _toastLiveData.postValue( + "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ) + } + } + _isLoading.value = false + }, + { + _isLoading.value = false + it.message?.let { message -> Logger.e(message) } + _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + } + ) + ) + } + + fun unFollow(creatorId: Long, onSuccess: () -> Unit) { + _isLoading.value = true + compositeDisposable.add( + userRepository.creatorUnFollow( + creatorId, + "Bearer ${SharedPreferenceManager.token}" + ) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { + if (it.success && it.data != null) { + onSuccess() + } else { + if (it.message != null) { + _toastLiveData.postValue(it.message) + } else { + _toastLiveData.postValue( + "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ) + } + } + _isLoading.value = false + }, + { + _isLoading.value = false + it.message?.let { message -> Logger.e(message) } + _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + } + ) + ) + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt index d2b7471..208fff7 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt @@ -209,7 +209,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { viewModel { EventViewModel(get()) } viewModel { NotificationSettingsViewModel(get()) } viewModel { SettingsViewModel(get()) } - viewModel { SeriesDetailViewModel(get()) } + viewModel { SeriesDetailViewModel(get(), get()) } viewModel { SeriesListAllViewModel(get()) } viewModel { SeriesContentAllViewModel(get()) } viewModel { SignOutViewModel(get()) }