From f53ffa9a645663251234e9fea0cf3e45e68b41b4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 21 Nov 2024 14:50:12 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/di/domain/OnrampDomainModule.kt | 6 ++ .../tangem/datasource/di/OnrampStoreModule.kt | 20 +++- .../onramp/pairs/DefaultOnrampPairsStore.kt | 11 ++ .../local/onramp/pairs/OnrampPairsStore.kt | 9 ++ .../DefaultOnrampPaymentMethodsStore.kt | 2 +- .../OnrampPaymentMethodsStore.kt | 4 +- .../onramp/quotes/DefaultOnrampQuotesStore.kt | 11 ++ .../local/onramp/quotes/OnrampQuotesStore.kt | 9 ++ .../data/onramp/DefaultOnrampRepository.kt | 101 +++++++++++++++++- .../tangem/data/onramp/di/OnrampDataModule.kt | 8 +- .../onramp/CheckOnrampAvailabilityUseCase.kt | 8 +- .../domain/onramp/ClearOnrampCacheUseCase.kt | 10 ++ .../onramp/repositories/OnrampRepository.kt | 11 +- .../main/model/OnrampMainComponentModel.kt | 9 +- 14 files changed, 206 insertions(+), 13 deletions(-) create mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/onramp/pairs/DefaultOnrampPairsStore.kt create mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/onramp/pairs/OnrampPairsStore.kt rename core/datasource/src/main/java/com/tangem/datasource/local/onramp/{ => paymentmethods}/DefaultOnrampPaymentMethodsStore.kt (89%) rename core/datasource/src/main/java/com/tangem/datasource/local/onramp/{ => paymentmethods}/OnrampPaymentMethodsStore.kt (78%) create mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/onramp/quotes/DefaultOnrampQuotesStore.kt create mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/onramp/quotes/OnrampQuotesStore.kt create mode 100644 domain/onramp/src/main/java/com/tangem/domain/onramp/ClearOnrampCacheUseCase.kt diff --git a/app/src/main/java/com/tangem/tap/di/domain/OnrampDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/OnrampDomainModule.kt index d21153b84b..4b3fb3f472 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/OnrampDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/OnrampDomainModule.kt @@ -102,4 +102,10 @@ internal object OnrampDomainModule { fun provideGetOnrampPaymentMethodsUseCase(onrampRepository: OnrampRepository): GetOnrampPaymentMethodsUseCase { return GetOnrampPaymentMethodsUseCase(onrampRepository) } + + @Provides + @Singleton + fun provideClearOnrampCacheUseCase(onrampRepository: OnrampRepository): ClearOnrampCacheUseCase { + return ClearOnrampCacheUseCase(onrampRepository) + } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/OnrampStoreModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/OnrampStoreModule.kt index 8b7fb87fa2..def89f2cb1 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/OnrampStoreModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/OnrampStoreModule.kt @@ -1,8 +1,12 @@ package com.tangem.datasource.di import com.tangem.datasource.local.datastore.RuntimeDataStore -import com.tangem.datasource.local.onramp.DefaultOnrampPaymentMethodsStore -import com.tangem.datasource.local.onramp.OnrampPaymentMethodsStore +import com.tangem.datasource.local.onramp.pairs.DefaultOnrampPairsStore +import com.tangem.datasource.local.onramp.pairs.OnrampPairsStore +import com.tangem.datasource.local.onramp.paymentmethods.DefaultOnrampPaymentMethodsStore +import com.tangem.datasource.local.onramp.paymentmethods.OnrampPaymentMethodsStore +import com.tangem.datasource.local.onramp.quotes.DefaultOnrampQuotesStore +import com.tangem.datasource.local.onramp.quotes.OnrampQuotesStore import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -18,4 +22,16 @@ internal object OnrampStoreModule { fun provideOnrampPaymentMethodsStore(): OnrampPaymentMethodsStore { return DefaultOnrampPaymentMethodsStore(dataStore = RuntimeDataStore()) } + + @Provides + @Singleton + fun provideOnrampPairsStore(): OnrampPairsStore { + return DefaultOnrampPairsStore(dataStore = RuntimeDataStore()) + } + + @Provides + @Singleton + fun provideOnrampQuotesStore(): OnrampQuotesStore { + return DefaultOnrampQuotesStore(dataStore = RuntimeDataStore()) + } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/pairs/DefaultOnrampPairsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/pairs/DefaultOnrampPairsStore.kt new file mode 100644 index 0000000000..636106284b --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/pairs/DefaultOnrampPairsStore.kt @@ -0,0 +1,11 @@ +package com.tangem.datasource.local.onramp.pairs + +import com.tangem.datasource.api.onramp.models.response.model.OnrampPairDTO +import com.tangem.datasource.local.datastore.core.StringKeyDataStore +import com.tangem.datasource.local.datastore.core.StringKeyDataStoreDecorator + +internal class DefaultOnrampPairsStore( + dataStore: StringKeyDataStore>, +) : OnrampPairsStore, StringKeyDataStoreDecorator>(dataStore) { + override fun provideStringKey(key: String): String = key +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/pairs/OnrampPairsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/pairs/OnrampPairsStore.kt new file mode 100644 index 0000000000..1b32894636 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/pairs/OnrampPairsStore.kt @@ -0,0 +1,9 @@ +package com.tangem.datasource.local.onramp.pairs + +import com.tangem.datasource.api.onramp.models.response.model.OnrampPairDTO + +interface OnrampPairsStore { + suspend fun getSyncOrNull(key: String): List? + suspend fun store(key: String, value: List) + suspend fun clear() +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/DefaultOnrampPaymentMethodsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/paymentmethods/DefaultOnrampPaymentMethodsStore.kt similarity index 89% rename from core/datasource/src/main/java/com/tangem/datasource/local/onramp/DefaultOnrampPaymentMethodsStore.kt rename to core/datasource/src/main/java/com/tangem/datasource/local/onramp/paymentmethods/DefaultOnrampPaymentMethodsStore.kt index 3a4fa1b949..1dacddfbc0 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/DefaultOnrampPaymentMethodsStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/paymentmethods/DefaultOnrampPaymentMethodsStore.kt @@ -1,4 +1,4 @@ -package com.tangem.datasource.local.onramp +package com.tangem.datasource.local.onramp.paymentmethods import com.tangem.datasource.api.onramp.models.response.model.PaymentMethodDTO import com.tangem.datasource.local.datastore.core.StringKeyDataStore diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/OnrampPaymentMethodsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/paymentmethods/OnrampPaymentMethodsStore.kt similarity index 78% rename from core/datasource/src/main/java/com/tangem/datasource/local/onramp/OnrampPaymentMethodsStore.kt rename to core/datasource/src/main/java/com/tangem/datasource/local/onramp/paymentmethods/OnrampPaymentMethodsStore.kt index a6847ae671..fc1eca40d4 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/OnrampPaymentMethodsStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/paymentmethods/OnrampPaymentMethodsStore.kt @@ -1,4 +1,4 @@ -package com.tangem.datasource.local.onramp +package com.tangem.datasource.local.onramp.paymentmethods import com.tangem.datasource.api.onramp.models.response.model.PaymentMethodDTO @@ -9,4 +9,6 @@ interface OnrampPaymentMethodsStore { suspend fun store(key: String, value: List) suspend fun contains(key: String): Boolean + + suspend fun clear() } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/quotes/DefaultOnrampQuotesStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/quotes/DefaultOnrampQuotesStore.kt new file mode 100644 index 0000000000..fb7a157350 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/quotes/DefaultOnrampQuotesStore.kt @@ -0,0 +1,11 @@ +package com.tangem.datasource.local.onramp.quotes + +import com.tangem.datasource.api.onramp.models.response.OnrampQuoteResponse +import com.tangem.datasource.local.datastore.core.StringKeyDataStore +import com.tangem.datasource.local.datastore.core.StringKeyDataStoreDecorator + +internal class DefaultOnrampQuotesStore( + dataStore: StringKeyDataStore>, +) : OnrampQuotesStore, StringKeyDataStoreDecorator>(dataStore) { + override fun provideStringKey(key: String): String = key +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/quotes/OnrampQuotesStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/quotes/OnrampQuotesStore.kt new file mode 100644 index 0000000000..0e7034f3b2 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/quotes/OnrampQuotesStore.kt @@ -0,0 +1,9 @@ +package com.tangem.datasource.local.onramp.quotes + +import com.tangem.datasource.api.onramp.models.response.OnrampQuoteResponse + +interface OnrampQuotesStore { + suspend fun getSyncOrNull(key: String): List? + suspend fun store(key: String, value: List) + suspend fun clear() +} \ No newline at end of file diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt index 4145803c20..8225a6295c 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt @@ -3,13 +3,18 @@ package com.tangem.data.onramp import com.tangem.data.common.api.safeApiCall import com.tangem.data.onramp.converters.CountryConverter import com.tangem.data.onramp.converters.CurrencyConverter -import com.tangem.data.onramp.converters.StatusConverter import com.tangem.data.onramp.converters.PaymentMethodConverter +import com.tangem.data.onramp.converters.StatusConverter import com.tangem.datasource.api.common.response.getOrThrow +import com.tangem.datasource.api.express.models.TangemExpressValues import com.tangem.datasource.api.onramp.OnrampApi +import com.tangem.datasource.api.onramp.models.common.OnrampDestinationDTO +import com.tangem.datasource.api.onramp.models.request.OnrampPairsRequest import com.tangem.datasource.api.onramp.models.response.model.OnrampCountryDTO import com.tangem.datasource.api.onramp.models.response.model.OnrampCurrencyDTO -import com.tangem.datasource.local.onramp.OnrampPaymentMethodsStore +import com.tangem.datasource.local.onramp.pairs.OnrampPairsStore +import com.tangem.datasource.local.onramp.paymentmethods.OnrampPaymentMethodsStore +import com.tangem.datasource.local.onramp.quotes.OnrampQuotesStore import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.preferences.PreferencesKeys import com.tangem.datasource.local.preferences.utils.getObject @@ -17,10 +22,13 @@ import com.tangem.datasource.local.preferences.utils.getObjectSyncOrNull import com.tangem.datasource.local.preferences.utils.storeObject import com.tangem.domain.onramp.model.OnrampCountry import com.tangem.domain.onramp.model.OnrampCurrency -import com.tangem.domain.onramp.model.OnrampStatus import com.tangem.domain.onramp.model.OnrampPaymentMethod +import com.tangem.domain.onramp.model.OnrampStatus import com.tangem.domain.onramp.repositories.OnrampRepository +import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.utils.coroutines.CoroutineDispatcherProvider +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.withContext @@ -31,6 +39,8 @@ internal class DefaultOnrampRepository( private val dispatchers: CoroutineDispatcherProvider, private val appPreferencesStore: AppPreferencesStore, private val paymentMethodsStore: OnrampPaymentMethodsStore, + private val pairsStore: OnrampPairsStore, + private val quotesStore: OnrampQuotesStore, ) : OnrampRepository { private val currencyConverter = CurrencyConverter() @@ -100,8 +110,8 @@ internal class DefaultOnrampRepository( .map { it?.let(countryConverter::convert) } } - override suspend fun fetchPaymentMethodsIfAbsent() { - if (paymentMethodsStore.contains(PAYMENT_METHODS_KEY)) return + override suspend fun fetchPaymentMethodsIfAbsent() = withContext(dispatchers.io) { + if (paymentMethodsStore.contains(PAYMENT_METHODS_KEY)) return@withContext val response = safeApiCall( call = { onrampApi.getPaymentMethods().bind() }, @@ -113,6 +123,74 @@ internal class DefaultOnrampRepository( paymentMethodsStore.store(PAYMENT_METHODS_KEY, response) } + override suspend fun fetchPairs(currency: OnrampCurrency, country: OnrampCountry, cryptoCurrency: CryptoCurrency) = + withContext(dispatchers.io) { + val pairs = safeApiCall( + call = { + onrampApi.getPairs( + body = OnrampPairsRequest( + fromCurrencyCode = currency.code, + countryCode = country.code, + to = listOf( + OnrampDestinationDTO( + contractAddress = cryptoCurrency.getContractAddress(), + network = cryptoCurrency.network.backendId, + ), + ), + ), + ).bind() + }, + onError = { + Timber.w(it, "Unable to fetch onramp pairs") + throw it + }, + ) + pairsStore.store(PAIRS_KEY, pairs) + } + + override suspend fun fetchQuotes( + currency: OnrampCurrency, + country: OnrampCountry, + cryptoCurrency: CryptoCurrency, + fromAmount: String, + ) = withContext(dispatchers.io) { + val pairs = requireNotNull(pairsStore.getSyncOrNull(PAIRS_KEY)) { + "Unable to get pairs. At this point they must not be null." + } + val quotes = pairs.flatMap { pair -> + pair.providers.flatMap { provider -> + provider.paymentMethods.map { paymentMethod -> + async { + safeApiCall( + call = { + onrampApi.getQuote( + fromCurrencyCode = currency.code, + toContractAddress = cryptoCurrency.getContractAddress(), + toNetwork = cryptoCurrency.network.backendId, + paymentMethod = paymentMethod, + countryCode = country.code, + fromAmount = fromAmount, + toDecimals = cryptoCurrency.decimals, + providerId = provider.providerId, + ).bind() + }, + onError = { + Timber.w( + it, + "Unable to fetch onramp quotes for ${provider.providerId} -> $paymentMethod", + ) + null + }, + ) + } + } + } + } + .awaitAll() + .filterNotNull() + quotesStore.store(QUOTES_KEY, quotes) + } + override suspend fun getPaymentMethods(): List { val paymentMethods = requireNotNull(paymentMethodsStore.getSyncOrNull(PAYMENT_METHODS_KEY)) { "Onramp payment methods is absent in storage" @@ -120,7 +198,20 @@ internal class DefaultOnrampRepository( return paymentMethodsConverter.convertList(paymentMethods) } + override suspend fun clearCache() { + paymentMethodsStore.clear() + pairsStore.clear() + quotesStore.clear() + } + + private fun CryptoCurrency.getContractAddress(): String = when (this) { + is CryptoCurrency.Coin -> TangemExpressValues.EMPTY_CONTRACT_ADDRESS_VALUE + is CryptoCurrency.Token -> this.contractAddress + } + private companion object { const val PAYMENT_METHODS_KEY = "onramp_payment_methods" + const val PAIRS_KEY = "onramp_pairs" + const val QUOTES_KEY = "onramp_quotes" } } \ No newline at end of file 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 3731a0773d..1d19134538 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 @@ -4,7 +4,9 @@ import com.tangem.data.onramp.DefaultOnrampErrorResolver import com.tangem.data.onramp.DefaultOnrampRepository import com.tangem.data.onramp.DefaultOnrampTransactionRepository import com.tangem.datasource.api.onramp.OnrampApi -import com.tangem.datasource.local.onramp.OnrampPaymentMethodsStore +import com.tangem.datasource.local.onramp.pairs.OnrampPairsStore +import com.tangem.datasource.local.onramp.paymentmethods.OnrampPaymentMethodsStore +import com.tangem.datasource.local.onramp.quotes.OnrampQuotesStore import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.domain.onramp.repositories.OnrampErrorResolver import com.tangem.domain.onramp.repositories.OnrampRepository @@ -27,12 +29,16 @@ internal object OnrampDataModule { dispatchers: CoroutineDispatcherProvider, appPreferencesStore: AppPreferencesStore, paymentMethodsStore: OnrampPaymentMethodsStore, + pairsStore: OnrampPairsStore, + quotesStore: OnrampQuotesStore, ): OnrampRepository { return DefaultOnrampRepository( onrampApi = onrampApi, dispatchers = dispatchers, appPreferencesStore = appPreferencesStore, paymentMethodsStore = paymentMethodsStore, + pairsStore = pairsStore, + quotesStore = quotesStore, ) } diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/CheckOnrampAvailabilityUseCase.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/CheckOnrampAvailabilityUseCase.kt index 2e099164d9..60a38a8c5f 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/CheckOnrampAvailabilityUseCase.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/CheckOnrampAvailabilityUseCase.kt @@ -3,10 +3,11 @@ package com.tangem.domain.onramp import arrow.core.Either import com.tangem.domain.onramp.model.OnrampAvailability import com.tangem.domain.onramp.repositories.OnrampRepository +import com.tangem.domain.tokens.model.CryptoCurrency class CheckOnrampAvailabilityUseCase(private val repository: OnrampRepository) { - suspend operator fun invoke(): Either { + suspend operator fun invoke(cryptoCurrency: CryptoCurrency): Either { return Either.catch { repository.fetchPaymentMethodsIfAbsent() repository.getDefaultCountrySync()?.let { savedCountry -> @@ -15,6 +16,11 @@ class CheckOnrampAvailabilityUseCase(private val repository: OnrampRepository) { repository.saveDefaultCurrency(savedCountry.defaultCurrency) savedCountry.defaultCurrency } + repository.fetchPairs( + currency = currency, + country = savedCountry, + cryptoCurrency = cryptoCurrency, + ) OnrampAvailability.Available(country = savedCountry, currency = currency) } else { OnrampAvailability.NotSupported(savedCountry) diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/ClearOnrampCacheUseCase.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/ClearOnrampCacheUseCase.kt new file mode 100644 index 0000000000..42fd4f7930 --- /dev/null +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/ClearOnrampCacheUseCase.kt @@ -0,0 +1,10 @@ +package com.tangem.domain.onramp + +import com.tangem.domain.onramp.repositories.OnrampRepository + +class ClearOnrampCacheUseCase(private val repository: OnrampRepository) { + + suspend operator fun invoke() { + repository.clearCache() + } +} \ No newline at end of file diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt index 1c269c1a75..6bd6e7466b 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt @@ -2,8 +2,9 @@ package com.tangem.domain.onramp.repositories import com.tangem.domain.onramp.model.OnrampCountry import com.tangem.domain.onramp.model.OnrampCurrency -import com.tangem.domain.onramp.model.OnrampStatus import com.tangem.domain.onramp.model.OnrampPaymentMethod +import com.tangem.domain.onramp.model.OnrampStatus +import com.tangem.domain.tokens.model.CryptoCurrency import kotlinx.coroutines.flow.Flow interface OnrampRepository { @@ -13,6 +14,13 @@ interface OnrampRepository { suspend fun getCountryByIp(): OnrampCountry suspend fun getStatus(txId: String): OnrampStatus suspend fun fetchPaymentMethodsIfAbsent() + suspend fun fetchPairs(currency: OnrampCurrency, country: OnrampCountry, cryptoCurrency: CryptoCurrency) + suspend fun fetchQuotes( + currency: OnrampCurrency, + country: OnrampCountry, + cryptoCurrency: CryptoCurrency, + fromAmount: String, + ) // cache suspend fun saveDefaultCurrency(currency: OnrampCurrency) @@ -22,4 +30,5 @@ interface OnrampRepository { suspend fun getDefaultCountrySync(): OnrampCountry? fun getDefaultCountry(): Flow suspend fun getPaymentMethods(): List + suspend fun clearCache() } \ No newline at end of file diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt index 50834be67d..ad2d439de3 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt @@ -6,6 +6,7 @@ import com.tangem.core.decompose.model.Model import com.tangem.core.decompose.model.ParamsContainer import com.tangem.core.decompose.navigation.Router import com.tangem.domain.onramp.CheckOnrampAvailabilityUseCase +import com.tangem.domain.onramp.ClearOnrampCacheUseCase import com.tangem.domain.onramp.GetOnrampCurrencyUseCase import com.tangem.domain.onramp.model.OnrampAvailability import com.tangem.domain.onramp.model.OnrampCurrency @@ -27,6 +28,7 @@ internal class OnrampMainComponentModel @Inject constructor( private val router: Router, private val checkOnrampAvailabilityUseCase: CheckOnrampAvailabilityUseCase, private val getOnrampCurrencyUseCase: GetOnrampCurrencyUseCase, + private val clearOnrampCacheUseCase: ClearOnrampCacheUseCase, paramsContainer: ParamsContainer, ) : Model(), OnrampIntents { @@ -53,7 +55,7 @@ internal class OnrampMainComponentModel @Inject constructor( private fun checkResidenceCountry() { modelScope.launch { - checkOnrampAvailabilityUseCase.invoke() + checkOnrampAvailabilityUseCase.invoke(params.cryptoCurrency) .onRight(::handleOnrampAvailability) .onLeft { Timber.e(it) } } @@ -99,4 +101,9 @@ internal class OnrampMainComponentModel @Inject constructor( override fun openCurrenciesList() { bottomSheetNavigation.activate(OnrampMainBottomSheetConfig.CurrenciesList) } + + override fun onDestroy() { + modelScope.launch { clearOnrampCacheUseCase.invoke() } + super.onDestroy() + } } \ No newline at end of file