Skip to content

Commit 3397f0e

Browse files
authored
Merge pull request #118 from YAPP-Github/feature/#116-app-force-update
[Feature/#116] 앱 강제 업데이트 로직을 구현합니다.
2 parents 3ea8eb8 + 2b5155e commit 3397f0e

File tree

21 files changed

+382
-3
lines changed

21 files changed

+382
-3
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
@@ -14,6 +14,8 @@ import com.threegap.bitnagil.data.routine.datasource.RoutineRemoteDataSource
1414
import com.threegap.bitnagil.data.routine.datasourceImpl.RoutineRemoteDataSourceImpl
1515
import com.threegap.bitnagil.data.user.datasource.UserDataSource
1616
import com.threegap.bitnagil.data.user.datasourceImpl.UserDataSourceImpl
17+
import com.threegap.bitnagil.data.version.datasource.VersionDataSource
18+
import com.threegap.bitnagil.data.version.datasourceImpl.VersionDataSourceImpl
1719
import com.threegap.bitnagil.data.writeroutine.datasource.WriteRoutineDataSource
1820
import com.threegap.bitnagil.data.writeroutine.datasourceImpl.WriteRoutineDataSourceImpl
1921
import dagger.Binds
@@ -57,4 +59,8 @@ abstract class DataSourceModule {
5759
@Binds
5860
@Singleton
5961
abstract fun bindRecommendRoutineDataSource(recommendRoutineDataSourceImpl: RecommendRoutineDataSourceImpl): RecommendRoutineDataSource
62+
63+
@Binds
64+
@Singleton
65+
abstract fun bindVersionDataSource(versionDataSourceImpl: VersionDataSourceImpl): VersionDataSource
6066
}

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
@@ -6,13 +6,15 @@ import com.threegap.bitnagil.data.onboarding.repositoryImpl.OnBoardingRepository
66
import com.threegap.bitnagil.data.recommendroutine.repositoryImpl.RecommendRoutineRepositoryImpl
77
import com.threegap.bitnagil.data.routine.repositoryImpl.RoutineRepositoryImpl
88
import com.threegap.bitnagil.data.user.repositoryImpl.UserRepositoryImpl
9+
import com.threegap.bitnagil.data.version.repositoryImpl.VersionRepositoryImpl
910
import com.threegap.bitnagil.data.writeroutine.repositoryImpl.WriteRoutineRepositoryImpl
1011
import com.threegap.bitnagil.domain.auth.repository.AuthRepository
1112
import com.threegap.bitnagil.domain.emotion.repository.EmotionRepository
1213
import com.threegap.bitnagil.domain.onboarding.repository.OnBoardingRepository
1314
import com.threegap.bitnagil.domain.recommendroutine.repository.RecommendRoutineRepository
1415
import com.threegap.bitnagil.domain.routine.repository.RoutineRepository
1516
import com.threegap.bitnagil.domain.user.repository.UserRepository
17+
import com.threegap.bitnagil.domain.version.repository.VersionRepository
1618
import com.threegap.bitnagil.domain.writeroutine.repository.WriteRoutineRepository
1719
import dagger.Binds
1820
import dagger.Module
@@ -51,4 +53,8 @@ abstract class RepositoryModule {
5153
@Binds
5254
@Singleton
5355
abstract fun bindRecommendRoutineRepository(recommendRoutineRepositoryImpl: RecommendRoutineRepositoryImpl): RecommendRoutineRepository
56+
57+
@Binds
58+
@Singleton
59+
abstract fun bindVersionRepository(versionRepositoryImpl: VersionRepositoryImpl): VersionRepository
5460
}

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
@@ -6,6 +6,7 @@ import com.threegap.bitnagil.data.onboarding.service.OnBoardingService
66
import com.threegap.bitnagil.data.recommendroutine.service.RecommendRoutineService
77
import com.threegap.bitnagil.data.routine.service.RoutineService
88
import com.threegap.bitnagil.data.user.service.UserService
9+
import com.threegap.bitnagil.data.version.service.VersionService
910
import com.threegap.bitnagil.data.writeroutine.service.WriteRoutineService
1011
import com.threegap.bitnagil.di.core.Auth
1112
import com.threegap.bitnagil.di.core.NoneAuth
@@ -60,4 +61,9 @@ object ServiceModule {
6061
@Singleton
6162
fun provideRecommendRoutineService(@Auth retrofit: Retrofit): RecommendRoutineService =
6263
retrofit.create(RecommendRoutineService::class.java)
64+
65+
@Provides
66+
@Singleton
67+
fun provideVersionService(@NoneAuth retrofit: Retrofit): VersionService =
68+
retrofit.create(VersionService::class.java)
6369
}

build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidApplicationPlugin.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.threegap.bitnagil.convention
22

33
import com.android.build.api.dsl.ApplicationExtension
4+
import com.threegap.bitnagil.convention.extension.configureAppVersion
45
import com.threegap.bitnagil.convention.extension.configureComposeAndroid
56
import com.threegap.bitnagil.convention.extension.configureKotlinAndroid
67
import org.gradle.api.Plugin
@@ -21,10 +22,10 @@ class AndroidApplicationPlugin : Plugin<Project> {
2122
extensions.configure<ApplicationExtension> {
2223
configureKotlinAndroid(this)
2324
configureComposeAndroid(this)
25+
configureAppVersion()
2426
with(defaultConfig) {
2527
targetSdk = libs.findVersion("targetSdk").get().requiredVersion.toInt()
2628
versionCode = libs.findVersion("versionCode").get().requiredVersion.toInt()
27-
versionName = libs.findVersion("versionName").get().requiredVersion
2829
}
2930
}
3031
}

build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidLibraryPlugin.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.threegap.bitnagil.convention
22

33
import com.android.build.gradle.LibraryExtension
4+
import com.threegap.bitnagil.convention.extension.configureAppVersion
45
import com.threegap.bitnagil.convention.extension.configureKotlinAndroid
56
import com.threegap.bitnagil.convention.extension.configureKotlinCoroutine
67
import org.gradle.api.Plugin
@@ -17,6 +18,7 @@ class AndroidLibraryPlugin : Plugin<Project> {
1718
extensions.configure<LibraryExtension> {
1819
configureKotlinAndroid(this)
1920
configureKotlinCoroutine(this)
21+
configureAppVersion()
2022
}
2123
}
2224
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.threegap.bitnagil.convention.extension
2+
3+
import com.android.build.api.dsl.ApplicationExtension
4+
import com.android.build.api.dsl.LibraryExtension
5+
import org.gradle.api.Project
6+
import org.gradle.api.artifacts.VersionCatalogsExtension
7+
import org.gradle.kotlin.dsl.findByType
8+
import org.gradle.kotlin.dsl.getByType
9+
10+
internal fun Project.configureAppVersion() {
11+
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
12+
val major = libs.findVersion("versionMajor").get().requiredVersion
13+
val minor = libs.findVersion("versionMinor").get().requiredVersion
14+
val patch = libs.findVersion("versionPatch").get().requiredVersion
15+
16+
extensions.findByType<ApplicationExtension>()?.let { appExtension ->
17+
appExtension.defaultConfig {
18+
versionName = "$major.$minor.$patch"
19+
buildConfigField("int", "VERSION_MAJOR", major)
20+
buildConfigField("int", "VERSION_MINOR", minor)
21+
buildConfigField("int", "VERSION_PATCH", patch)
22+
}
23+
}
24+
25+
extensions.findByType<LibraryExtension>()?.let { libExtension ->
26+
libExtension.apply {
27+
defaultConfig {
28+
buildConfigField("int", "VERSION_MAJOR", major)
29+
buildConfigField("int", "VERSION_MINOR", minor)
30+
buildConfigField("int", "VERSION_PATCH", patch)
31+
}
32+
buildFeatures {
33+
buildConfig = true
34+
}
35+
}
36+
}
37+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.threegap.bitnagil.data.version.datasource
2+
3+
import com.threegap.bitnagil.data.version.model.response.VersionCheckResponseDto
4+
5+
interface VersionDataSource {
6+
suspend fun checkVersion(): Result<VersionCheckResponseDto>
7+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.threegap.bitnagil.data.version.datasourceImpl
2+
3+
import com.threegap.bitnagil.data.BuildConfig
4+
import com.threegap.bitnagil.data.common.safeApiCall
5+
import com.threegap.bitnagil.data.version.datasource.VersionDataSource
6+
import com.threegap.bitnagil.data.version.model.response.VersionCheckResponseDto
7+
import com.threegap.bitnagil.data.version.service.VersionService
8+
import javax.inject.Inject
9+
10+
class VersionDataSourceImpl @Inject constructor(
11+
private val versionService: VersionService,
12+
) : VersionDataSource {
13+
14+
override suspend fun checkVersion(): Result<VersionCheckResponseDto> =
15+
safeApiCall {
16+
versionService.checkVersion(
17+
majorVersion = BuildConfig.VERSION_MAJOR,
18+
minorVersion = BuildConfig.VERSION_MINOR,
19+
patchVersion = BuildConfig.VERSION_PATCH,
20+
)
21+
}
22+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.threegap.bitnagil.data.version.model.response
2+
3+
import com.threegap.bitnagil.domain.version.model.UpdateRequirement
4+
import kotlinx.serialization.SerialName
5+
import kotlinx.serialization.Serializable
6+
7+
@Serializable
8+
data class VersionCheckResponseDto(
9+
@SerialName("forceUpdateYn")
10+
val forceUpdateYn: Boolean,
11+
)
12+
13+
fun VersionCheckResponseDto.toDomain() =
14+
UpdateRequirement(
15+
isForced = this.forceUpdateYn,
16+
)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.threegap.bitnagil.data.version.repositoryImpl
2+
3+
import com.threegap.bitnagil.data.version.datasource.VersionDataSource
4+
import com.threegap.bitnagil.data.version.model.response.toDomain
5+
import com.threegap.bitnagil.domain.version.model.UpdateRequirement
6+
import com.threegap.bitnagil.domain.version.repository.VersionRepository
7+
import javax.inject.Inject
8+
9+
class VersionRepositoryImpl @Inject constructor(
10+
private val versionDataSource: VersionDataSource,
11+
) : VersionRepository {
12+
13+
override suspend fun checkVersion(): Result<UpdateRequirement> =
14+
versionDataSource.checkVersion().map { it.toDomain() }
15+
}

0 commit comments

Comments
 (0)