@@ -3,14 +3,12 @@ package com.terning.feature.mypage.mypage
33import androidx.lifecycle.ViewModel
44import androidx.lifecycle.viewModelScope
55import com.kakao.sdk.user.UserApiClient
6- import com.terning.core.designsystem.extension.groupBy
76import com.terning.core.designsystem.state.UiState
87import com.terning.core.designsystem.type.AlarmType.DISABLED
98import com.terning.core.designsystem.type.AlarmType.ENABLED
109import com.terning.domain.mypage.entity.AlarmStatus
1110import com.terning.domain.mypage.repository.MyPageRepository
1211import com.terning.domain.user.repository.UserRepository
13- import com.terning.feature.mypage.mypage.model.AlarmInfo
1412import dagger.hilt.android.lifecycle.HiltViewModel
1513import kotlinx.coroutines.ExperimentalCoroutinesApi
1614import kotlinx.coroutines.FlowPreview
@@ -21,7 +19,6 @@ import kotlinx.coroutines.flow.StateFlow
2119import kotlinx.coroutines.flow.asSharedFlow
2220import kotlinx.coroutines.flow.asStateFlow
2321import kotlinx.coroutines.flow.debounce
24- import kotlinx.coroutines.flow.flatMapMerge
2522import kotlinx.coroutines.flow.update
2623import kotlinx.coroutines.launch
2724import javax.inject.Inject
@@ -40,22 +37,25 @@ class MyPageViewModel @Inject constructor(
4037 private val _sideEffects = MutableSharedFlow <MyPageSideEffect >()
4138 val sideEffects: SharedFlow <MyPageSideEffect > get() = _sideEffects .asSharedFlow()
4239
43- private val debounceFlow = MutableSharedFlow <AlarmInfo >()
40+ private val debounceFlow = MutableSharedFlow <Boolean >()
4441
45- private val lastSuccessfulAlarmStatus = mutableMapOf< String , Boolean >()
42+ private var lastSuccessfulAlarmStatus: Boolean? = null
4643
4744 init {
45+ handleDebouncedAlarm()
46+ }
47+
48+ private fun handleDebouncedAlarm () {
4849 viewModelScope.launch {
4950 debounceFlow
50- .groupBy { it.id }
51- .flatMapMerge { (_, flow) -> flow.debounce(DEBOUNCE_DURATION ) }
52- .collect { info ->
51+ .debounce(DEBOUNCE_DURATION )
52+ .collect { isEnabled ->
5353 myPageRepository.updateAlarmState(
54- AlarmStatus (if (info.isAlarmAvailable ) ENABLED .value else DISABLED .value)
54+ AlarmStatus (if (isEnabled ) ENABLED .value else DISABLED .value)
5555 ).onSuccess {
56- lastSuccessfulAlarmStatus[info.id] = info.isAlarmAvailable
56+ lastSuccessfulAlarmStatus = isEnabled
5757 }.onFailure {
58- val previous = lastSuccessfulAlarmStatus[info.id] ? : ! info.isAlarmAvailable
58+ val previous = lastSuccessfulAlarmStatus ? : ! isEnabled
5959 _state .update { currentState ->
6060 currentState.copy(alarmStatus = if (previous) ENABLED .value else DISABLED .value)
6161 }
@@ -180,7 +180,7 @@ class MyPageViewModel @Inject constructor(
180180 userRepository.setAlarmAvailable(availability)
181181
182182 viewModelScope.launch {
183- debounceFlow.emit(AlarmInfo (id = DEBOUNCE_KEY , isAlarmAvailable = availability) )
183+ debounceFlow.emit(availability)
184184 }
185185 }
186186
@@ -196,6 +196,5 @@ class MyPageViewModel @Inject constructor(
196196
197197 companion object {
198198 private const val DEBOUNCE_DURATION = 300L
199- private const val DEBOUNCE_KEY = " NOTIFICATION"
200199 }
201200}
0 commit comments