From d5956c024d4bb258a5208cd6ca0cf48e96d08730 Mon Sep 17 00:00:00 2001 From: klaus Date: Sat, 27 Apr 2024 01:25:02 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8B=9C=EB=A6=AC=EC=A6=88=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20-=20=ED=8C=94=EB=A1=9C=EC=9E=89=20=EC=95=A1?= =?UTF-8?q?=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../series/detail/SeriesDetailActivity.kt | 11 +++ .../series/detail/SeriesDetailViewModel.kt | 72 ++++++++++++++++++- .../java/kr/co/vividnext/sodalive/di/AppDI.kt | 2 +- 3 files changed, 83 insertions(+), 2 deletions(-) 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()) }