Skip to content

Commit ab710bf

Browse files
committed
[BOOK-151] refactor: dataStore 의존성 구분을 위한 @qualifier 도입
1 parent 38ccfda commit ab710bf

File tree

9 files changed

+48
-24
lines changed

9 files changed

+48
-24
lines changed

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultAuthRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.ninecraft.booket.core.data.impl.repository
22

33
import com.ninecraft.booket.core.common.utils.runSuspendCatching
44
import com.ninecraft.booket.core.data.api.repository.AuthRepository
5-
import com.ninecraft.booket.core.datastore.api.datasource.TokenPreferencesDataSource
5+
import com.ninecraft.booket.core.datastore.api.datasource.TokenDataSource
66
import com.ninecraft.booket.core.network.request.LoginRequest
77
import com.ninecraft.booket.core.network.service.ReedService
88
import javax.inject.Inject
@@ -11,7 +11,7 @@ private const val KAKAO_PROVIDER_TYPE = "KAKAO"
1111

1212
internal class DefaultAuthRepository @Inject constructor(
1313
private val service: ReedService,
14-
private val tokenDatasource: TokenPreferencesDataSource,
14+
private val tokenDatasource: TokenDataSource,
1515
) : AuthRepository {
1616
override suspend fun login(accessToken: String) = runSuspendCatching {
1717
val response = service.login(

core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/TokenPreferencesDataSource.kt renamed to core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/TokenDataSource.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.ninecraft.booket.core.datastore.api.datasource
22

33
import kotlinx.coroutines.flow.Flow
44

5-
interface TokenPreferencesDataSource {
5+
interface TokenDataSource {
66
val accessToken: Flow<String>
77
val refreshToken: Flow<String>
88
suspend fun getAccessToken(): String

core/datastore/impl/src/androidTest/java/com/ninecraft/booket/core/datastore/impl/TokenPreferenceDataSourceTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import androidx.datastore.preferences.core.PreferenceDataStoreFactory
55
import androidx.datastore.preferences.core.Preferences
66
import androidx.datastore.preferences.core.stringPreferencesKey
77
import androidx.test.ext.junit.runners.AndroidJUnit4
8-
import com.ninecraft.booket.core.datastore.impl.datasource.DefaultTokenPreferencesDataSource
8+
import com.ninecraft.booket.core.datastore.impl.datasource.DefaultTokenDataSource
99
import com.ninecraft.booket.core.datastore.impl.security.CryptoManager
1010
import kotlinx.coroutines.CoroutineScope
1111
import kotlinx.coroutines.Dispatchers
@@ -26,7 +26,7 @@ import kotlin.io.path.createTempDirectory
2626
@RunWith(AndroidJUnit4::class)
2727
class TokenPreferenceDataSourceTest {
2828
private lateinit var dataStore: DataStore<Preferences>
29-
private lateinit var dataSource: DefaultTokenPreferencesDataSource
29+
private lateinit var dataSource: DefaultTokenDataSource
3030
private lateinit var cryptoManager: CryptoManager
3131
private lateinit var tempFile: File
3232

@@ -41,7 +41,7 @@ class TokenPreferenceDataSourceTest {
4141
)
4242

4343
cryptoManager = CryptoManager()
44-
dataSource = DefaultTokenPreferencesDataSource(dataStore, cryptoManager)
44+
dataSource = DefaultTokenDataSource(dataStore, cryptoManager)
4545
}
4646

4747
@After

core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultRecentSearchDataSource.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.datastore.preferences.core.Preferences
55
import androidx.datastore.preferences.core.edit
66
import androidx.datastore.preferences.core.stringPreferencesKey
77
import com.ninecraft.booket.core.datastore.api.datasource.RecentSearchDataSource
8+
import com.ninecraft.booket.core.datastore.impl.di.RecentSearchDataStore
89
import com.ninecraft.booket.core.datastore.impl.util.handleIOException
910
import com.orhanobut.logger.Logger
1011
import kotlinx.coroutines.flow.Flow
@@ -14,7 +15,7 @@ import kotlinx.serialization.json.Json
1415
import javax.inject.Inject
1516

1617
class DefaultRecentSearchDataSource @Inject constructor(
17-
private val dataStore: DataStore<Preferences>,
18+
@RecentSearchDataStore private val dataStore: DataStore<Preferences>,
1819
) : RecentSearchDataSource {
1920
@Suppress("TooGenericExceptionCaught")
2021
override val recentSearches: Flow<List<String>> = dataStore.data

core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultTokenPreferencesDataSource.kt renamed to core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultTokenDataSource.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import androidx.datastore.core.DataStore
44
import androidx.datastore.preferences.core.Preferences
55
import androidx.datastore.preferences.core.edit
66
import androidx.datastore.preferences.core.stringPreferencesKey
7-
import com.ninecraft.booket.core.datastore.api.datasource.TokenPreferencesDataSource
7+
import com.ninecraft.booket.core.datastore.api.datasource.TokenDataSource
8+
import com.ninecraft.booket.core.datastore.impl.di.TokenDataStore
89
import com.ninecraft.booket.core.datastore.impl.security.CryptoManager
910
import com.ninecraft.booket.core.datastore.impl.util.handleIOException
1011
import com.orhanobut.logger.Logger
@@ -14,10 +15,10 @@ import kotlinx.coroutines.flow.map
1415
import java.security.GeneralSecurityException
1516
import javax.inject.Inject
1617

17-
class DefaultTokenPreferencesDataSource @Inject constructor(
18-
private val dataStore: DataStore<Preferences>,
18+
class DefaultTokenDataSource @Inject constructor(
19+
@TokenDataStore private val dataStore: DataStore<Preferences>,
1920
private val cryptoManager: CryptoManager,
20-
) : TokenPreferencesDataSource {
21+
) : TokenDataSource {
2122
override val accessToken: Flow<String> = decryptStringFlow(ACCESS_TOKEN)
2223
override val refreshToken: Flow<String> = decryptStringFlow(REFRESH_TOKEN)
2324

@@ -59,7 +60,7 @@ class DefaultTokenPreferencesDataSource @Inject constructor(
5960
}.orEmpty()
6061
}
6162

62-
companion object {
63+
companion object Companion {
6364
private val ACCESS_TOKEN = stringPreferencesKey("ACCESS_TOKEN")
6465
private val REFRESH_TOKEN = stringPreferencesKey("REFRESH_TOKEN")
6566
}

core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/di/DataStoreModule.kt

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import androidx.datastore.core.DataStore
55
import androidx.datastore.preferences.core.Preferences
66
import androidx.datastore.preferences.preferencesDataStore
77
import com.ninecraft.booket.core.datastore.api.datasource.RecentSearchDataSource
8-
import com.ninecraft.booket.core.datastore.api.datasource.TokenPreferencesDataSource
8+
import com.ninecraft.booket.core.datastore.api.datasource.TokenDataSource
99
import com.ninecraft.booket.core.datastore.impl.datasource.DefaultRecentSearchDataSource
10-
import com.ninecraft.booket.core.datastore.impl.datasource.DefaultTokenPreferencesDataSource
10+
import com.ninecraft.booket.core.datastore.impl.datasource.DefaultTokenDataSource
1111
import dagger.Binds
1212
import dagger.Module
1313
import dagger.Provides
@@ -19,14 +19,25 @@ import javax.inject.Singleton
1919
@Module
2020
@InstallIn(SingletonComponent::class)
2121
object DataStoreModule {
22-
private const val TOKEN_DATASTORE_NAME = "TOKENS_PREFERENCES"
23-
private val Context.dataStore by preferencesDataStore(name = TOKEN_DATASTORE_NAME)
22+
private const val TOKEN_DATASTORE_NAME = "TOKENS_DATASTORE"
23+
private const val RECENT_SEARCH_DATASTORE_NAME = "RECENT_SEARCH_DATASTORE"
2424

25+
private val Context.tokenDataStore by preferencesDataStore(name = TOKEN_DATASTORE_NAME)
26+
private val Context.recentSearchDataStore by preferencesDataStore(name = RECENT_SEARCH_DATASTORE_NAME)
27+
28+
@TokenDataStore
2529
@Provides
2630
@Singleton
2731
fun provideTokenDataStore(
2832
@ApplicationContext context: Context,
29-
): DataStore<Preferences> = context.dataStore
33+
): DataStore<Preferences> = context.tokenDataStore
34+
35+
@RecentSearchDataStore
36+
@Provides
37+
@Singleton
38+
fun provideRecentSearchDataStore(
39+
@ApplicationContext context: Context,
40+
): DataStore<Preferences> = context.recentSearchDataStore
3041
}
3142

3243
@Module
@@ -35,9 +46,9 @@ abstract class DataStoreBindModule {
3546

3647
@Binds
3748
@Singleton
38-
abstract fun bindTokenPreferencesDataSource(
39-
defaultTokenPreferencesDataSource: DefaultTokenPreferencesDataSource,
40-
): TokenPreferencesDataSource
49+
abstract fun bindTokenDataSource(
50+
defaultTokenDataSource: DefaultTokenDataSource,
51+
): TokenDataSource
4152

4253
@Binds
4354
@Singleton
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.ninecraft.booket.core.datastore.impl.di
2+
3+
import javax.inject.Qualifier
4+
5+
@Qualifier
6+
@Retention(AnnotationRetention.BINARY)
7+
annotation class TokenDataStore
8+
9+
@Qualifier
10+
@Retention(AnnotationRetention.BINARY)
11+
annotation class RecentSearchDataStore

core/network/src/main/kotlin/com/ninecraft/booket/core/network/TokenAuthenticator.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.ninecraft.booket.core.network
22

3-
import com.ninecraft.booket.core.datastore.api.datasource.TokenPreferencesDataSource
3+
import com.ninecraft.booket.core.datastore.api.datasource.TokenDataSource
44
import com.ninecraft.booket.core.network.request.RefreshTokenRequest
55
import com.ninecraft.booket.core.network.service.ReedService
66
import com.orhanobut.logger.Logger
@@ -14,7 +14,7 @@ import javax.inject.Provider
1414

1515
@Suppress("TooGenericExceptionCaught")
1616
class TokenAuthenticator @Inject constructor(
17-
private val tokenDataSource: TokenPreferencesDataSource,
17+
private val tokenDataSource: TokenDataSource,
1818
private val serviceProvider: Provider<ReedService>,
1919
) : Authenticator {
2020
override fun authenticate(route: Route?, response: Response): Request? {

core/network/src/main/kotlin/com/ninecraft/booket/core/network/TokenInterceptor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package com.ninecraft.booket.core.network
22

3-
import com.ninecraft.booket.core.datastore.api.datasource.TokenPreferencesDataSource
3+
import com.ninecraft.booket.core.datastore.api.datasource.TokenDataSource
44
import kotlinx.coroutines.runBlocking
55
import okhttp3.Interceptor
66
import okhttp3.Response
77
import javax.inject.Inject
88

99
internal class TokenInterceptor @Inject constructor(
1010
@Suppress("unused")
11-
private val tokenDataSource: TokenPreferencesDataSource,
11+
private val tokenDataSource: TokenDataSource,
1212
) : Interceptor {
1313

1414
private val noAuthEndpoints = setOf(

0 commit comments

Comments
 (0)