From 384457ed97d94e177edc9851e2426ba900e76f53 Mon Sep 17 00:00:00 2001 From: yunsehwan Date: Wed, 30 Jul 2025 21:59:18 +0900 Subject: [PATCH 1/2] =?UTF-8?q?FEAT:=20=EB=A3=A8=ED=8B=B4=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1/=EC=88=98=EC=A0=95=EC=8B=9C=20=ED=99=88=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EB=A6=AC=ED=94=84=EB=A0=88=EC=8B=9C=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WriteRoutineRepositoryImpl.kt | 19 +++++++++++++++++-- .../writeroutine/model/WriteRoutineEvent.kt | 6 ++++++ .../repository/WriteRoutineRepository.kt | 4 ++++ .../GetWriteRoutineEventFlowUseCase.kt | 12 ++++++++++++ .../presentation/home/HomeViewModel.kt | 11 +++++++++++ 5 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/WriteRoutineEvent.kt create mode 100644 domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/usecase/GetWriteRoutineEventFlowUseCase.kt 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..9d006a25 --- /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..2aca47e9 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 { From 5bdd1466e073a033b22d12355f520652e6fe4dad Mon Sep 17 00:00:00 2001 From: yunsehwan Date: Wed, 30 Jul 2025 22:26:39 +0900 Subject: [PATCH 2/2] =?UTF-8?q?CHORE:=20ktlint=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../writeroutine/usecase/GetWriteRoutineEventFlowUseCase.kt | 6 +++--- .../threegap/bitnagil/presentation/home/HomeViewModel.kt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) 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 index 9d006a25..b385e1b4 100644 --- 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 @@ -6,7 +6,7 @@ import kotlinx.coroutines.flow.Flow import javax.inject.Inject class GetWriteRoutineEventFlowUseCase @Inject constructor( - private val repository: WriteRoutineRepository -){ - suspend operator fun invoke() : Flow = repository.getWriteRoutineEventFlow() + 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 2aca47e9..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 @@ -44,7 +44,7 @@ class HomeViewModel @Inject constructor( private val routineCompletionUseCase: RoutineCompletionUseCase, private val deleteRoutineUseCase: DeleteRoutineUseCase, private val deleteRoutineByDayUseCase: DeleteRoutineByDayUseCase, - private val getWriteRoutineEventFlowUseCase: GetWriteRoutineEventFlowUseCase + private val getWriteRoutineEventFlowUseCase: GetWriteRoutineEventFlowUseCase, ) : MviViewModel( initState = HomeState(), savedStateHandle = savedStateHandle,