Skip to content

Commit a03e99d

Browse files
authored
Merge pull request #19 from YAPP-Github/refactor/#17-di-unification
[Refactor/#17] DI 생성 책임을 app 모듈로 이관
2 parents 567ddf8 + 8034670 commit a03e99d

File tree

23 files changed

+117
-94
lines changed

23 files changed

+117
-94
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.threegap.bitnagil.di.core
2+
3+
import android.content.Context
4+
import com.threegap.bitnagil.datastore.auth.crypto.TokenCrypto
5+
import com.threegap.bitnagil.datastore.auth.serializer.AuthTokenSerializer
6+
import com.threegap.bitnagil.datastore.auth.storage.AuthTokenDataStore
7+
import com.threegap.bitnagil.datastore.auth.storage.AuthTokenStorageFactory
8+
import com.threegap.bitnagil.security.crypto.Crypto
9+
import dagger.Module
10+
import dagger.Provides
11+
import dagger.hilt.InstallIn
12+
import dagger.hilt.android.qualifiers.ApplicationContext
13+
import dagger.hilt.components.SingletonComponent
14+
import javax.inject.Singleton
15+
16+
@Module
17+
@InstallIn(SingletonComponent::class)
18+
object DataStoreModule {
19+
20+
@Singleton
21+
@Provides
22+
fun provideTokenCrypto(crypto: Crypto): TokenCrypto =
23+
object : TokenCrypto {
24+
override fun encrypt(bytes: ByteArray): ByteArray = crypto.encrypt(bytes)
25+
26+
override fun decrypt(bytes: ByteArray): ByteArray = crypto.decrypt(bytes)
27+
}
28+
29+
@Provides
30+
@Singleton
31+
fun provideAuthTokenStorage(
32+
@ApplicationContext context: Context,
33+
serializer: AuthTokenSerializer,
34+
): AuthTokenDataStore = AuthTokenStorageFactory.create(context, serializer)
35+
}

app/src/main/java/com/threegap/bitnagil/di/NetworkModule.kt renamed to app/src/main/java/com/threegap/bitnagil/di/core/NetworkModule.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
package com.threegap.bitnagil.di
1+
package com.threegap.bitnagil.di.core
22

33
import com.threegap.bitnagil.BuildConfig
4+
import com.threegap.bitnagil.datastore.auth.storage.AuthTokenDataStore
45
import com.threegap.bitnagil.network.auth.AuthInterceptor
6+
import com.threegap.bitnagil.network.token.TokenProvider
57
import dagger.Module
68
import dagger.Provides
79
import dagger.hilt.InstallIn
810
import dagger.hilt.components.SingletonComponent
11+
import kotlinx.coroutines.flow.first
912
import kotlinx.serialization.json.Json
1013
import okhttp3.Interceptor
1114
import okhttp3.MediaType.Companion.toMediaType
@@ -107,4 +110,11 @@ object NetworkModule {
107110
.addConverterFactory(converterFactory)
108111
.client(okHttpClient)
109112
.build()
113+
114+
@Provides
115+
@Singleton
116+
fun provideTokenStore(dataStore: AuthTokenDataStore): TokenProvider =
117+
object : TokenProvider {
118+
override suspend fun getToken(): String? = dataStore.tokenFlow.first().accessToken
119+
}
110120
}

app/src/main/java/com/threegap/bitnagil/di/Qualifier.kt renamed to app/src/main/java/com/threegap/bitnagil/di/core/Qualifier.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.threegap.bitnagil.di
1+
package com.threegap.bitnagil.di.core
22

33
import javax.inject.Qualifier
44

core/security/src/main/java/com/threegap/bitnagil/security/di/SecurityModule.kt renamed to app/src/main/java/com/threegap/bitnagil/di/core/SecurityModule.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.threegap.bitnagil.security.di
1+
package com.threegap.bitnagil.di.core
22

33
import com.threegap.bitnagil.security.crypto.Crypto
44
import com.threegap.bitnagil.security.crypto.SecureCrypto
@@ -13,6 +13,7 @@ import javax.inject.Singleton
1313
@Module
1414
@InstallIn(SingletonComponent::class)
1515
object SecurityModule {
16+
1617
@Provides
1718
@Singleton
1819
fun provideKeyProvider(): KeyProvider = AndroidKeyProvider()

core/datastore/build.gradle.kts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
plugins {
22
alias(libs.plugins.bitnagil.android.library)
3-
alias(libs.plugins.bitnagil.android.hilt)
43
alias(libs.plugins.kotlin.serialization)
54
}
65

@@ -9,8 +8,6 @@ android {
98
}
109

1110
dependencies {
12-
implementation(projects.core.security)
13-
1411
implementation(libs.androidx.datastore.preferences)
1512
implementation(libs.kotlinx.serialization.json)
1613

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.threegap.bitnagil.datastore.auth.crypto
2+
3+
interface TokenCrypto {
4+
fun encrypt(bytes: ByteArray): ByteArray
5+
fun decrypt(bytes: ByteArray): ByteArray
6+
}

core/datastore/src/main/java/com/threegap/bitnagil/datastore/model/AuthToken.kt renamed to core/datastore/src/main/java/com/threegap/bitnagil/datastore/auth/model/AuthToken.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.threegap.bitnagil.datastore.model
1+
package com.threegap.bitnagil.datastore.auth.model
22

33
import kotlinx.serialization.Serializable
44

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.threegap.bitnagil.datastore.auth.serializer
2+
3+
import androidx.datastore.core.Serializer
4+
import com.threegap.bitnagil.datastore.auth.model.AuthToken
5+
6+
interface AuthTokenSerializer : Serializer<AuthToken>

core/datastore/src/main/java/com/threegap/bitnagil/datastore/serializer/AuthTokenSerializer.kt renamed to core/datastore/src/main/java/com/threegap/bitnagil/datastore/auth/serializer/AuthTokenSerializerImpl.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
package com.threegap.bitnagil.datastore.serializer
1+
package com.threegap.bitnagil.datastore.auth.serializer
22

3-
import com.threegap.bitnagil.datastore.model.AuthToken
4-
import com.threegap.bitnagil.security.crypto.Crypto
3+
import androidx.datastore.core.Serializer
4+
import com.threegap.bitnagil.datastore.auth.crypto.TokenCrypto
5+
import com.threegap.bitnagil.datastore.auth.model.AuthToken
56
import kotlinx.coroutines.Dispatchers
67
import kotlinx.coroutines.withContext
78
import kotlinx.serialization.json.Json
89
import java.io.InputStream
910
import java.io.OutputStream
1011
import java.util.Base64
11-
import javax.inject.Inject
1212

13-
internal class AuthTokenSerializer @Inject constructor(
14-
private val crypto: Crypto,
15-
) : TokenSerializer {
13+
class AuthTokenSerializerImpl(
14+
private val crypto: TokenCrypto,
15+
) : Serializer<AuthToken> {
1616
override val defaultValue: AuthToken
1717
get() = AuthToken()
1818

core/datastore/src/main/java/com/threegap/bitnagil/datastore/storage/AuthTokenDataStore.kt renamed to core/datastore/src/main/java/com/threegap/bitnagil/datastore/auth/storage/AuthTokenDataStore.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.threegap.bitnagil.datastore.storage
1+
package com.threegap.bitnagil.datastore.auth.storage
22

3-
import com.threegap.bitnagil.datastore.model.AuthToken
3+
import com.threegap.bitnagil.datastore.auth.model.AuthToken
44
import kotlinx.coroutines.flow.Flow
55

66
interface AuthTokenDataStore {

0 commit comments

Comments
 (0)