Skip to content

Commit 93e4e37

Browse files
committed
[CHORE/#396] groupBy 확장함수 없이 구현
1 parent a42ed2a commit 93e4e37

1 file changed

Lines changed: 12 additions & 13 deletions

File tree

feature/mypage/src/main/java/com/terning/feature/mypage/mypage/MyPageViewModel.kt

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@ package com.terning.feature.mypage.mypage
33
import androidx.lifecycle.ViewModel
44
import androidx.lifecycle.viewModelScope
55
import com.kakao.sdk.user.UserApiClient
6-
import com.terning.core.designsystem.extension.groupBy
76
import com.terning.core.designsystem.state.UiState
87
import com.terning.core.designsystem.type.AlarmType.DISABLED
98
import com.terning.core.designsystem.type.AlarmType.ENABLED
109
import com.terning.domain.mypage.entity.AlarmStatus
1110
import com.terning.domain.mypage.repository.MyPageRepository
1211
import com.terning.domain.user.repository.UserRepository
13-
import com.terning.feature.mypage.mypage.model.AlarmInfo
1412
import dagger.hilt.android.lifecycle.HiltViewModel
1513
import kotlinx.coroutines.ExperimentalCoroutinesApi
1614
import kotlinx.coroutines.FlowPreview
@@ -21,7 +19,6 @@ import kotlinx.coroutines.flow.StateFlow
2119
import kotlinx.coroutines.flow.asSharedFlow
2220
import kotlinx.coroutines.flow.asStateFlow
2321
import kotlinx.coroutines.flow.debounce
24-
import kotlinx.coroutines.flow.flatMapMerge
2522
import kotlinx.coroutines.flow.update
2623
import kotlinx.coroutines.launch
2724
import 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

Comments
 (0)