Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@ import com.threegap.bitnagil.data.onboarding.model.request.RegisterOnBoardingRec
import com.threegap.bitnagil.domain.onboarding.model.OnBoarding
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingAbstract
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingRecommendRoutine
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingRecommendRoutineEvent
import com.threegap.bitnagil.domain.onboarding.repository.OnBoardingRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import javax.inject.Inject

class OnBoardingRepositoryImpl @Inject constructor(
Expand Down Expand Up @@ -52,6 +56,13 @@ class OnBoardingRepositoryImpl @Inject constructor(
recommendedRoutineIds = selectedRecommendRoutineIds.mapNotNull { it.toIntOrNull() },
)

return onBoardingDataSource.registerRecommendRoutineList(selectedRecommendRoutineIds = request.recommendedRoutineIds)
return onBoardingDataSource.registerRecommendRoutineList(selectedRecommendRoutineIds = request.recommendedRoutineIds).also {
if (it.isSuccess) {
_onBoardingRecommendRoutineEventFlow.emit(OnBoardingRecommendRoutineEvent.AddRoutines(selectedRecommendRoutineIds))
}
}
}

private val _onBoardingRecommendRoutineEventFlow = MutableSharedFlow<OnBoardingRecommendRoutineEvent>()
override suspend fun getOnBoardingRecommendRoutineEventFlow(): Flow<OnBoardingRecommendRoutineEvent> = _onBoardingRecommendRoutineEventFlow.asSharedFlow()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.threegap.bitnagil.domain.onboarding.model

sealed interface OnBoardingRecommendRoutineEvent {
data class AddRoutines(val routineIds: List<String>) : OnBoardingRecommendRoutineEvent
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@ package com.threegap.bitnagil.domain.onboarding.repository
import com.threegap.bitnagil.domain.onboarding.model.OnBoarding
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingAbstract
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingRecommendRoutine
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingRecommendRoutineEvent
import kotlinx.coroutines.flow.Flow

interface OnBoardingRepository {
suspend fun getOnBoardingList(): List<OnBoarding>
suspend fun getOnBoardingAbstract(selectedItemIdsWithOnBoardingId: List<Pair<String, List<String>>>): OnBoardingAbstract
suspend fun getRecommendOnBoardingRouteList(selectedItemIdsWithOnBoardingId: List<Pair<String, List<String>>>): Result<List<OnBoardingRecommendRoutine>>
suspend fun registerRecommendRoutineList(selectedRecommendRoutineIds: List<String>): Result<Unit>
suspend fun getOnBoardingRecommendRoutineEventFlow(): Flow<OnBoardingRecommendRoutineEvent>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.threegap.bitnagil.domain.onboarding.usecase

import com.threegap.bitnagil.domain.onboarding.model.OnBoardingRecommendRoutineEvent
import com.threegap.bitnagil.domain.onboarding.repository.OnBoardingRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

class GetOnBoardingRecommendRoutineEventFlowUseCase @Inject constructor(
private val repository: OnBoardingRepository,
) {
suspend operator fun invoke(): Flow<OnBoardingRecommendRoutineEvent> {
return repository.getOnBoardingRecommendRoutineEventFlow()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.viewModelScope
import com.threegap.bitnagil.domain.emotion.usecase.GetEmotionChangeEventFlowUseCase
import com.threegap.bitnagil.domain.emotion.usecase.GetEmotionUseCase
import com.threegap.bitnagil.domain.onboarding.usecase.GetOnBoardingRecommendRoutineEventFlowUseCase
import com.threegap.bitnagil.domain.routine.model.RoutineCompletion
import com.threegap.bitnagil.domain.routine.model.RoutineCompletionInfo
import com.threegap.bitnagil.domain.routine.usecase.DeleteRoutineByDayUseCase
Expand Down Expand Up @@ -47,6 +48,7 @@ class HomeViewModel @Inject constructor(
private val deleteRoutineByDayUseCase: DeleteRoutineByDayUseCase,
private val getWriteRoutineEventFlowUseCase: GetWriteRoutineEventFlowUseCase,
private val getEmotionChangeEventFlowUseCase: GetEmotionChangeEventFlowUseCase,
private val getOnBoardingRecommendRoutineEventFlowUseCase: GetOnBoardingRecommendRoutineEventFlowUseCase,
) : MviViewModel<HomeState, HomeSideEffect, HomeIntent>(
initState = HomeState(),
savedStateHandle = savedStateHandle,
Expand All @@ -58,6 +60,7 @@ class HomeViewModel @Inject constructor(
init {
observeWriteRoutineEvent()
observeEmotionChangeEvent()
observeRecommendRoutineEvent()
observeWeekChanges()
observeRoutineUpdates()
fetchWeeklyRoutines(container.stateFlow.value.currentWeeks)
Expand Down Expand Up @@ -251,6 +254,14 @@ class HomeViewModel @Inject constructor(
}
}

private fun observeRecommendRoutineEvent() {
viewModelScope.launch {
getOnBoardingRecommendRoutineEventFlowUseCase().collect {
fetchWeeklyRoutines(stateFlow.value.currentWeeks)
}
}
}

@OptIn(FlowPreview::class)
private fun observeWeekChanges() {
viewModelScope.launch {
Expand Down