Skip to content

Commit 96d5468

Browse files
committed
FEAT: 감정 구슬 기반 추천 루틴 등록시 홈 화면에서 이를 감지하여 루틴 목록을 다시 조회하는 기능 구현
1 parent 4877f78 commit 96d5468

File tree

5 files changed

+45
-1
lines changed

5 files changed

+45
-1
lines changed

data/src/main/java/com/threegap/bitnagil/data/onboarding/repositoryImpl/OnBoardingRepositoryImpl.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ import com.threegap.bitnagil.data.onboarding.model.request.RegisterOnBoardingRec
77
import com.threegap.bitnagil.domain.onboarding.model.OnBoarding
88
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingAbstract
99
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingRecommendRoutine
10+
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingRecommendRoutineEvent
1011
import com.threegap.bitnagil.domain.onboarding.repository.OnBoardingRepository
12+
import kotlinx.coroutines.flow.Flow
13+
import kotlinx.coroutines.flow.MutableSharedFlow
14+
import kotlinx.coroutines.flow.asSharedFlow
1115
import javax.inject.Inject
1216

1317
class OnBoardingRepositoryImpl @Inject constructor(
@@ -52,6 +56,13 @@ class OnBoardingRepositoryImpl @Inject constructor(
5256
recommendedRoutineIds = selectedRecommendRoutineIds.mapNotNull { it.toIntOrNull() },
5357
)
5458

55-
return onBoardingDataSource.registerRecommendRoutineList(selectedRecommendRoutineIds = request.recommendedRoutineIds)
59+
return onBoardingDataSource.registerRecommendRoutineList(selectedRecommendRoutineIds = request.recommendedRoutineIds).also {
60+
if (it.isSuccess) {
61+
_onBoardingRecommendRoutineEventFlow.emit(OnBoardingRecommendRoutineEvent.AddRoutines(selectedRecommendRoutineIds))
62+
}
63+
}
5664
}
65+
66+
private val _onBoardingRecommendRoutineEventFlow = MutableSharedFlow<OnBoardingRecommendRoutineEvent>()
67+
override suspend fun getOnBoardingRecommendRoutineEventFlow(): Flow<OnBoardingRecommendRoutineEvent> = _onBoardingRecommendRoutineEventFlow.asSharedFlow()
5768
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.threegap.bitnagil.domain.onboarding.model
2+
3+
sealed interface OnBoardingRecommendRoutineEvent {
4+
data class AddRoutines(val routineIds: List<String>) : OnBoardingRecommendRoutineEvent
5+
}

domain/src/main/java/com/threegap/bitnagil/domain/onboarding/repository/OnBoardingRepository.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ package com.threegap.bitnagil.domain.onboarding.repository
33
import com.threegap.bitnagil.domain.onboarding.model.OnBoarding
44
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingAbstract
55
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingRecommendRoutine
6+
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingRecommendRoutineEvent
7+
import kotlinx.coroutines.flow.Flow
68

79
interface OnBoardingRepository {
810
suspend fun getOnBoardingList(): List<OnBoarding>
911
suspend fun getOnBoardingAbstract(selectedItemIdsWithOnBoardingId: List<Pair<String, List<String>>>): OnBoardingAbstract
1012
suspend fun getRecommendOnBoardingRouteList(selectedItemIdsWithOnBoardingId: List<Pair<String, List<String>>>): Result<List<OnBoardingRecommendRoutine>>
1113
suspend fun registerRecommendRoutineList(selectedRecommendRoutineIds: List<String>): Result<Unit>
14+
suspend fun getOnBoardingRecommendRoutineEventFlow(): Flow<OnBoardingRecommendRoutineEvent>
1215
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.threegap.bitnagil.domain.onboarding.usecase
2+
3+
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingRecommendRoutineEvent
4+
import com.threegap.bitnagil.domain.onboarding.repository.OnBoardingRepository
5+
import kotlinx.coroutines.flow.Flow
6+
import javax.inject.Inject
7+
8+
class GetOnBoardingRecommendRoutineEventFlowUseCase @Inject constructor(
9+
private val repository: OnBoardingRepository,
10+
) {
11+
suspend operator fun invoke(): Flow<OnBoardingRecommendRoutineEvent> {
12+
return repository.getOnBoardingRecommendRoutineEventFlow()
13+
}
14+
}

presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeViewModel.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.lifecycle.SavedStateHandle
55
import androidx.lifecycle.viewModelScope
66
import com.threegap.bitnagil.domain.emotion.usecase.GetEmotionChangeEventFlowUseCase
77
import com.threegap.bitnagil.domain.emotion.usecase.GetEmotionUseCase
8+
import com.threegap.bitnagil.domain.onboarding.usecase.GetOnBoardingRecommendRoutineEventFlowUseCase
89
import com.threegap.bitnagil.domain.routine.model.RoutineCompletion
910
import com.threegap.bitnagil.domain.routine.model.RoutineCompletionInfo
1011
import com.threegap.bitnagil.domain.routine.usecase.DeleteRoutineByDayUseCase
@@ -47,6 +48,7 @@ class HomeViewModel @Inject constructor(
4748
private val deleteRoutineByDayUseCase: DeleteRoutineByDayUseCase,
4849
private val getWriteRoutineEventFlowUseCase: GetWriteRoutineEventFlowUseCase,
4950
private val getEmotionChangeEventFlowUseCase: GetEmotionChangeEventFlowUseCase,
51+
private val getOnBoardingRecommendRoutineEventFlowUseCase: GetOnBoardingRecommendRoutineEventFlowUseCase,
5052
) : MviViewModel<HomeState, HomeSideEffect, HomeIntent>(
5153
initState = HomeState(),
5254
savedStateHandle = savedStateHandle,
@@ -58,6 +60,7 @@ class HomeViewModel @Inject constructor(
5860
init {
5961
observeWriteRoutineEvent()
6062
observeEmotionChangeEvent()
63+
observeRecommendRoutineEvent()
6164
observeWeekChanges()
6265
observeRoutineUpdates()
6366
fetchWeeklyRoutines(container.stateFlow.value.currentWeeks)
@@ -251,6 +254,14 @@ class HomeViewModel @Inject constructor(
251254
}
252255
}
253256

257+
private fun observeRecommendRoutineEvent() {
258+
viewModelScope.launch {
259+
getOnBoardingRecommendRoutineEventFlowUseCase().collect {
260+
fetchWeeklyRoutines(stateFlow.value.currentWeeks)
261+
}
262+
}
263+
}
264+
254265
@OptIn(FlowPreview::class)
255266
private fun observeWeekChanges() {
256267
viewModelScope.launch {

0 commit comments

Comments
 (0)