fix(settings): 로그아웃 시 로컬 채팅 메시지 전체 삭제 연동

- SettingsViewModel에 ChatRepository 주입 및 삭제 로직 처리
- DI(Koin) 수정으로 SettingsViewModel에 ChatRepository 바인딩
- 삭제 실패 시에도 사용자 로그아웃 흐름 유지
This commit is contained in:
2025-08-14 17:30:44 +09:00
parent 373752f592
commit ec60d4f143
3 changed files with 29 additions and 5 deletions

View File

@@ -288,7 +288,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
viewModel { EventViewModel(get()) }
viewModel { NotificationSettingsViewModel(get()) }
viewModel { ContentSettingsViewModel() }
viewModel { SettingsViewModel(get()) }
viewModel { SettingsViewModel(get(), get()) }
viewModel { SeriesDetailViewModel(get(), get()) }
viewModel { SeriesListAllViewModel(get()) }
viewModel { SeriesContentAllViewModel(get()) }

View File

@@ -191,7 +191,7 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>(ActivitySettingsB
alarmViewModel.truncate()
recentContentViewModel.truncate()
finishAffinity()
finishAffinity()
startActivity(Intent(applicationContext, SplashActivity::class.java))
}
}

View File

@@ -6,10 +6,14 @@ import com.orhanobut.logger.Logger
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.chat.talk.room.ChatRepository
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.user.UserRepository
class SettingsViewModel(private val userRepository: UserRepository) : BaseViewModel() {
class SettingsViewModel(
private val userRepository: UserRepository,
private val chatRepository: ChatRepository
) : BaseViewModel() {
private val _toastLiveData = MutableLiveData<String?>()
val toastLiveData: LiveData<String?>
get() = _toastLiveData
@@ -26,7 +30,18 @@ class SettingsViewModel(private val userRepository: UserRepository) : BaseViewMo
.subscribe(
{
if (it.success) {
onSuccess()
// ViewModel 레이어에서 로컬 채팅 메시지 삭제 후 onSuccess 호출
chatRepository.clearAllMessagesOnLogout()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
onSuccess()
}, { err ->
// 실패하더라도 UX를 위해 동일 흐름 진행
err.message?.let { msg -> Logger.w(msg) }
onSuccess()
})
.let { disposable -> compositeDisposable.add(disposable) }
} else {
if (it.message != null) {
_toastLiveData.postValue(it.message)
@@ -53,7 +68,16 @@ class SettingsViewModel(private val userRepository: UserRepository) : BaseViewMo
.subscribe(
{
if (it.success) {
onSuccess()
chatRepository.clearAllMessagesOnLogout()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
onSuccess()
}, { err ->
err.message?.let { msg -> Logger.w(msg) }
onSuccess()
})
.let { disposable -> compositeDisposable.add(disposable) }
} else {
if (it.message != null) {
_toastLiveData.postValue(it.message)