Skip to content

Commit 373c39d

Browse files
authored
Merge pull request #51 from YAPP-Github/feature/#50-recommend-routine-api
[Feature/#50] 추천 루틴 API 연동
2 parents 97cd2cb + 7d0f361 commit 373c39d

30 files changed

+427
-183
lines changed

app/src/main/java/com/threegap/bitnagil/di/data/DataSourceModule.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import com.threegap.bitnagil.data.emotion.datasource.EmotionDataSource
88
import com.threegap.bitnagil.data.emotion.datasourceImpl.EmotionDataSourceImpl
99
import com.threegap.bitnagil.data.onboarding.datasource.OnBoardingDataSource
1010
import com.threegap.bitnagil.data.onboarding.datasourceImpl.OnBoardingDataSourceImpl
11+
import com.threegap.bitnagil.data.recommendroutine.datasource.RecommendRoutineDataSource
12+
import com.threegap.bitnagil.data.recommendroutine.datasourceImpl.RecommendRoutineDataSourceImpl
1113
import com.threegap.bitnagil.data.routine.datasource.RoutineRemoteDataSource
1214
import com.threegap.bitnagil.data.routine.datasourceImpl.RoutineRemoteDataSourceImpl
1315
import com.threegap.bitnagil.data.writeroutine.datasource.WriteRoutineDataSource
@@ -45,4 +47,8 @@ abstract class DataSourceModule {
4547
@Binds
4648
@Singleton
4749
abstract fun bindWriteRoutineDataSource(writeRoutineDataSourceImpl: WriteRoutineDataSourceImpl): WriteRoutineDataSource
50+
51+
@Binds
52+
@Singleton
53+
abstract fun bindRecommendRoutineDataSource(recommendRoutineDataSourceImpl: RecommendRoutineDataSourceImpl): RecommendRoutineDataSource
4854
}

app/src/main/java/com/threegap/bitnagil/di/data/RepositoryModule.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ package com.threegap.bitnagil.di.data
33
import com.threegap.bitnagil.data.auth.repositoryimpl.AuthRepositoryImpl
44
import com.threegap.bitnagil.data.emotion.repositoryImpl.EmotionRepositoryImpl
55
import com.threegap.bitnagil.data.onboarding.repositoryImpl.OnBoardingRepositoryImpl
6+
import com.threegap.bitnagil.data.recommendroutine.repositoryImpl.RecommendRoutineRepositoryImpl
67
import com.threegap.bitnagil.data.routine.repositoryImpl.RoutineRepositoryImpl
78
import com.threegap.bitnagil.data.writeroutine.repositoryImpl.WriteRoutineRepositoryImpl
89
import com.threegap.bitnagil.domain.auth.repository.AuthRepository
910
import com.threegap.bitnagil.domain.emotion.repository.EmotionRepository
1011
import com.threegap.bitnagil.domain.onboarding.repository.OnBoardingRepository
12+
import com.threegap.bitnagil.domain.recommendroutine.repository.RecommendRoutineRepository
1113
import com.threegap.bitnagil.domain.routine.repository.RoutineRepository
1214
import com.threegap.bitnagil.domain.writeroutine.repository.WriteRoutineRepository
1315
import dagger.Binds
@@ -39,4 +41,8 @@ abstract class RepositoryModule {
3941
@Binds
4042
@Singleton
4143
abstract fun bindWriteRoutineRepository(writeRoutineRepositoryImpl: WriteRoutineRepositoryImpl): WriteRoutineRepository
44+
45+
@Binds
46+
@Singleton
47+
abstract fun bindRecommendRoutineRepository(recommendRoutineRepositoryImpl: RecommendRoutineRepositoryImpl): RecommendRoutineRepository
4248
}

app/src/main/java/com/threegap/bitnagil/di/data/ServiceModule.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.threegap.bitnagil.di.data
33
import com.threegap.bitnagil.data.auth.service.AuthService
44
import com.threegap.bitnagil.data.emotion.service.EmotionService
55
import com.threegap.bitnagil.data.onboarding.service.OnBoardingService
6+
import com.threegap.bitnagil.data.recommendroutine.service.RecommendRoutineService
67
import com.threegap.bitnagil.data.routine.service.RoutineService
78
import com.threegap.bitnagil.data.writeroutine.service.WriteRoutineService
89
import com.threegap.bitnagil.di.core.Auth
@@ -48,4 +49,9 @@ object ServiceModule {
4849
@Singleton
4950
fun provideReissueService(@NoneAuth retrofit: Retrofit): ReissueService =
5051
retrofit.create(ReissueService::class.java)
52+
53+
@Provides
54+
@Singleton
55+
fun provideRecommendRoutineService(@Auth retrofit: Retrofit): RecommendRoutineService =
56+
retrofit.create(RecommendRoutineService::class.java)
5157
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.threegap.bitnagil.data.recommendroutine.datasource
2+
3+
import com.threegap.bitnagil.data.recommendroutine.model.response.RecommendRoutinesDto
4+
5+
interface RecommendRoutineDataSource {
6+
suspend fun fetchRecommendRoutines(): Result<RecommendRoutinesDto>
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.threegap.bitnagil.data.recommendroutine.datasourceImpl
2+
3+
import com.threegap.bitnagil.data.common.safeApiCall
4+
import com.threegap.bitnagil.data.recommendroutine.datasource.RecommendRoutineDataSource
5+
import com.threegap.bitnagil.data.recommendroutine.model.response.RecommendRoutinesDto
6+
import com.threegap.bitnagil.data.recommendroutine.service.RecommendRoutineService
7+
import javax.inject.Inject
8+
9+
class RecommendRoutineDataSourceImpl @Inject constructor(
10+
private val recommendRoutineService: RecommendRoutineService,
11+
) : RecommendRoutineDataSource {
12+
13+
override suspend fun fetchRecommendRoutines(): Result<RecommendRoutinesDto> =
14+
safeApiCall {
15+
recommendRoutineService.fetchRecommendRoutines()
16+
}
17+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.threegap.bitnagil.data.recommendroutine.model.response
2+
3+
import com.threegap.bitnagil.domain.recommendroutine.model.EmotionMarbleType
4+
import com.threegap.bitnagil.domain.recommendroutine.model.RecommendCategory
5+
import com.threegap.bitnagil.domain.recommendroutine.model.RecommendRoutines
6+
import kotlinx.serialization.SerialName
7+
import kotlinx.serialization.Serializable
8+
9+
@Serializable
10+
data class RecommendRoutinesDto(
11+
@SerialName("recommendedRoutines")
12+
val recommendedRoutinesByCategory: Map<String, List<RecommendedRoutineDto>>,
13+
@SerialName("emotionMarbleType")
14+
val emotionMarbleType: String?,
15+
)
16+
17+
fun RecommendRoutinesDto.toDomain(): RecommendRoutines =
18+
RecommendRoutines(
19+
recommendRoutinesByCategory = this.recommendedRoutinesByCategory.map { (categoryString, routines) ->
20+
RecommendCategory.fromString(categoryString) to routines.map { it.toDomain() }
21+
}.toMap(),
22+
emotionMarbleType = this.emotionMarbleType?.let { EmotionMarbleType.valueOf(it) },
23+
)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.threegap.bitnagil.data.recommendroutine.model.response
2+
3+
import com.threegap.bitnagil.domain.recommendroutine.model.RecommendLevel
4+
import com.threegap.bitnagil.domain.recommendroutine.model.RecommendRoutine
5+
import kotlinx.serialization.SerialName
6+
import kotlinx.serialization.Serializable
7+
8+
@Serializable
9+
data class RecommendedRoutineDto(
10+
@SerialName("recommendedRoutineId")
11+
val recommendedRoutineId: Int,
12+
@SerialName("recommendedRoutineName")
13+
val recommendedRoutineName: String,
14+
@SerialName("recommendedRoutineDescription")
15+
val recommendedRoutineDescription: String,
16+
@SerialName("recommendedRoutineLevel")
17+
val recommendedRoutineLevel: String,
18+
@SerialName("executionTime")
19+
val executionTime: String,
20+
@SerialName("recommendedSubRoutineSearchResult")
21+
val recommendedSubRoutineSearchResult: List<RecommendedSubRoutineDto>,
22+
)
23+
24+
fun RecommendedRoutineDto.toDomain(): RecommendRoutine =
25+
RecommendRoutine(
26+
id = recommendedRoutineId,
27+
name = recommendedRoutineName,
28+
description = recommendedRoutineDescription,
29+
level = RecommendLevel.fromString(recommendedRoutineLevel),
30+
executionTime = executionTime,
31+
recommendSubRoutines = recommendedSubRoutineSearchResult.map { it.toDomain() },
32+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.threegap.bitnagil.data.recommendroutine.model.response
2+
3+
import com.threegap.bitnagil.domain.recommendroutine.model.RecommendSubRoutine
4+
import kotlinx.serialization.SerialName
5+
import kotlinx.serialization.Serializable
6+
7+
@Serializable
8+
data class RecommendedSubRoutineDto(
9+
@SerialName("recommendedSubRoutineId")
10+
val recommendedSubRoutineId: Int,
11+
@SerialName("recommendedSubRoutineName")
12+
val recommendedSubRoutineName: String,
13+
)
14+
15+
fun RecommendedSubRoutineDto.toDomain(): RecommendSubRoutine =
16+
RecommendSubRoutine(
17+
id = recommendedSubRoutineId,
18+
name = recommendedSubRoutineName,
19+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.threegap.bitnagil.data.recommendroutine.repositoryImpl
2+
3+
import com.threegap.bitnagil.data.recommendroutine.datasource.RecommendRoutineDataSource
4+
import com.threegap.bitnagil.data.recommendroutine.model.response.toDomain
5+
import com.threegap.bitnagil.domain.recommendroutine.model.RecommendRoutines
6+
import com.threegap.bitnagil.domain.recommendroutine.repository.RecommendRoutineRepository
7+
import javax.inject.Inject
8+
9+
class RecommendRoutineRepositoryImpl @Inject constructor(
10+
private val recommendRoutineDataSource: RecommendRoutineDataSource,
11+
) : RecommendRoutineRepository {
12+
override suspend fun fetchRecommendRoutines(): Result<RecommendRoutines> =
13+
recommendRoutineDataSource.fetchRecommendRoutines()
14+
.map { it.toDomain() }
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.threegap.bitnagil.data.recommendroutine.service
2+
3+
import com.threegap.bitnagil.data.recommendroutine.model.response.RecommendRoutinesDto
4+
import com.threegap.bitnagil.network.model.BaseResponse
5+
import retrofit2.http.GET
6+
7+
interface RecommendRoutineService {
8+
@GET("/api/v1/recommend-routines")
9+
suspend fun fetchRecommendRoutines(): BaseResponse<RecommendRoutinesDto>
10+
}

0 commit comments

Comments
 (0)