diff --git a/data/src/main/java/com/threegap/bitnagil/data/writeroutine/repositoryImpl/WriteRoutineRepositoryImpl.kt b/data/src/main/java/com/threegap/bitnagil/data/writeroutine/repositoryImpl/WriteRoutineRepositoryImpl.kt index 56fea541..942ac2a2 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/writeroutine/repositoryImpl/WriteRoutineRepositoryImpl.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/writeroutine/repositoryImpl/WriteRoutineRepositoryImpl.kt @@ -7,7 +7,11 @@ import com.threegap.bitnagil.data.writeroutine.model.request.RegisterRoutineRequ import com.threegap.bitnagil.domain.writeroutine.model.RepeatDay import com.threegap.bitnagil.domain.writeroutine.model.SubRoutineDiff import com.threegap.bitnagil.domain.writeroutine.model.Time +import com.threegap.bitnagil.domain.writeroutine.model.WriteRoutineEvent import com.threegap.bitnagil.domain.writeroutine.repository.WriteRoutineRepository +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.asSharedFlow import javax.inject.Inject class WriteRoutineRepositoryImpl @Inject constructor( @@ -20,7 +24,11 @@ class WriteRoutineRepositoryImpl @Inject constructor( executionTime = startTime.toFormattedString(), subRoutineName = subRoutines, ) - return writeRoutineDataSource.registerRoutine(request) + return writeRoutineDataSource.registerRoutine(request).also { + if (it.isSuccess) { + _writeRoutineEventFlow.emit(WriteRoutineEvent.AddRoutine) + } + } } override suspend fun editRoutine( @@ -40,6 +48,13 @@ class WriteRoutineRepositoryImpl @Inject constructor( }, ) - return writeRoutineDataSource.editRoutine(request) + return writeRoutineDataSource.editRoutine(request).also { + if (it.isSuccess) { + _writeRoutineEventFlow.emit(WriteRoutineEvent.EditRoutine(routineId)) + } + } } + + private val _writeRoutineEventFlow = MutableSharedFlow() + override suspend fun getWriteRoutineEventFlow(): Flow = _writeRoutineEventFlow.asSharedFlow() } diff --git a/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/WriteRoutineEvent.kt b/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/WriteRoutineEvent.kt new file mode 100644 index 00000000..9078b3f2 --- /dev/null +++ b/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/WriteRoutineEvent.kt @@ -0,0 +1,6 @@ +package com.threegap.bitnagil.domain.writeroutine.model + +sealed interface WriteRoutineEvent { + data object AddRoutine : WriteRoutineEvent + data class EditRoutine(val routineId: String) : WriteRoutineEvent +} diff --git a/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/repository/WriteRoutineRepository.kt b/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/repository/WriteRoutineRepository.kt index 4c6e134d..65ac5b63 100644 --- a/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/repository/WriteRoutineRepository.kt +++ b/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/repository/WriteRoutineRepository.kt @@ -3,6 +3,8 @@ package com.threegap.bitnagil.domain.writeroutine.repository import com.threegap.bitnagil.domain.writeroutine.model.RepeatDay import com.threegap.bitnagil.domain.writeroutine.model.SubRoutineDiff import com.threegap.bitnagil.domain.writeroutine.model.Time +import com.threegap.bitnagil.domain.writeroutine.model.WriteRoutineEvent +import kotlinx.coroutines.flow.Flow interface WriteRoutineRepository { suspend fun registerRoutine( @@ -19,4 +21,6 @@ interface WriteRoutineRepository { startTime: Time, subRoutines: List, ): Result + + suspend fun getWriteRoutineEventFlow(): Flow } diff --git a/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/usecase/GetWriteRoutineEventFlowUseCase.kt b/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/usecase/GetWriteRoutineEventFlowUseCase.kt new file mode 100644 index 00000000..b385e1b4 --- /dev/null +++ b/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/usecase/GetWriteRoutineEventFlowUseCase.kt @@ -0,0 +1,12 @@ +package com.threegap.bitnagil.domain.writeroutine.usecase + +import com.threegap.bitnagil.domain.writeroutine.model.WriteRoutineEvent +import com.threegap.bitnagil.domain.writeroutine.repository.WriteRoutineRepository +import kotlinx.coroutines.flow.Flow +import javax.inject.Inject + +class GetWriteRoutineEventFlowUseCase @Inject constructor( + private val repository: WriteRoutineRepository, +) { + suspend operator fun invoke(): Flow = repository.getWriteRoutineEventFlow() +} diff --git a/presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeViewModel.kt b/presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeViewModel.kt index 63dd2e80..4d560b72 100644 --- a/presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeViewModel.kt +++ b/presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeViewModel.kt @@ -11,6 +11,7 @@ import com.threegap.bitnagil.domain.routine.usecase.DeleteRoutineUseCase import com.threegap.bitnagil.domain.routine.usecase.FetchWeeklyRoutinesUseCase import com.threegap.bitnagil.domain.routine.usecase.RoutineCompletionUseCase import com.threegap.bitnagil.domain.user.usecase.FetchUserProfileUseCase +import com.threegap.bitnagil.domain.writeroutine.usecase.GetWriteRoutineEventFlowUseCase import com.threegap.bitnagil.presentation.common.mviviewmodel.MviViewModel import com.threegap.bitnagil.presentation.home.model.EmotionBallType import com.threegap.bitnagil.presentation.home.model.HomeIntent @@ -43,6 +44,7 @@ class HomeViewModel @Inject constructor( private val routineCompletionUseCase: RoutineCompletionUseCase, private val deleteRoutineUseCase: DeleteRoutineUseCase, private val deleteRoutineByDayUseCase: DeleteRoutineByDayUseCase, + private val getWriteRoutineEventFlowUseCase: GetWriteRoutineEventFlowUseCase, ) : MviViewModel( initState = HomeState(), savedStateHandle = savedStateHandle, @@ -52,6 +54,7 @@ class HomeViewModel @Inject constructor( private val routineSyncTrigger = MutableSharedFlow() init { + observeWriteRoutineEvent() observeWeekChanges() observeRoutineUpdates() fetchWeeklyRoutines(container.stateFlow.value.currentWeeks) @@ -228,6 +231,14 @@ class HomeViewModel @Inject constructor( return newState } + private fun observeWriteRoutineEvent() { + viewModelScope.launch { + getWriteRoutineEventFlowUseCase().collect { + fetchWeeklyRoutines(container.stateFlow.value.currentWeeks) + } + } + } + @OptIn(FlowPreview::class) private fun observeWeekChanges() { viewModelScope.launch {