diff --git a/app/src/main/java/com/threegap/bitnagil/MainNavHost.kt b/app/src/main/java/com/threegap/bitnagil/MainNavHost.kt index e06ad28c..6e1fdc00 100644 --- a/app/src/main/java/com/threegap/bitnagil/MainNavHost.kt +++ b/app/src/main/java/com/threegap/bitnagil/MainNavHost.kt @@ -2,6 +2,7 @@ package com.threegap.bitnagil import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.toRoute @@ -15,6 +16,8 @@ import com.threegap.bitnagil.presentation.splash.SplashScreenContainer import com.threegap.bitnagil.presentation.terms.TermsAgreementScreenContainer import com.threegap.bitnagil.presentation.webview.BitnagilWebViewScreen import com.threegap.bitnagil.presentation.writeroutine.WriteRoutineScreenContainer +import com.threegap.bitnagil.presentation.writeroutine.WriteRoutineViewModel +import com.threegap.bitnagil.presentation.writeroutine.model.navarg.WriteRoutineScreenArg @Composable fun MainNavHost( @@ -162,8 +165,20 @@ fun MainNavHost( ) } - composable { + composable { navBackStackEntry -> + val arg = navBackStackEntry.toRoute() + val writeScreenNavArg = if (arg.isRegister) { + WriteRoutineScreenArg.Add(baseRoutineId = arg.routineId) + } else { + WriteRoutineScreenArg.Edit(routineId = arg.routineId!!) + } + + val viewModel = hiltViewModel { factory -> + factory.create(writeScreenNavArg) + } + WriteRoutineScreenContainer( + viewModel = viewModel, navigateToBack = { navigator.navController.popBackStack() }, diff --git a/data/src/main/java/com/threegap/bitnagil/data/auth/datasourceimpl/AuthRemoteDataSourceImpl.kt b/data/src/main/java/com/threegap/bitnagil/data/auth/datasourceimpl/AuthRemoteDataSourceImpl.kt index d792438b..844158da 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/auth/datasourceimpl/AuthRemoteDataSourceImpl.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/auth/datasourceimpl/AuthRemoteDataSourceImpl.kt @@ -18,7 +18,7 @@ class AuthRemoteDataSourceImpl @Inject constructor( } override suspend fun submitAgreement(termsAgreementRequestDto: TermsAgreementRequestDto): Result = - safeApiCall { + safeUnitApiCall { authService.submitAgreement(termsAgreementRequestDto) } diff --git a/data/src/main/java/com/threegap/bitnagil/data/emotion/datasource/EmotionDataSource.kt b/data/src/main/java/com/threegap/bitnagil/data/emotion/datasource/EmotionDataSource.kt index 1267dd6a..0171fe2f 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/emotion/datasource/EmotionDataSource.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/emotion/datasource/EmotionDataSource.kt @@ -1,11 +1,11 @@ package com.threegap.bitnagil.data.emotion.datasource -import com.threegap.bitnagil.data.emotion.model.response.GetEmotionsResponse +import com.threegap.bitnagil.data.emotion.model.dto.EmotionDto import com.threegap.bitnagil.data.emotion.model.response.MyEmotionResponseDto import com.threegap.bitnagil.data.emotion.model.response.RegisterEmotionResponse interface EmotionDataSource { - suspend fun getEmotions(): Result + suspend fun getEmotions(): Result> suspend fun registerEmotion(emotion: String): Result suspend fun getMyEmotionMarble(currentDate: String): Result } diff --git a/data/src/main/java/com/threegap/bitnagil/data/emotion/datasourceImpl/EmotionDataSourceImpl.kt b/data/src/main/java/com/threegap/bitnagil/data/emotion/datasourceImpl/EmotionDataSourceImpl.kt index 674c25ea..16cd3a1b 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/emotion/datasourceImpl/EmotionDataSourceImpl.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/emotion/datasourceImpl/EmotionDataSourceImpl.kt @@ -2,8 +2,8 @@ package com.threegap.bitnagil.data.emotion.datasourceImpl import com.threegap.bitnagil.data.common.safeApiCall import com.threegap.bitnagil.data.emotion.datasource.EmotionDataSource +import com.threegap.bitnagil.data.emotion.model.dto.EmotionDto import com.threegap.bitnagil.data.emotion.model.request.RegisterEmotionRequest -import com.threegap.bitnagil.data.emotion.model.response.GetEmotionsResponse import com.threegap.bitnagil.data.emotion.model.response.MyEmotionResponseDto import com.threegap.bitnagil.data.emotion.model.response.RegisterEmotionResponse import com.threegap.bitnagil.data.emotion.service.EmotionService @@ -12,7 +12,7 @@ import javax.inject.Inject class EmotionDataSourceImpl @Inject constructor( private val emotionService: EmotionService, ) : EmotionDataSource { - override suspend fun getEmotions(): Result { + override suspend fun getEmotions(): Result> { return safeApiCall { emotionService.getEmotions() } diff --git a/data/src/main/java/com/threegap/bitnagil/data/emotion/model/dto/EmotionDto.kt b/data/src/main/java/com/threegap/bitnagil/data/emotion/model/dto/EmotionDto.kt new file mode 100644 index 00000000..c9f8e652 --- /dev/null +++ b/data/src/main/java/com/threegap/bitnagil/data/emotion/model/dto/EmotionDto.kt @@ -0,0 +1,14 @@ +package com.threegap.bitnagil.data.emotion.model.dto + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class EmotionDto( + @SerialName("emotionMarbleType") + val emotionMarbleType: String, + @SerialName("emotionMarbleName") + val emotionMarbleName: String, + @SerialName("imageUrl") + val imageUrl: String, +) diff --git a/data/src/main/java/com/threegap/bitnagil/data/emotion/model/dto/EmotionRecommendedRoutineDto.kt b/data/src/main/java/com/threegap/bitnagil/data/emotion/model/dto/EmotionRecommendedRoutineDto.kt index 46c6b5ff..497acdb3 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/emotion/model/dto/EmotionRecommendedRoutineDto.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/emotion/model/dto/EmotionRecommendedRoutineDto.kt @@ -9,8 +9,8 @@ data class EmotionRecommendedRoutineDto( val recommendedRoutineId: Int, @SerialName("recommendedRoutineName") val recommendedRoutineName: String, - @SerialName("routineDescription") - val routineDescription: String, - @SerialName("recommendedSubRoutines") - val recommendedSubRoutines: List, + @SerialName("recommendedRoutineDescription") + val recommendedRoutineDescription: String, + @SerialName("recommendedSubRoutineSearchResult") + val recommendedSubRoutineSearchResult: List, ) diff --git a/data/src/main/java/com/threegap/bitnagil/data/emotion/model/response/GetEmotionsResponse.kt b/data/src/main/java/com/threegap/bitnagil/data/emotion/model/response/GetEmotionsResponse.kt deleted file mode 100644 index b6f1fe6c..00000000 --- a/data/src/main/java/com/threegap/bitnagil/data/emotion/model/response/GetEmotionsResponse.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.threegap.bitnagil.data.emotion.model.response - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class GetEmotionsResponse( - @SerialName("emotionMarbleTypes") - val emotionMarbleTypes: List, -) diff --git a/data/src/main/java/com/threegap/bitnagil/data/emotion/repositoryImpl/EmotionRepositoryImpl.kt b/data/src/main/java/com/threegap/bitnagil/data/emotion/repositoryImpl/EmotionRepositoryImpl.kt index 740a6274..55ceb838 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/emotion/repositoryImpl/EmotionRepositoryImpl.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/emotion/repositoryImpl/EmotionRepositoryImpl.kt @@ -12,8 +12,8 @@ class EmotionRepositoryImpl @Inject constructor( ) : EmotionRepository { override suspend fun getEmotions(): Result> { return emotionDataSource.getEmotions().map { response -> - response.emotionMarbleTypes.mapNotNull { - when (it) { + response.mapNotNull { + when (it.emotionMarbleType) { "CALM" -> Emotion.CALM "VITALITY" -> Emotion.VITALITY "LETHARGY" -> Emotion.LETHARGY diff --git a/data/src/main/java/com/threegap/bitnagil/data/emotion/service/EmotionService.kt b/data/src/main/java/com/threegap/bitnagil/data/emotion/service/EmotionService.kt index 82eb3dcb..2ee69e88 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/emotion/service/EmotionService.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/emotion/service/EmotionService.kt @@ -1,7 +1,7 @@ package com.threegap.bitnagil.data.emotion.service +import com.threegap.bitnagil.data.emotion.model.dto.EmotionDto import com.threegap.bitnagil.data.emotion.model.request.RegisterEmotionRequest -import com.threegap.bitnagil.data.emotion.model.response.GetEmotionsResponse import com.threegap.bitnagil.data.emotion.model.response.MyEmotionResponseDto import com.threegap.bitnagil.data.emotion.model.response.RegisterEmotionResponse import com.threegap.bitnagil.network.model.BaseResponse @@ -12,7 +12,7 @@ import retrofit2.http.Query interface EmotionService { @GET("/api/v1/emotion-marbles") - suspend fun getEmotions(): BaseResponse + suspend fun getEmotions(): BaseResponse> @POST("/api/v1/emotion-marbles") suspend fun postEmotions( diff --git a/data/src/main/java/com/threegap/bitnagil/data/onboarding/datasourceImpl/OnBoardingDataSourceImpl.kt b/data/src/main/java/com/threegap/bitnagil/data/onboarding/datasourceImpl/OnBoardingDataSourceImpl.kt index c5703484..284788c3 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/onboarding/datasourceImpl/OnBoardingDataSourceImpl.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/onboarding/datasourceImpl/OnBoardingDataSourceImpl.kt @@ -1,6 +1,7 @@ package com.threegap.bitnagil.data.onboarding.datasourceImpl import com.threegap.bitnagil.data.common.safeApiCall +import com.threegap.bitnagil.data.common.safeUnitApiCall import com.threegap.bitnagil.data.onboarding.datasource.OnBoardingDataSource import com.threegap.bitnagil.data.onboarding.model.dto.OnBoardingAbstractDto import com.threegap.bitnagil.data.onboarding.model.dto.OnBoardingAbstractTextDto @@ -51,7 +52,7 @@ class OnBoardingDataSourceImpl @Inject constructor( override suspend fun registerRecommendRoutineList(selectedRecommendRoutineIds: List): Result { val registerRecommendRoutineListRequest = RegisterOnBoardingRecommendRoutinesRequest(recommendedRoutineIds = selectedRecommendRoutineIds) - return safeApiCall { + return safeUnitApiCall { onBoardingService.postOnBoardingRoutines(registerRecommendRoutineListRequest) } } diff --git a/data/src/main/java/com/threegap/bitnagil/data/onboarding/model/dto/OnBoardingItemDto.kt b/data/src/main/java/com/threegap/bitnagil/data/onboarding/model/dto/OnBoardingItemDto.kt index 91db5c39..6146011b 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/onboarding/model/dto/OnBoardingItemDto.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/onboarding/model/dto/OnBoardingItemDto.kt @@ -17,19 +17,19 @@ data class OnBoardingItemDto( companion object { val Morning = OnBoardingItemDto( - id = "MORNING", + id = "08:00:00", title = "아침을 잘 시작하고 싶어요", description = null, ) val Evening = OnBoardingItemDto( - id = "EVENING", + id = "20:00:00", title = "저녁을 편안하게 마무리하고 싶어요", description = null, ) val Nothing = OnBoardingItemDto( - id = "NOTHING", + id = "00:00:00", title = "언제든 상관 없어요", description = null, ) diff --git a/data/src/main/java/com/threegap/bitnagil/data/onboarding/model/dto/OnBoardingRecommendRoutineDto.kt b/data/src/main/java/com/threegap/bitnagil/data/onboarding/model/dto/OnBoardingRecommendRoutineDto.kt index fd51c089..52ee3715 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/onboarding/model/dto/OnBoardingRecommendRoutineDto.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/onboarding/model/dto/OnBoardingRecommendRoutineDto.kt @@ -10,16 +10,16 @@ data class OnBoardingRecommendRoutineDto( val recommendedRoutineId: Int, @SerialName("recommendedRoutineName") val recommendedRoutineName: String, - @SerialName("routineDescription") - val routineDescription: String, - @SerialName("recommendedSubRoutines") - val recommendedSubRoutines: List, + @SerialName("recommendedRoutineDescription") + val recommendedRoutineDescription: String, + @SerialName("recommendedSubRoutineSearchResult") + val recommendedSubRoutineSearchResult: List, ) { fun toOnBoardingRecommendRoutine(): OnBoardingRecommendRoutine { return OnBoardingRecommendRoutine( id = "$recommendedRoutineId", name = recommendedRoutineName, - description = routineDescription, + description = recommendedRoutineDescription, ) } } diff --git a/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/datasource/RecommendRoutineDataSource.kt b/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/datasource/RecommendRoutineDataSource.kt index 5be1ab6e..e4538c40 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/datasource/RecommendRoutineDataSource.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/datasource/RecommendRoutineDataSource.kt @@ -1,7 +1,9 @@ package com.threegap.bitnagil.data.recommendroutine.datasource import com.threegap.bitnagil.data.recommendroutine.model.response.RecommendRoutinesDto +import com.threegap.bitnagil.data.recommendroutine.model.response.RecommendedRoutineDto interface RecommendRoutineDataSource { suspend fun fetchRecommendRoutines(): Result + suspend fun getRecommendRoutine(recommendRoutineId: Int): Result } diff --git a/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/datasourceImpl/RecommendRoutineDataSourceImpl.kt b/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/datasourceImpl/RecommendRoutineDataSourceImpl.kt index 712d1b80..859c22e1 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/datasourceImpl/RecommendRoutineDataSourceImpl.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/datasourceImpl/RecommendRoutineDataSourceImpl.kt @@ -3,6 +3,7 @@ package com.threegap.bitnagil.data.recommendroutine.datasourceImpl import com.threegap.bitnagil.data.common.safeApiCall import com.threegap.bitnagil.data.recommendroutine.datasource.RecommendRoutineDataSource import com.threegap.bitnagil.data.recommendroutine.model.response.RecommendRoutinesDto +import com.threegap.bitnagil.data.recommendroutine.model.response.RecommendedRoutineDto import com.threegap.bitnagil.data.recommendroutine.service.RecommendRoutineService import javax.inject.Inject @@ -14,4 +15,9 @@ class RecommendRoutineDataSourceImpl @Inject constructor( safeApiCall { recommendRoutineService.fetchRecommendRoutines() } + + override suspend fun getRecommendRoutine(recommendRoutineId: Int): Result = + safeApiCall { + recommendRoutineService.getRecommendRoutine(recommendRoutineId) + } } diff --git a/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/repositoryImpl/RecommendRoutineRepositoryImpl.kt b/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/repositoryImpl/RecommendRoutineRepositoryImpl.kt index b9382996..05ca53fe 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/repositoryImpl/RecommendRoutineRepositoryImpl.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/repositoryImpl/RecommendRoutineRepositoryImpl.kt @@ -2,6 +2,7 @@ package com.threegap.bitnagil.data.recommendroutine.repositoryImpl import com.threegap.bitnagil.data.recommendroutine.datasource.RecommendRoutineDataSource import com.threegap.bitnagil.data.recommendroutine.model.response.toDomain +import com.threegap.bitnagil.domain.recommendroutine.model.RecommendRoutine import com.threegap.bitnagil.domain.recommendroutine.model.RecommendRoutines import com.threegap.bitnagil.domain.recommendroutine.repository.RecommendRoutineRepository import javax.inject.Inject @@ -12,4 +13,13 @@ class RecommendRoutineRepositoryImpl @Inject constructor( override suspend fun fetchRecommendRoutines(): Result = recommendRoutineDataSource.fetchRecommendRoutines() .map { it.toDomain() } + + override suspend fun getRecommendRoutine(recommendRoutineId: String): Result { + val recommendRoutineIdInt = recommendRoutineId.toIntOrNull() ?: return Result.failure( + IllegalArgumentException("recommendRoutineId is not a valid integer"), + ) + + return recommendRoutineDataSource.getRecommendRoutine(recommendRoutineIdInt) + .map { it.toDomain() } + } } diff --git a/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/service/RecommendRoutineService.kt b/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/service/RecommendRoutineService.kt index a769c5d8..dccdf851 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/service/RecommendRoutineService.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/recommendroutine/service/RecommendRoutineService.kt @@ -1,10 +1,17 @@ package com.threegap.bitnagil.data.recommendroutine.service import com.threegap.bitnagil.data.recommendroutine.model.response.RecommendRoutinesDto +import com.threegap.bitnagil.data.recommendroutine.model.response.RecommendedRoutineDto import com.threegap.bitnagil.network.model.BaseResponse import retrofit2.http.GET +import retrofit2.http.Path interface RecommendRoutineService { @GET("/api/v1/recommend-routines") suspend fun fetchRecommendRoutines(): BaseResponse + + @GET("/api/v1/recommend-routines/{recommendedRoutineId}") + suspend fun getRecommendRoutine( + @Path("recommendedRoutineId") recommendedRoutineId: Int, + ): BaseResponse } diff --git a/data/src/main/java/com/threegap/bitnagil/data/routine/datasource/RoutineRemoteDataSource.kt b/data/src/main/java/com/threegap/bitnagil/data/routine/datasource/RoutineRemoteDataSource.kt index daaae4f0..e0c91a45 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/routine/datasource/RoutineRemoteDataSource.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/routine/datasource/RoutineRemoteDataSource.kt @@ -2,6 +2,7 @@ package com.threegap.bitnagil.data.routine.datasource import com.threegap.bitnagil.data.routine.model.request.RoutineByDayDeletionRequestDto import com.threegap.bitnagil.data.routine.model.request.RoutineCompletionRequestDto +import com.threegap.bitnagil.data.routine.model.response.RoutineDto import com.threegap.bitnagil.data.routine.model.response.RoutinesResponseDto interface RoutineRemoteDataSource { @@ -9,4 +10,5 @@ interface RoutineRemoteDataSource { suspend fun syncRoutineCompletion(routineCompletionRequestDto: RoutineCompletionRequestDto): Result suspend fun deleteRoutine(routineId: String): Result suspend fun deleteRoutineByDay(routineByDayDeletionRequestDto: RoutineByDayDeletionRequestDto): Result + suspend fun getRoutine(routineId: String): Result } diff --git a/data/src/main/java/com/threegap/bitnagil/data/routine/datasourceImpl/RoutineRemoteDataSourceImpl.kt b/data/src/main/java/com/threegap/bitnagil/data/routine/datasourceImpl/RoutineRemoteDataSourceImpl.kt index 9e263f27..d57ec831 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/routine/datasourceImpl/RoutineRemoteDataSourceImpl.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/routine/datasourceImpl/RoutineRemoteDataSourceImpl.kt @@ -5,6 +5,7 @@ import com.threegap.bitnagil.data.common.safeUnitApiCall import com.threegap.bitnagil.data.routine.datasource.RoutineRemoteDataSource import com.threegap.bitnagil.data.routine.model.request.RoutineByDayDeletionRequestDto import com.threegap.bitnagil.data.routine.model.request.RoutineCompletionRequestDto +import com.threegap.bitnagil.data.routine.model.response.RoutineDto import com.threegap.bitnagil.data.routine.model.response.RoutinesResponseDto import com.threegap.bitnagil.data.routine.service.RoutineService import javax.inject.Inject @@ -31,4 +32,9 @@ class RoutineRemoteDataSourceImpl @Inject constructor( safeUnitApiCall { routineService.deleteRoutineByDay(routineByDayDeletionRequestDto) } + + override suspend fun getRoutine(routineId: String): Result = + safeApiCall { + routineService.getRoutine(routineId) + } } diff --git a/data/src/main/java/com/threegap/bitnagil/data/routine/mapper/RoutineMapper.kt b/data/src/main/java/com/threegap/bitnagil/data/routine/mapper/RoutineMapper.kt index be747e8e..ee109951 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/routine/mapper/RoutineMapper.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/routine/mapper/RoutineMapper.kt @@ -27,7 +27,7 @@ internal fun RoutineDto.toDomain() = historySeq = this.historySeq, routineName = this.routineName, executionTime = this.executionTime, - subRoutines = this.subRoutines.map { it.toDomain() }, + subRoutines = this.subRoutines.sortedBy { it.sortOrder }.map { it.toDomain() }, isModified = this.isModified, routineCompletionId = this.routineCompletionId, isCompleted = this.isCompleted, diff --git a/data/src/main/java/com/threegap/bitnagil/data/routine/repositoryImpl/RoutineRepositoryImpl.kt b/data/src/main/java/com/threegap/bitnagil/data/routine/repositoryImpl/RoutineRepositoryImpl.kt index d38e89c5..0601a78c 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/routine/repositoryImpl/RoutineRepositoryImpl.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/routine/repositoryImpl/RoutineRepositoryImpl.kt @@ -4,6 +4,7 @@ import com.threegap.bitnagil.data.routine.datasource.RoutineRemoteDataSource import com.threegap.bitnagil.data.routine.mapper.toDomain import com.threegap.bitnagil.data.routine.mapper.toDto import com.threegap.bitnagil.data.routine.model.request.toDto +import com.threegap.bitnagil.domain.routine.model.Routine import com.threegap.bitnagil.domain.routine.model.RoutineByDayDeletion import com.threegap.bitnagil.domain.routine.model.RoutineCompletion import com.threegap.bitnagil.domain.routine.model.Routines @@ -23,6 +24,9 @@ class RoutineRepositoryImpl @Inject constructor( override suspend fun deleteRoutine(routineId: String): Result = routineRemoteDataSource.deleteRoutine(routineId) + override suspend fun getRoutine(routineId: String): Result = + routineRemoteDataSource.getRoutine(routineId).map { it.toDomain() } + override suspend fun deleteRoutineByDay(routineByDayDeletion: RoutineByDayDeletion): Result = routineRemoteDataSource.deleteRoutineByDay(routineByDayDeletion.toDto()) } diff --git a/data/src/main/java/com/threegap/bitnagil/data/routine/service/RoutineService.kt b/data/src/main/java/com/threegap/bitnagil/data/routine/service/RoutineService.kt index 9d567e93..403789eb 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/routine/service/RoutineService.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/routine/service/RoutineService.kt @@ -2,6 +2,7 @@ package com.threegap.bitnagil.data.routine.service import com.threegap.bitnagil.data.routine.model.request.RoutineByDayDeletionRequestDto import com.threegap.bitnagil.data.routine.model.request.RoutineCompletionRequestDto +import com.threegap.bitnagil.data.routine.model.response.RoutineDto import com.threegap.bitnagil.data.routine.model.response.RoutinesResponseDto import com.threegap.bitnagil.network.model.BaseResponse import retrofit2.http.Body @@ -29,6 +30,11 @@ interface RoutineService { @Path("routineId") routineId: String, ): BaseResponse + @GET("/api/v1/routines/{routineId}") + suspend fun getRoutine( + @Path("routineId") routineId: String, + ): BaseResponse + @HTTP(method = "DELETE", path = "/api/v1/routines/day", hasBody = true) suspend fun deleteRoutineByDay( @Body request: RoutineByDayDeletionRequestDto, diff --git a/data/src/main/java/com/threegap/bitnagil/data/writeroutine/datasource/WriteRoutineDataSource.kt b/data/src/main/java/com/threegap/bitnagil/data/writeroutine/datasource/WriteRoutineDataSource.kt index b30d4fcd..fb0b0c9a 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/writeroutine/datasource/WriteRoutineDataSource.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/writeroutine/datasource/WriteRoutineDataSource.kt @@ -1,11 +1,9 @@ package com.threegap.bitnagil.data.writeroutine.datasource -import com.threegap.bitnagil.data.writeroutine.model.dto.RoutineDto import com.threegap.bitnagil.data.writeroutine.model.request.EditRoutineRequest import com.threegap.bitnagil.data.writeroutine.model.request.RegisterRoutineRequest interface WriteRoutineDataSource { suspend fun registerRoutine(request: RegisterRoutineRequest): Result suspend fun editRoutine(request: EditRoutineRequest): Result - suspend fun getRoutine(routineId: String): Result } diff --git a/data/src/main/java/com/threegap/bitnagil/data/writeroutine/datasourceImpl/WriteRoutineDataSourceImpl.kt b/data/src/main/java/com/threegap/bitnagil/data/writeroutine/datasourceImpl/WriteRoutineDataSourceImpl.kt index cc632c19..2b7525da 100644 --- a/data/src/main/java/com/threegap/bitnagil/data/writeroutine/datasourceImpl/WriteRoutineDataSourceImpl.kt +++ b/data/src/main/java/com/threegap/bitnagil/data/writeroutine/datasourceImpl/WriteRoutineDataSourceImpl.kt @@ -1,9 +1,7 @@ package com.threegap.bitnagil.data.writeroutine.datasourceImpl -import com.threegap.bitnagil.data.common.safeApiCall +import com.threegap.bitnagil.data.common.safeUnitApiCall import com.threegap.bitnagil.data.writeroutine.datasource.WriteRoutineDataSource -import com.threegap.bitnagil.data.writeroutine.model.dto.RoutineDto -import com.threegap.bitnagil.data.writeroutine.model.dto.SubRoutineDto import com.threegap.bitnagil.data.writeroutine.model.request.EditRoutineRequest import com.threegap.bitnagil.data.writeroutine.model.request.RegisterRoutineRequest import com.threegap.bitnagil.data.writeroutine.service.WriteRoutineService @@ -13,31 +11,14 @@ class WriteRoutineDataSourceImpl @Inject constructor( private val writeRoutineService: WriteRoutineService, ) : WriteRoutineDataSource { override suspend fun registerRoutine(request: RegisterRoutineRequest): Result { - return safeApiCall { + return safeUnitApiCall { writeRoutineService.postRoutine(request) } } override suspend fun editRoutine(request: EditRoutineRequest): Result { - return safeApiCall { + return safeUnitApiCall { writeRoutineService.patchRoutine(request) } } - - override suspend fun getRoutine(routineId: String): Result { - val routineDto = RoutineDto( - routineId = routineId, - routineName = "임시 루틴", - repeatDay = listOf("MON"), - executionTime = "12:00", - subRoutineInfos = listOf( - SubRoutineDto( - subRoutineId = "id1", - subRoutineName = "서브루틴 1", - sortOrder = 1, - ), - ), - ) - return Result.success(routineDto) - } } 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 edbf7c51..56fea541 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 @@ -5,7 +5,6 @@ import com.threegap.bitnagil.data.writeroutine.model.dto.SubRoutineInfosDiffDto import com.threegap.bitnagil.data.writeroutine.model.request.EditRoutineRequest import com.threegap.bitnagil.data.writeroutine.model.request.RegisterRoutineRequest import com.threegap.bitnagil.domain.writeroutine.model.RepeatDay -import com.threegap.bitnagil.domain.writeroutine.model.Routine import com.threegap.bitnagil.domain.writeroutine.model.SubRoutineDiff import com.threegap.bitnagil.domain.writeroutine.model.Time import com.threegap.bitnagil.domain.writeroutine.repository.WriteRoutineRepository @@ -17,7 +16,7 @@ class WriteRoutineRepositoryImpl @Inject constructor( override suspend fun registerRoutine(name: String, repeatDay: List, startTime: Time, subRoutines: List): Result { val request = RegisterRoutineRequest( routineName = name, - repeatDay = repeatDay.map { it.name }, + repeatDay = repeatDay.map { it.fullName }, executionTime = startTime.toFormattedString(), subRoutineName = subRoutines, ) @@ -34,8 +33,8 @@ class WriteRoutineRepositoryImpl @Inject constructor( val request = EditRoutineRequest( routineId = routineId, routineName = name, - repeatDay = repeatDay.map { it.name }, - executionTime = startTime.toString(), + repeatDay = repeatDay.map { it.fullName }, + executionTime = startTime.toFormattedString(), subRoutineInfos = subRoutines.map { SubRoutineInfosDiffDto.fromSubRoutineDiff(it) }, @@ -43,10 +42,4 @@ class WriteRoutineRepositoryImpl @Inject constructor( return writeRoutineDataSource.editRoutine(request) } - - override suspend fun getRoutine(routineId: String): Result { - return writeRoutineDataSource.getRoutine(routineId).map { routineDto -> - routineDto.toRoutine() - } - } } diff --git a/domain/src/main/java/com/threegap/bitnagil/domain/recommendroutine/repository/RecommendRoutineRepository.kt b/domain/src/main/java/com/threegap/bitnagil/domain/recommendroutine/repository/RecommendRoutineRepository.kt index 2b520ac3..ad60717f 100644 --- a/domain/src/main/java/com/threegap/bitnagil/domain/recommendroutine/repository/RecommendRoutineRepository.kt +++ b/domain/src/main/java/com/threegap/bitnagil/domain/recommendroutine/repository/RecommendRoutineRepository.kt @@ -1,7 +1,9 @@ package com.threegap.bitnagil.domain.recommendroutine.repository +import com.threegap.bitnagil.domain.recommendroutine.model.RecommendRoutine import com.threegap.bitnagil.domain.recommendroutine.model.RecommendRoutines interface RecommendRoutineRepository { suspend fun fetchRecommendRoutines(): Result + suspend fun getRecommendRoutine(recommendRoutineId: String): Result } diff --git a/domain/src/main/java/com/threegap/bitnagil/domain/recommendroutine/usecase/GetRecommendRoutineUseCase.kt b/domain/src/main/java/com/threegap/bitnagil/domain/recommendroutine/usecase/GetRecommendRoutineUseCase.kt new file mode 100644 index 00000000..3b424004 --- /dev/null +++ b/domain/src/main/java/com/threegap/bitnagil/domain/recommendroutine/usecase/GetRecommendRoutineUseCase.kt @@ -0,0 +1,12 @@ +package com.threegap.bitnagil.domain.recommendroutine.usecase + +import com.threegap.bitnagil.domain.recommendroutine.model.RecommendRoutine +import com.threegap.bitnagil.domain.recommendroutine.repository.RecommendRoutineRepository +import javax.inject.Inject + +class GetRecommendRoutineUseCase @Inject constructor( + private val recommendRoutineRepository: RecommendRoutineRepository, +) { + suspend operator fun invoke(recommendRoutineId: String): Result = + recommendRoutineRepository.getRecommendRoutine(recommendRoutineId) +} diff --git a/domain/src/main/java/com/threegap/bitnagil/domain/routine/repository/RoutineRepository.kt b/domain/src/main/java/com/threegap/bitnagil/domain/routine/repository/RoutineRepository.kt index 8cb09cfc..bededfb7 100644 --- a/domain/src/main/java/com/threegap/bitnagil/domain/routine/repository/RoutineRepository.kt +++ b/domain/src/main/java/com/threegap/bitnagil/domain/routine/repository/RoutineRepository.kt @@ -1,5 +1,6 @@ package com.threegap.bitnagil.domain.routine.repository +import com.threegap.bitnagil.domain.routine.model.Routine import com.threegap.bitnagil.domain.routine.model.RoutineByDayDeletion import com.threegap.bitnagil.domain.routine.model.RoutineCompletion import com.threegap.bitnagil.domain.routine.model.Routines @@ -8,5 +9,6 @@ interface RoutineRepository { suspend fun fetchWeeklyRoutines(startDate: String, endDate: String): Result suspend fun syncRoutineCompletion(routineCompletion: RoutineCompletion): Result suspend fun deleteRoutine(routineId: String): Result + suspend fun getRoutine(routineId: String): Result suspend fun deleteRoutineByDay(routineByDayDeletion: RoutineByDayDeletion): Result } diff --git a/domain/src/main/java/com/threegap/bitnagil/domain/routine/usecase/GetRoutineUseCase.kt b/domain/src/main/java/com/threegap/bitnagil/domain/routine/usecase/GetRoutineUseCase.kt new file mode 100644 index 00000000..41635afc --- /dev/null +++ b/domain/src/main/java/com/threegap/bitnagil/domain/routine/usecase/GetRoutineUseCase.kt @@ -0,0 +1,12 @@ +package com.threegap.bitnagil.domain.routine.usecase + +import com.threegap.bitnagil.domain.routine.model.Routine +import com.threegap.bitnagil.domain.routine.repository.RoutineRepository +import javax.inject.Inject + +class GetRoutineUseCase @Inject constructor( + private val routineRepository: RoutineRepository, +) { + suspend operator fun invoke(routineId: String): Result = + routineRepository.getRoutine(routineId) +} diff --git a/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/RepeatDay.kt b/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/RepeatDay.kt index cc1d43b1..3bf67eeb 100644 --- a/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/RepeatDay.kt +++ b/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/RepeatDay.kt @@ -1,5 +1,12 @@ package com.threegap.bitnagil.domain.writeroutine.model -enum class RepeatDay { - MON, TUE, WED, THU, FRI, SAT, SUN +enum class RepeatDay(val fullName: String) { + MON(fullName = "MONDAY"), + TUE(fullName = "TUESDAY"), + WED(fullName = "WEDNESDAY"), + THU(fullName = "THURSDAY"), + FRI(fullName = "FRIDAY"), + SAT(fullName = "SATURDAY"), + SUN(fullName = "SUNDAY"), + ; } diff --git a/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/Time.kt b/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/Time.kt index ee97a7ee..48f8676c 100644 --- a/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/Time.kt +++ b/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/model/Time.kt @@ -9,5 +9,5 @@ data class Time( require(minute in 0..59) { "Minute must be in range 0..59, but was $minute" } } - fun toFormattedString(): String = "%02d:%02d".format(hour, minute) + fun toFormattedString(): String = "%02d:%02d:00".format(hour, minute) } 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 687e15c2..4c6e134d 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 @@ -1,7 +1,6 @@ package com.threegap.bitnagil.domain.writeroutine.repository import com.threegap.bitnagil.domain.writeroutine.model.RepeatDay -import com.threegap.bitnagil.domain.writeroutine.model.Routine import com.threegap.bitnagil.domain.writeroutine.model.SubRoutineDiff import com.threegap.bitnagil.domain.writeroutine.model.Time @@ -20,6 +19,4 @@ interface WriteRoutineRepository { startTime: Time, subRoutines: List, ): Result - - suspend fun getRoutine(routineId: String): Result } diff --git a/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/usecase/GetRoutineUseCase.kt b/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/usecase/GetRoutineUseCase.kt deleted file mode 100644 index 1d407318..00000000 --- a/domain/src/main/java/com/threegap/bitnagil/domain/writeroutine/usecase/GetRoutineUseCase.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.threegap.bitnagil.domain.writeroutine.usecase - -import com.threegap.bitnagil.domain.writeroutine.model.Routine -import com.threegap.bitnagil.domain.writeroutine.repository.WriteRoutineRepository -import javax.inject.Inject - -class GetRoutineUseCase @Inject constructor( - private val routineRepository: WriteRoutineRepository, -) { - suspend operator fun invoke( - routineId: String, - ): Result { - return routineRepository.getRoutine(routineId) - } -} diff --git a/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/WriteRoutineViewModel.kt b/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/WriteRoutineViewModel.kt index 4687f6ba..72c9ef82 100644 --- a/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/WriteRoutineViewModel.kt +++ b/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/WriteRoutineViewModel.kt @@ -2,10 +2,11 @@ package com.threegap.bitnagil.presentation.writeroutine import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope -import androidx.navigation.toRoute +import com.threegap.bitnagil.domain.recommendroutine.usecase.GetRecommendRoutineUseCase +import com.threegap.bitnagil.domain.routine.usecase.GetRoutineUseCase +import com.threegap.bitnagil.domain.writeroutine.model.RepeatDay import com.threegap.bitnagil.domain.writeroutine.usecase.EditRoutineUseCase import com.threegap.bitnagil.domain.writeroutine.usecase.GetChangedSubRoutinesUseCase -import com.threegap.bitnagil.domain.writeroutine.usecase.GetRoutineUseCase import com.threegap.bitnagil.domain.writeroutine.usecase.RegisterRoutineUseCase import com.threegap.bitnagil.presentation.common.mviviewmodel.MviViewModel import com.threegap.bitnagil.presentation.writeroutine.model.Day @@ -18,33 +19,36 @@ import com.threegap.bitnagil.presentation.writeroutine.model.mvi.WriteRoutineInt import com.threegap.bitnagil.presentation.writeroutine.model.mvi.WriteRoutineSideEffect import com.threegap.bitnagil.presentation.writeroutine.model.mvi.WriteRoutineState import com.threegap.bitnagil.presentation.writeroutine.model.navarg.WriteRoutineScreenArg +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import org.orbitmvi.orbit.syntax.simple.SimpleSyntax -import javax.inject.Inject import com.threegap.bitnagil.domain.writeroutine.model.SubRoutine as DomainSubRoutine -@HiltViewModel -class WriteRoutineViewModel @Inject constructor( +@HiltViewModel(assistedFactory = WriteRoutineViewModel.Factory::class) +class WriteRoutineViewModel @AssistedInject constructor( savedStateHandle: SavedStateHandle, private val getChangedSubRoutinesUseCase: GetChangedSubRoutinesUseCase, private val registerRoutineUseCase: RegisterRoutineUseCase, private val editRoutineUseCase: EditRoutineUseCase, private val getRoutineUseCase: GetRoutineUseCase, + private val getRecommendRoutineUseCase: GetRecommendRoutineUseCase, + @Assisted private val writeRoutineArg: WriteRoutineScreenArg, ) : MviViewModel( initState = WriteRoutineState.Init, savedStateHandle = savedStateHandle, ) { + @AssistedFactory interface Factory { + fun create(writeRoutineArg: WriteRoutineScreenArg): WriteRoutineViewModel + } + private var routineId: String? = null private var oldSubRoutines: List = listOf() init { - val navigationArg = try { - savedStateHandle.toRoute() - } catch (e: IllegalArgumentException) { - WriteRoutineScreenArg.Add(baseRoutineId = null) - } - + val navigationArg = writeRoutineArg initResource(navigationArg) } @@ -57,7 +61,7 @@ class WriteRoutineViewModel @Inject constructor( navigationArg.baseRoutineId?.let { routineId = it - loadRoutine(it) + loadRecommendRoutine(it) } } is WriteRoutineScreenArg.Edit -> { @@ -79,12 +83,34 @@ class WriteRoutineViewModel @Inject constructor( getRoutineUseCase(routineId).fold( onSuccess = { routine -> oldSubRoutines = routine.subRoutines.map { SubRoutine.fromDomainSubRoutine(it) } + sendIntent( + WriteRoutineIntent.SetRoutine( + name = routine.routineName, + repeatDays = routine.repeatDay.map { Day.fromDayOfWeek(it) }, + startTime = Time.fromDomainTimeString(routine.executionTime), + subRoutines = routine.subRoutines.map { it.subRoutineName }, + ), + ) + }, + onFailure = { + // 실패 케이스 처리 예정 + }, + ) + } + } + + private fun loadRecommendRoutine(recommendRoutineId: String) { + viewModelScope.launch { + sendIntent(WriteRoutineIntent.GetRoutineLoading) + getRecommendRoutineUseCase(recommendRoutineId).fold( + onSuccess = { routine -> + oldSubRoutines = routine.recommendSubRoutines.map { SubRoutine.fromDomainRecommendSubRoutine(it) } sendIntent( WriteRoutineIntent.SetRoutine( name = routine.name, - repeatDays = routine.repeatDays.map { Day.fromRepeatDay(it) }, - startTime = Time.fromDomainTime(routine.startTime), - subRoutines = routine.subRoutines.map { it.name }, + repeatDays = listOf(), + startTime = Time.fromDomainTimeString(routine.executionTime), + subRoutines = oldSubRoutines.map { it.name }, ), ) }, @@ -311,14 +337,31 @@ class WriteRoutineViewModel @Inject constructor( val startTime = currentState.startTime ?: return@launch + val repeatDay = when (currentState.repeatType) { + RepeatType.DAILY -> listOf( + RepeatDay.MON, + RepeatDay.TUE, + RepeatDay.WED, + RepeatDay.THU, + RepeatDay.FRI, + RepeatDay.SAT, + RepeatDay.SUN, + ) + + RepeatType.DAY -> + currentState.repeatDays + .filter { it.selected } + .map { it.day.toRepeatDay() } + + null -> return@launch + } + when (currentState.writeRoutineType) { WriteRoutineType.ADD -> { sendIntent(WriteRoutineIntent.RegisterRoutineLoading) val registerRoutineResult = registerRoutineUseCase( currentState.routineName, - currentState.repeatDays - .filter { it.selected } - .map { it.day.toRepeatDay() }, + repeatDay, startTime.toDomainTime(), currentState.subRoutineNames, ) @@ -347,9 +390,7 @@ class WriteRoutineViewModel @Inject constructor( val editRoutineResult = editRoutineUseCase( routineId = currentRoutineId, name = currentState.routineName, - repeatDay = currentState.repeatDays - .filter { it.selected } - .map { it.day.toRepeatDay() }, + repeatDay, startTime = startTime.toDomainTime(), subRoutines = subRoutineDiffs, ) diff --git a/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/Day.kt b/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/Day.kt index 9638cd4f..42620190 100644 --- a/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/Day.kt +++ b/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/Day.kt @@ -1,5 +1,6 @@ package com.threegap.bitnagil.presentation.writeroutine.model +import com.threegap.bitnagil.domain.routine.model.DayOfWeek import com.threegap.bitnagil.domain.writeroutine.model.RepeatDay enum class Day(val text: String) { @@ -25,15 +26,15 @@ enum class Day(val text: String) { } companion object { - fun fromRepeatDay(repeatDay: RepeatDay): Day { - return when (repeatDay) { - RepeatDay.MON -> MON - RepeatDay.TUE -> TUE - RepeatDay.WED -> WED - RepeatDay.THU -> THU - RepeatDay.FRI -> FRI - RepeatDay.SAT -> SAT - RepeatDay.SUN -> SUN + fun fromDayOfWeek(dayOfWeek: DayOfWeek): Day { + return when (dayOfWeek) { + DayOfWeek.MONDAY -> MON + DayOfWeek.TUESDAY -> TUE + DayOfWeek.WEDNESDAY -> WED + DayOfWeek.THURSDAY -> THU + DayOfWeek.FRIDAY -> FRI + DayOfWeek.SATURDAY -> SAT + DayOfWeek.SUNDAY -> SUN } } } diff --git a/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/SubRoutine.kt b/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/SubRoutine.kt index 1348fd0e..f66cf678 100644 --- a/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/SubRoutine.kt +++ b/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/SubRoutine.kt @@ -1,5 +1,6 @@ package com.threegap.bitnagil.presentation.writeroutine.model -import com.threegap.bitnagil.domain.writeroutine.model.SubRoutine as DomainSubRoutine +import com.threegap.bitnagil.domain.recommendroutine.model.RecommendSubRoutine +import com.threegap.bitnagil.domain.routine.model.SubRoutine as DomainSubRoutine data class SubRoutine( val id: String, @@ -8,7 +9,14 @@ data class SubRoutine( companion object { fun fromDomainSubRoutine(subRoutine: DomainSubRoutine): SubRoutine { return SubRoutine( - id = subRoutine.id, + id = subRoutine.subRoutineId, + name = subRoutine.subRoutineName, + ) + } + + fun fromDomainRecommendSubRoutine(subRoutine: RecommendSubRoutine): SubRoutine { + return SubRoutine( + id = subRoutine.id.toString(), name = subRoutine.name, ) } diff --git a/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/Time.kt b/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/Time.kt index 02f1f57e..13521129 100644 --- a/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/Time.kt +++ b/presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/model/Time.kt @@ -16,10 +16,15 @@ data class Time( companion object { val Init = Time(hour = 12, minute = 0) - val AllDay = Time(hour = 23, minute = 59) + val AllDay = Time(hour = 0, minute = 0) - fun fromDomainTime(time: DomainTime): Time { - return Time(hour = time.hour, minute = time.minute) + fun fromDomainTimeString(timeString: String): Time { + try { + val (hour, minute) = timeString.split(":").map { it.toInt() } + return Time(hour = hour, minute = minute) + } catch (_: Exception) { + return Time(hour = 12, minute = 0) + } } }