Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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.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(
Expand All @@ -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(
Expand All @@ -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<WriteRoutineEvent>()
override suspend fun getWriteRoutineEventFlow(): Flow<WriteRoutineEvent> = _writeRoutineEventFlow.asSharedFlow()
}
Original file line number Diff line number Diff line change
@@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -19,4 +21,6 @@ interface WriteRoutineRepository {
startTime: Time,
subRoutines: List<SubRoutineDiff>,
): Result<Unit>

suspend fun getWriteRoutineEventFlow(): Flow<WriteRoutineEvent>
}
Original file line number Diff line number Diff line change
@@ -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<WriteRoutineEvent> = repository.getWriteRoutineEventFlow()
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<HomeState, HomeSideEffect, HomeIntent>(
initState = HomeState(),
savedStateHandle = savedStateHandle,
Expand All @@ -52,6 +54,7 @@ class HomeViewModel @Inject constructor(
private val routineSyncTrigger = MutableSharedFlow<LocalDate>()

init {
observeWriteRoutineEvent()
observeWeekChanges()
observeRoutineUpdates()
fetchWeeklyRoutines(container.stateFlow.value.currentWeeks)
Expand Down Expand Up @@ -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 {
Expand Down