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 97aeed66..78b542b4 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 @@ -463,7 +463,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { factory { DmChatRepository(api = get(), realtimeClient = get()) } factory { HomeCreatorRankingRepository(get()) } factory { HomeRecommendationRepository(get()) } - factory { CreatorChannelHomeRepository(api = get(), userRepository = get(), talkApi = get()) } + factory { CreatorChannelHomeRepository(api = get(), userRepository = get(), talkApi = get(), reportRepository = get()) } factory { CharacterTabRepository(get()) } factory { CharacterDetailRepository(get(), get()) } factory { CharacterGalleryRepository(get()) } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeViewModel.kt index 09b952af..3f0d7736 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeViewModel.kt @@ -7,6 +7,7 @@ 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.SodaLiveApplicationHolder import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.ToastMessage import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelHomeRepository @@ -48,7 +49,7 @@ class CreatorChannelHomeViewModel( { val data = it.data if (it.success && data != null) { - _homeStateLiveData.value = data.toUiContent() + _homeStateLiveData.value = data.toUiContent(currentMemberId = SharedPreferenceManager.userId) } else { showUnknownError(it.message) } @@ -84,6 +85,11 @@ class CreatorChannelHomeViewModel( _homeStateLiveData.value = content.copy( header = content.header.copy(isFollow = follow, isNotify = notify) ) + if (!follow) { + _toastLiveData.value = CreatorChannelEvent( + ToastMessage(resId = R.string.creator_channel_unfollow_success) + ) + } } else { showUnknownErrorToast() } @@ -125,6 +131,78 @@ class CreatorChannelHomeViewModel( ) } + fun blockUser() { + val content = _homeStateLiveData.value as? CreatorChannelHomeUiState.Content ?: return + + compositeDisposable.add( + repository.blockUser(content.header.creatorId, authToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { + if (it.success) { + _toastLiveData.value = CreatorChannelEvent( + ToastMessage(resId = R.string.creator_channel_block_success) + ) + } else { + showUnknownErrorToast() + } + }, + { + it.message?.let { message -> Logger.e(message) } + showUnknownErrorToast() + } + ) + ) + } + + fun reportUser(reason: String) { + val content = _homeStateLiveData.value as? CreatorChannelHomeUiState.Content ?: return + + compositeDisposable.add( + repository.reportUser(content.header.creatorId, reason, authToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { + if (it.success) { + showReportSubmittedToast() + } else { + showUnknownErrorToast() + } + }, + { + it.message?.let { message -> Logger.e(message) } + showUnknownErrorToast() + } + ) + ) + } + + fun reportProfile() { + val content = _homeStateLiveData.value as? CreatorChannelHomeUiState.Content ?: return + val reason = SodaLiveApplicationHolder.get().getString(R.string.dialog_member_profile_report_profile) + + compositeDisposable.add( + repository.reportProfile(content.header.creatorId, reason, authToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { + if (it.success) { + showReportSubmittedToast() + } else { + showUnknownErrorToast() + } + }, + { + it.message?.let { message -> Logger.e(message) } + showUnknownErrorToast() + } + ) + ) + } + private fun showUnknownError(message: String?) { _homeStateLiveData.value = CreatorChannelHomeUiState.Error(message = message) showUnknownErrorToast() @@ -134,6 +212,10 @@ class CreatorChannelHomeViewModel( _toastLiveData.value = CreatorChannelEvent(ToastMessage(resId = R.string.common_error_unknown)) } + private fun showReportSubmittedToast() { + _toastLiveData.value = CreatorChannelEvent(ToastMessage(resId = R.string.character_comment_report_submitted)) + } + private fun authToken(): String = "Bearer ${SharedPreferenceManager.token}" } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/data/CreatorChannelHomeRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/data/CreatorChannelHomeRepository.kt index 8e839b01..106e2a97 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/data/CreatorChannelHomeRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/data/CreatorChannelHomeRepository.kt @@ -2,12 +2,16 @@ package kr.co.vividnext.sodalive.v2.creator.channel.data import kr.co.vividnext.sodalive.chat.talk.TalkApi import kr.co.vividnext.sodalive.chat.talk.room.CreateChatRoomRequest +import kr.co.vividnext.sodalive.report.ReportRepository +import kr.co.vividnext.sodalive.report.ReportRequest +import kr.co.vividnext.sodalive.report.ReportType import kr.co.vividnext.sodalive.user.UserRepository class CreatorChannelHomeRepository( private val api: CreatorChannelHomeApi, private val userRepository: UserRepository, - private val talkApi: TalkApi + private val talkApi: TalkApi, + private val reportRepository: ReportRepository ) { fun getHome(creatorId: Long, token: String) = api.getHome( creatorId = creatorId, @@ -30,4 +34,19 @@ class CreatorChannelHomeRepository( authHeader = token, request = CreateChatRoomRequest(characterId) ) + + fun blockUser(userId: Long, token: String) = userRepository.memberBlock( + userId = userId, + token = token + ) + + fun reportUser(userId: Long, reason: String, token: String) = reportRepository.report( + request = ReportRequest(ReportType.USER, reason, reportedMemberId = userId), + token = token + ) + + fun reportProfile(userId: Long, reason: String, token: String) = reportRepository.report( + request = ReportRequest(ReportType.PROFILE, reason, reportedMemberId = userId), + token = token + ) }