From 8568277f95d315bf64d59833748a27f3e8c61ed1 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 8 Dec 2025 14:05:09 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../appcurrency/AppCurrencyResponseStore.kt | 3 +++ .../DefaultAppCurrencyResponseStore.kt | 8 ++++++ .../DefaultAppCurrencyRepository.kt | 21 ++++++---------- .../appcurrency/di/AppCurrencyDataModule.kt | 6 ++--- .../data/onramp/DefaultHotCryptoRepository.kt | 25 ++++++++----------- .../tangem/data/onramp/di/OnrampDataModule.kt | 5 ++-- 6 files changed, 35 insertions(+), 33 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/appcurrency/AppCurrencyResponseStore.kt b/core/datasource/src/main/java/com/tangem/datasource/appcurrency/AppCurrencyResponseStore.kt index 5f9e2c12a9..45e05a8df4 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/appcurrency/AppCurrencyResponseStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/appcurrency/AppCurrencyResponseStore.kt @@ -15,4 +15,7 @@ interface AppCurrencyResponseStore { /** Get [CurrenciesResponse.Currency] synchronously or null */ suspend fun getSyncOrNull(): CurrenciesResponse.Currency? + + /** Store [CurrenciesResponse.Currency] */ + suspend fun store(currency: CurrenciesResponse.Currency) } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/appcurrency/DefaultAppCurrencyResponseStore.kt b/core/datasource/src/main/java/com/tangem/datasource/appcurrency/DefaultAppCurrencyResponseStore.kt index 1c268c06c7..9225bd5ab8 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/appcurrency/DefaultAppCurrencyResponseStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/appcurrency/DefaultAppCurrencyResponseStore.kt @@ -5,6 +5,7 @@ import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.preferences.PreferencesKeys import com.tangem.datasource.local.preferences.utils.getObject import com.tangem.datasource.local.preferences.utils.getObjectSyncOrNull +import com.tangem.datasource.local.preferences.utils.storeObject import kotlinx.coroutines.flow.Flow /** @@ -25,4 +26,11 @@ internal class DefaultAppCurrencyResponseStore( PreferencesKeys.SELECTED_APP_CURRENCY_KEY, ) } + + override suspend fun store(currency: CurrenciesResponse.Currency) { + appPreferencesStore.storeObject( + PreferencesKeys.SELECTED_APP_CURRENCY_KEY, + currency, + ) + } } \ No newline at end of file diff --git a/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt b/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt index bcc535bed2..aae64594c5 100644 --- a/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt +++ b/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt @@ -5,12 +5,8 @@ import com.tangem.data.common.api.safeApiCall import com.tangem.data.common.cache.CacheRegistry import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.CurrenciesResponse +import com.tangem.datasource.appcurrency.AppCurrencyResponseStore import com.tangem.datasource.local.appcurrency.AvailableAppCurrenciesStore -import com.tangem.datasource.local.preferences.AppPreferencesStore -import com.tangem.datasource.local.preferences.PreferencesKeys -import com.tangem.datasource.local.preferences.utils.getObject -import com.tangem.datasource.local.preferences.utils.getSyncOrNull -import com.tangem.datasource.local.preferences.utils.storeObject import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.appcurrency.repository.AppCurrencyRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider @@ -24,7 +20,7 @@ import org.joda.time.Duration internal class DefaultAppCurrencyRepository( private val tangemTechApi: TangemTechApi, - private val appPreferencesStore: AppPreferencesStore, + private val appCurrencyResponseStore: AppCurrencyResponseStore, private val availableAppCurrenciesStore: AvailableAppCurrenciesStore, private val cacheRegistry: CacheRegistry, private val dispatchers: CoroutineDispatcherProvider, @@ -35,15 +31,15 @@ internal class DefaultAppCurrencyRepository( override fun getSelectedAppCurrency(): Flow { return channelFlow { launch { - appPreferencesStore - .getObject(key = PreferencesKeys.SELECTED_APP_CURRENCY_KEY) + appCurrencyResponseStore + .get() .filterNotNull() .map(appCurrencyConverter::convert) .collect(::send) } withContext(dispatchers.io) { - if (appPreferencesStore.getSyncOrNull(PreferencesKeys.SELECTED_APP_CURRENCY_KEY) == null) { + if (appCurrencyResponseStore.getSyncOrNull() == null) { fetchDefaultAppCurrency() } } @@ -70,17 +66,14 @@ internal class DefaultAppCurrencyRepository( "Unable to find app currency with provided code: $currencyCode" } - appPreferencesStore.storeObject( - key = PreferencesKeys.SELECTED_APP_CURRENCY_KEY, - value = currency, - ) + appCurrencyResponseStore.store(currency) } } override suspend fun fetchDefaultAppCurrency(isRefresh: Boolean) { withContext(dispatchers.io) { fetchAvailableCurrenciesIfExpired(isRefresh) - val appCurrency = appPreferencesStore.getSyncOrNull(PreferencesKeys.SELECTED_APP_CURRENCY_KEY) + val appCurrency = appCurrencyResponseStore.getSyncOrNull()?.code changeAppCurrency(appCurrency ?: DEFAULT_CURRENCY_CODE) } } diff --git a/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/di/AppCurrencyDataModule.kt b/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/di/AppCurrencyDataModule.kt index d9cb9be5f7..719823ed4a 100644 --- a/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/di/AppCurrencyDataModule.kt +++ b/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/di/AppCurrencyDataModule.kt @@ -3,8 +3,8 @@ package com.tangem.data.appcurrency.di import com.tangem.data.appcurrency.DefaultAppCurrencyRepository import com.tangem.data.common.cache.CacheRegistry import com.tangem.datasource.api.tangemTech.TangemTechApi +import com.tangem.datasource.appcurrency.AppCurrencyResponseStore import com.tangem.datasource.local.appcurrency.AvailableAppCurrenciesStore -import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.domain.appcurrency.repository.AppCurrencyRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.Module @@ -21,17 +21,17 @@ internal object AppCurrencyDataModule { @Singleton fun provideAppCurrencyRepository( tangemTechApi: TangemTechApi, - appPreferencesStore: AppPreferencesStore, + appCurrencyResponseStore: AppCurrencyResponseStore, availableAppCurrenciesStore: AvailableAppCurrenciesStore, cacheRegistry: CacheRegistry, dispatchers: CoroutineDispatcherProvider, ): AppCurrencyRepository { return DefaultAppCurrencyRepository( tangemTechApi = tangemTechApi, - appPreferencesStore = appPreferencesStore, availableAppCurrenciesStore = availableAppCurrenciesStore, cacheRegistry = cacheRegistry, dispatchers = dispatchers, + appCurrencyResponseStore = appCurrencyResponseStore, ) } } \ No newline at end of file diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultHotCryptoRepository.kt b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultHotCryptoRepository.kt index cfffffb159..b1552db7cc 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultHotCryptoRepository.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultHotCryptoRepository.kt @@ -11,13 +11,10 @@ import com.tangem.data.onramp.converters.HotCryptoCurrencyConverter import com.tangem.datasource.api.common.response.ApiResponseError import com.tangem.datasource.api.common.response.getOrThrow import com.tangem.datasource.api.tangemTech.TangemTechApi -import com.tangem.datasource.api.tangemTech.models.CurrenciesResponse import com.tangem.datasource.api.tangemTech.models.HotCryptoResponse import com.tangem.datasource.api.tangemTech.models.UserTokensResponse +import com.tangem.datasource.appcurrency.AppCurrencyResponseStore import com.tangem.datasource.exchangeservice.hotcrypto.HotCryptoResponseStore -import com.tangem.datasource.local.preferences.AppPreferencesStore -import com.tangem.datasource.local.preferences.PreferencesKeys -import com.tangem.datasource.local.preferences.utils.getObject import com.tangem.datasource.local.token.UserTokensResponseStore import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.card.common.extensions.canHandleBlockchain @@ -39,13 +36,13 @@ import timber.log.Timber /** * Default implementation of [HotCryptoRepository] * - * @property excludedBlockchains excluded blockchains - * @property hotCryptoResponseStore store of `HotCryptoResponse` - * @property userWalletsStore store of `UserWallet` - * @property tangemTechApi tangem tech api - * @property appPreferencesStore app preferences store - * @property dispatchers dispatchers - * @property analyticsEventHandler analytics event handler + * @property excludedBlockchains excluded blockchains + * @property hotCryptoResponseStore store of `HotCryptoResponse` + * @property userWalletsStore store of `UserWallet` + * @property tangemTechApi tangem tech api + * @property appCurrencyResponseStore store of current app currency + * @property dispatchers dispatchers + * @property analyticsEventHandler analytics event handler * [REDACTED_AUTHOR] */ @@ -56,7 +53,7 @@ internal class DefaultHotCryptoRepository( private val hotCryptoResponseStore: HotCryptoResponseStore, private val userWalletsStore: UserWalletsStore, private val tangemTechApi: TangemTechApi, - private val appPreferencesStore: AppPreferencesStore, + private val appCurrencyResponseStore: AppCurrencyResponseStore, private val userTokensResponseStore: UserTokensResponseStore, private val dispatchers: CoroutineDispatcherProvider, private val analyticsEventHandler: AnalyticsEventHandler, @@ -112,8 +109,8 @@ internal class DefaultHotCryptoRepository( } private fun getHotCryptoFlow(): Flow { - return appPreferencesStore - .getObject(key = PreferencesKeys.SELECTED_APP_CURRENCY_KEY) + return appCurrencyResponseStore + .get() .map { it?.id ?: "usd" } .distinctUntilChanged() .map { getHotCrypto(appCurrencyId = it).getOrNull() } diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt b/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt index b953fd69c7..2e80138833 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt @@ -13,6 +13,7 @@ import com.tangem.datasource.api.express.TangemExpressApi import com.tangem.datasource.api.express.models.response.ExpressErrorResponse import com.tangem.datasource.api.onramp.OnrampApi import com.tangem.datasource.api.tangemTech.TangemTechApi +import com.tangem.datasource.appcurrency.AppCurrencyResponseStore import com.tangem.datasource.crypto.DataSignatureVerifier import com.tangem.datasource.di.NetworkMoshi import com.tangem.datasource.exchangeservice.hotcrypto.HotCryptoResponseStore @@ -104,7 +105,7 @@ internal object OnrampDataModule { hotCryptoResponseStore: HotCryptoResponseStore, userWalletsStore: UserWalletsStore, tangemTechApi: TangemTechApi, - appPreferencesStore: AppPreferencesStore, + appCurrencyResponseStore: AppCurrencyResponseStore, dispatchers: CoroutineDispatcherProvider, analyticsEventHandler: AnalyticsEventHandler, userTokensResponseStore: UserTokensResponseStore, @@ -114,7 +115,7 @@ internal object OnrampDataModule { hotCryptoResponseStore = hotCryptoResponseStore, userWalletsStore = userWalletsStore, tangemTechApi = tangemTechApi, - appPreferencesStore = appPreferencesStore, + appCurrencyResponseStore = appCurrencyResponseStore, dispatchers = dispatchers, analyticsEventHandler = analyticsEventHandler, userTokensResponseStore = userTokensResponseStore,