feat(creator): 채널 신고 차단 동작을 연결한다
This commit is contained in:
@@ -463,7 +463,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
|
|||||||
factory { DmChatRepository(api = get(), realtimeClient = get()) }
|
factory { DmChatRepository(api = get(), realtimeClient = get()) }
|
||||||
factory { HomeCreatorRankingRepository(get()) }
|
factory { HomeCreatorRankingRepository(get()) }
|
||||||
factory { HomeRecommendationRepository(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 { CharacterTabRepository(get()) }
|
||||||
factory { CharacterDetailRepository(get(), get()) }
|
factory { CharacterDetailRepository(get(), get()) }
|
||||||
factory { CharacterGalleryRepository(get()) }
|
factory { CharacterGalleryRepository(get()) }
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import kr.co.vividnext.sodalive.R
|
import kr.co.vividnext.sodalive.R
|
||||||
import kr.co.vividnext.sodalive.base.BaseViewModel
|
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.SharedPreferenceManager
|
||||||
import kr.co.vividnext.sodalive.common.ToastMessage
|
import kr.co.vividnext.sodalive.common.ToastMessage
|
||||||
import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelHomeRepository
|
import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelHomeRepository
|
||||||
@@ -48,7 +49,7 @@ class CreatorChannelHomeViewModel(
|
|||||||
{
|
{
|
||||||
val data = it.data
|
val data = it.data
|
||||||
if (it.success && data != null) {
|
if (it.success && data != null) {
|
||||||
_homeStateLiveData.value = data.toUiContent()
|
_homeStateLiveData.value = data.toUiContent(currentMemberId = SharedPreferenceManager.userId)
|
||||||
} else {
|
} else {
|
||||||
showUnknownError(it.message)
|
showUnknownError(it.message)
|
||||||
}
|
}
|
||||||
@@ -84,6 +85,11 @@ class CreatorChannelHomeViewModel(
|
|||||||
_homeStateLiveData.value = content.copy(
|
_homeStateLiveData.value = content.copy(
|
||||||
header = content.header.copy(isFollow = follow, isNotify = notify)
|
header = content.header.copy(isFollow = follow, isNotify = notify)
|
||||||
)
|
)
|
||||||
|
if (!follow) {
|
||||||
|
_toastLiveData.value = CreatorChannelEvent(
|
||||||
|
ToastMessage(resId = R.string.creator_channel_unfollow_success)
|
||||||
|
)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
showUnknownErrorToast()
|
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?) {
|
private fun showUnknownError(message: String?) {
|
||||||
_homeStateLiveData.value = CreatorChannelHomeUiState.Error(message = message)
|
_homeStateLiveData.value = CreatorChannelHomeUiState.Error(message = message)
|
||||||
showUnknownErrorToast()
|
showUnknownErrorToast()
|
||||||
@@ -134,6 +212,10 @@ class CreatorChannelHomeViewModel(
|
|||||||
_toastLiveData.value = CreatorChannelEvent(ToastMessage(resId = R.string.common_error_unknown))
|
_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}"
|
private fun authToken(): String = "Bearer ${SharedPreferenceManager.token}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.TalkApi
|
||||||
import kr.co.vividnext.sodalive.chat.talk.room.CreateChatRoomRequest
|
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
|
import kr.co.vividnext.sodalive.user.UserRepository
|
||||||
|
|
||||||
class CreatorChannelHomeRepository(
|
class CreatorChannelHomeRepository(
|
||||||
private val api: CreatorChannelHomeApi,
|
private val api: CreatorChannelHomeApi,
|
||||||
private val userRepository: UserRepository,
|
private val userRepository: UserRepository,
|
||||||
private val talkApi: TalkApi
|
private val talkApi: TalkApi,
|
||||||
|
private val reportRepository: ReportRepository
|
||||||
) {
|
) {
|
||||||
fun getHome(creatorId: Long, token: String) = api.getHome(
|
fun getHome(creatorId: Long, token: String) = api.getHome(
|
||||||
creatorId = creatorId,
|
creatorId = creatorId,
|
||||||
@@ -30,4 +34,19 @@ class CreatorChannelHomeRepository(
|
|||||||
authHeader = token,
|
authHeader = token,
|
||||||
request = CreateChatRoomRequest(characterId)
|
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
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user