diff --git a/app/src/main/java/com/tangem/tap/di/domain/ManageTokensDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/ManageTokensDomainModule.kt index 07f1c7e97f..b55ef9a8f7 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/ManageTokensDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/ManageTokensDomainModule.kt @@ -6,6 +6,7 @@ import com.tangem.domain.managetokens.repository.CustomTokensRepository import com.tangem.domain.managetokens.repository.ManageTokensRepository import com.tangem.domain.networks.multi.MultiNetworkStatusFetcher import com.tangem.domain.quotes.multi.MultiQuoteFetcher +import com.tangem.domain.staking.multi.MultiYieldBalanceFetcher import com.tangem.domain.staking.repositories.StakingRepository import com.tangem.domain.tokens.TokensFeatureToggles import com.tangem.domain.tokens.repository.CurrenciesRepository @@ -75,6 +76,7 @@ internal object ManageTokensDomainModule { quotesRepository: QuotesRepository, multiNetworkStatusFetcher: MultiNetworkStatusFetcher, multiQuoteFetcher: MultiQuoteFetcher, + multiYieldBalanceFetcher: MultiYieldBalanceFetcher, tokensFeatureToggles: TokensFeatureToggles, ): SaveManagedTokensUseCase { return SaveManagedTokensUseCase( @@ -87,6 +89,7 @@ internal object ManageTokensDomainModule { quotesRepository = quotesRepository, multiNetworkStatusFetcher = multiNetworkStatusFetcher, multiQuoteFetcher = multiQuoteFetcher, + multiYieldBalanceFetcher = multiYieldBalanceFetcher, tokensFeatureToggles = tokensFeatureToggles, ) } diff --git a/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt index b6efd9bd4f..7666729a36 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt @@ -7,6 +7,7 @@ import com.tangem.domain.markets.repositories.MarketsTokenRepository import com.tangem.domain.networks.multi.MultiNetworkStatusFetcher import com.tangem.domain.quotes.multi.MultiQuoteFetcher import com.tangem.domain.quotes.single.SingleQuoteSupplier +import com.tangem.domain.staking.multi.MultiYieldBalanceFetcher import com.tangem.domain.staking.repositories.StakingRepository import com.tangem.domain.tokens.TokensFeatureToggles import com.tangem.domain.tokens.repository.CurrenciesRepository @@ -74,6 +75,7 @@ object MarketsDomainModule { quotesRepository: QuotesRepository, multiNetworkStatusFetcher: MultiNetworkStatusFetcher, multiQuoteFetcher: MultiQuoteFetcher, + multiYieldBalanceFetcher: MultiYieldBalanceFetcher, tokensFeatureToggles: TokensFeatureToggles, ): SaveMarketTokensUseCase { return SaveMarketTokensUseCase( @@ -85,6 +87,7 @@ object MarketsDomainModule { quotesRepository = quotesRepository, multiNetworkStatusFetcher = multiNetworkStatusFetcher, multiQuoteFetcher = multiQuoteFetcher, + multiYieldBalanceFetcher = multiYieldBalanceFetcher, tokensFeatureToggles = tokensFeatureToggles, ) } diff --git a/app/src/main/java/com/tangem/tap/di/domain/StakingDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/StakingDomainModule.kt index cb6976b9b8..22f61dc1f1 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/StakingDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/StakingDomainModule.kt @@ -1,7 +1,11 @@ package com.tangem.tap.di.domain import com.tangem.domain.staking.* -import com.tangem.domain.staking.repositories.* +import com.tangem.domain.staking.repositories.StakingActionRepository +import com.tangem.domain.staking.repositories.StakingErrorResolver +import com.tangem.domain.staking.repositories.StakingRepository +import com.tangem.domain.staking.repositories.StakingTransactionHashRepository +import com.tangem.domain.staking.single.SingleYieldBalanceFetcher import com.tangem.domain.walletmanager.WalletManagersFacade import dagger.Module import dagger.Provides @@ -92,10 +96,12 @@ internal object StakingDomainModule { fun provideFetchStakingYieldBalanceUseCase( stakingRepository: StakingRepository, stakingErrorResolver: StakingErrorResolver, + singleYieldBalanceFetcher: SingleYieldBalanceFetcher, ): FetchStakingYieldBalanceUseCase { return FetchStakingYieldBalanceUseCase( stakingRepository = stakingRepository, stakingErrorResolver = stakingErrorResolver, + singleYieldBalanceFetcher = singleYieldBalanceFetcher, ) } diff --git a/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt index 075ab6d9f7..ff23a2c9e2 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt @@ -10,7 +10,9 @@ import com.tangem.domain.promo.PromoRepository import com.tangem.domain.quotes.QuotesRepositoryV2 import com.tangem.domain.quotes.multi.MultiQuoteFetcher import com.tangem.domain.quotes.single.SingleQuoteSupplier +import com.tangem.domain.staking.multi.MultiYieldBalanceFetcher import com.tangem.domain.staking.repositories.StakingRepository +import com.tangem.domain.staking.single.SingleYieldBalanceFetcher import com.tangem.domain.staking.single.SingleYieldBalanceSupplier import com.tangem.domain.tokens.* import com.tangem.domain.tokens.operations.BaseCurrenciesStatusesOperations @@ -40,6 +42,7 @@ internal object TokensDomainModule { quotesRepository: QuotesRepository, multiNetworkStatusFetcher: MultiNetworkStatusFetcher, multiQuoteFetcher: MultiQuoteFetcher, + singleYieldBalanceFetcher: SingleYieldBalanceFetcher, tokensFeatureToggles: TokensFeatureToggles, ): AddCryptoCurrenciesUseCase { return AddCryptoCurrenciesUseCase( @@ -49,6 +52,7 @@ internal object TokensDomainModule { quotesRepository = quotesRepository, multiNetworkStatusFetcher = multiNetworkStatusFetcher, multiQuoteFetcher = multiQuoteFetcher, + singleYieldBalanceFetcher = singleYieldBalanceFetcher, tokensFeatureToggles = tokensFeatureToggles, ) } @@ -62,6 +66,7 @@ internal object TokensDomainModule { stakingRepository: StakingRepository, multiNetworkStatusFetcher: MultiNetworkStatusFetcher, multiQuoteFetcher: MultiQuoteFetcher, + multiYieldBalanceFetcher: MultiYieldBalanceFetcher, tokensFeatureToggles: TokensFeatureToggles, ): FetchTokenListUseCase { return FetchTokenListUseCase( @@ -71,6 +76,7 @@ internal object TokensDomainModule { stakingRepository = stakingRepository, multiNetworkStatusFetcher = multiNetworkStatusFetcher, multiQuoteFetcher = multiQuoteFetcher, + multiYieldBalanceFetcher = multiYieldBalanceFetcher, tokensFeatureToggles = tokensFeatureToggles, ) } @@ -177,6 +183,7 @@ internal object TokensDomainModule { stakingRepository: StakingRepository, singleNetworkStatusFetcher: SingleNetworkStatusFetcher, multiQuoteFetcher: MultiQuoteFetcher, + singleYieldBalanceFetcher: SingleYieldBalanceFetcher, tokensFeatureToggles: TokensFeatureToggles, ): FetchCurrencyStatusUseCase { return FetchCurrencyStatusUseCase( @@ -186,6 +193,7 @@ internal object TokensDomainModule { stakingRepository = stakingRepository, singleNetworkStatusFetcher = singleNetworkStatusFetcher, multiQuoteFetcher = multiQuoteFetcher, + singleYieldBalanceFetcher = singleYieldBalanceFetcher, tokensFeatureToggles = tokensFeatureToggles, ) } @@ -199,6 +207,7 @@ internal object TokensDomainModule { stakingRepository: StakingRepository, multiNetworkStatusFetcher: MultiNetworkStatusFetcher, multiQuoteFetcher: MultiQuoteFetcher, + multiYieldBalanceFetcher: MultiYieldBalanceFetcher, tokensFeatureToggles: TokensFeatureToggles, ): FetchCardTokenListUseCase { return FetchCardTokenListUseCase( @@ -208,6 +217,7 @@ internal object TokensDomainModule { stakingRepository = stakingRepository, multiNetworkStatusFetcher = multiNetworkStatusFetcher, multiQuoteFetcher = multiQuoteFetcher, + multiYieldBalanceFetcher = multiYieldBalanceFetcher, tokensFeatureToggles = tokensFeatureToggles, ) } @@ -411,6 +421,7 @@ internal object TokensDomainModule { multiQuoteFetcher: MultiQuoteFetcher, singleQuoteSupplier: SingleQuoteSupplier, singleYieldBalanceSupplier: SingleYieldBalanceSupplier, + multiYieldBalanceFetcher: MultiYieldBalanceFetcher, ): BaseCurrenciesStatusesOperations { return CachedCurrenciesStatusesOperations( currenciesRepository = currenciesRepository, @@ -424,6 +435,7 @@ internal object TokensDomainModule { multiQuoteFetcher = multiQuoteFetcher, singleQuoteSupplier = singleQuoteSupplier, singleYieldBalanceSupplier = singleYieldBalanceSupplier, + multiYieldBalanceFetcher = multiYieldBalanceFetcher, tokensFeatureToggles = tokensFeatureToggles, ) } @@ -443,6 +455,7 @@ internal object TokensDomainModule { multiQuoteFetcher: MultiQuoteFetcher, singleQuoteSupplier: SingleQuoteSupplier, singleYieldBalanceSupplier: SingleYieldBalanceSupplier, + multiYieldBalanceFetcher: MultiYieldBalanceFetcher, ): BaseCurrencyStatusOperations { return CachedCurrenciesStatusesOperations( currenciesRepository = currenciesRepository, @@ -456,6 +469,7 @@ internal object TokensDomainModule { multiQuoteFetcher = multiQuoteFetcher, singleQuoteSupplier = singleQuoteSupplier, singleYieldBalanceSupplier = singleYieldBalanceSupplier, + multiYieldBalanceFetcher = multiYieldBalanceFetcher, tokensFeatureToggles = tokensFeatureToggles, ) } diff --git a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json index 109fa60297..aa583d661b 100644 --- a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json +++ b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json @@ -73,6 +73,6 @@ }, { "name": "STAKING_LOADING_REFACTORING_ENABLED", - "version": "undefined" + "version": "5.25.0" } ] diff --git a/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/SaveManagedTokensUseCase.kt b/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/SaveManagedTokensUseCase.kt index 8379c39929..ba16d9ceb5 100644 --- a/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/SaveManagedTokensUseCase.kt +++ b/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/SaveManagedTokensUseCase.kt @@ -7,6 +7,8 @@ import com.tangem.domain.managetokens.model.ManagedCryptoCurrency import com.tangem.domain.managetokens.repository.CustomTokensRepository import com.tangem.domain.networks.multi.MultiNetworkStatusFetcher import com.tangem.domain.quotes.multi.MultiQuoteFetcher +import com.tangem.domain.staking.fetcher.YieldBalanceFetcherParams +import com.tangem.domain.staking.multi.MultiYieldBalanceFetcher import com.tangem.domain.staking.repositories.StakingRepository import com.tangem.domain.tokens.TokensFeatureToggles import com.tangem.domain.tokens.model.CryptoCurrency @@ -28,6 +30,7 @@ class SaveManagedTokensUseCase( private val quotesRepository: QuotesRepository, private val multiNetworkStatusFetcher: MultiNetworkStatusFetcher, private val multiQuoteFetcher: MultiQuoteFetcher, + private val multiYieldBalanceFetcher: MultiYieldBalanceFetcher, private val tokensFeatureToggles: TokensFeatureToggles, ) { @@ -118,11 +121,20 @@ class SaveManagedTokensUseCase( userWalletId: UserWalletId, existingCurrencies: List, ) { - stakingRepository.fetchMultiYieldBalance( - userWalletId = userWalletId, - cryptoCurrencies = existingCurrencies, - refresh = true, - ) + if (tokensFeatureToggles.isStakingLoadingRefactoringEnabled) { + multiYieldBalanceFetcher( + params = YieldBalanceFetcherParams.Multi( + userWalletId = userWalletId, + currencyIdWithNetworkMap = existingCurrencies.associateTo(hashMapOf()) { it.id to it.network }, + ), + ) + } else { + stakingRepository.fetchMultiYieldBalance( + userWalletId = userWalletId, + cryptoCurrencies = existingCurrencies, + refresh = true, + ) + } } private suspend fun refreshUpdatedQuotes(addedCurrencies: List) { diff --git a/domain/markets/src/main/java/com/tangem/domain/markets/SaveMarketTokensUseCase.kt b/domain/markets/src/main/java/com/tangem/domain/markets/SaveMarketTokensUseCase.kt index 06b6a81591..1d0215f044 100644 --- a/domain/markets/src/main/java/com/tangem/domain/markets/SaveMarketTokensUseCase.kt +++ b/domain/markets/src/main/java/com/tangem/domain/markets/SaveMarketTokensUseCase.kt @@ -5,6 +5,8 @@ import com.tangem.domain.card.repository.DerivationsRepository import com.tangem.domain.markets.repositories.MarketsTokenRepository import com.tangem.domain.networks.multi.MultiNetworkStatusFetcher import com.tangem.domain.quotes.multi.MultiQuoteFetcher +import com.tangem.domain.staking.fetcher.YieldBalanceFetcherParams +import com.tangem.domain.staking.multi.MultiYieldBalanceFetcher import com.tangem.domain.staking.repositories.StakingRepository import com.tangem.domain.tokens.TokensFeatureToggles import com.tangem.domain.tokens.model.CryptoCurrency @@ -33,6 +35,7 @@ class SaveMarketTokensUseCase( private val quotesRepository: QuotesRepository, private val multiNetworkStatusFetcher: MultiNetworkStatusFetcher, private val multiQuoteFetcher: MultiQuoteFetcher, + private val multiYieldBalanceFetcher: MultiYieldBalanceFetcher, private val tokensFeatureToggles: TokensFeatureToggles, ) { @@ -100,11 +103,20 @@ class SaveMarketTokensUseCase( userWalletId: UserWalletId, existingCurrencies: List, ) { - stakingRepository.fetchMultiYieldBalance( - userWalletId = userWalletId, - cryptoCurrencies = existingCurrencies, - refresh = true, - ) + if (tokensFeatureToggles.isStakingLoadingRefactoringEnabled) { + multiYieldBalanceFetcher( + params = YieldBalanceFetcherParams.Multi( + userWalletId = userWalletId, + currencyIdWithNetworkMap = existingCurrencies.associateTo(hashMapOf()) { it.id to it.network }, + ), + ) + } else { + stakingRepository.fetchMultiYieldBalance( + userWalletId = userWalletId, + cryptoCurrencies = existingCurrencies, + refresh = true, + ) + } } private suspend fun refreshUpdatedQuotes(addedCurrencies: List) { diff --git a/domain/staking/src/main/java/com/tangem/domain/staking/FetchStakingYieldBalanceUseCase.kt b/domain/staking/src/main/java/com/tangem/domain/staking/FetchStakingYieldBalanceUseCase.kt index e09a9309c7..88800654a2 100644 --- a/domain/staking/src/main/java/com/tangem/domain/staking/FetchStakingYieldBalanceUseCase.kt +++ b/domain/staking/src/main/java/com/tangem/domain/staking/FetchStakingYieldBalanceUseCase.kt @@ -3,30 +3,44 @@ package com.tangem.domain.staking import arrow.core.Either import arrow.core.raise.catch import arrow.core.raise.either +import com.tangem.domain.staking.fetcher.YieldBalanceFetcherParams import com.tangem.domain.staking.model.stakekit.StakingError import com.tangem.domain.staking.repositories.StakingErrorResolver import com.tangem.domain.staking.repositories.StakingRepository +import com.tangem.domain.staking.single.SingleYieldBalanceFetcher import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.domain.wallets.models.UserWalletId class FetchStakingYieldBalanceUseCase( private val stakingRepository: StakingRepository, private val stakingErrorResolver: StakingErrorResolver, + private val singleYieldBalanceFetcher: SingleYieldBalanceFetcher, ) { suspend operator fun invoke( userWalletId: UserWalletId, cryptoCurrency: CryptoCurrency, + isRefactoringEnabled: Boolean, refresh: Boolean = false, ): Either { return either { catch( block = { - stakingRepository.fetchSingleYieldBalance( - userWalletId = userWalletId, - cryptoCurrency = cryptoCurrency, - refresh = refresh, - ) + if (isRefactoringEnabled) { + singleYieldBalanceFetcher( + params = YieldBalanceFetcherParams.Single( + userWalletId = userWalletId, + currencyId = cryptoCurrency.id, + network = cryptoCurrency.network, + ), + ) + } else { + stakingRepository.fetchSingleYieldBalance( + userWalletId = userWalletId, + cryptoCurrency = cryptoCurrency, + refresh = refresh, + ) + } }, catch = { stakingErrorResolver.resolve(it) }, ) diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/AddCryptoCurrenciesUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/AddCryptoCurrenciesUseCase.kt index e2354e1813..ca0fecd294 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/AddCryptoCurrenciesUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/AddCryptoCurrenciesUseCase.kt @@ -6,7 +6,9 @@ import arrow.core.raise.catch import arrow.core.raise.either import com.tangem.domain.networks.multi.MultiNetworkStatusFetcher import com.tangem.domain.quotes.multi.MultiQuoteFetcher +import com.tangem.domain.staking.fetcher.YieldBalanceFetcherParams import com.tangem.domain.staking.repositories.StakingRepository +import com.tangem.domain.staking.single.SingleYieldBalanceFetcher import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.domain.tokens.model.Network import com.tangem.domain.tokens.repository.CurrenciesRepository @@ -32,6 +34,7 @@ class AddCryptoCurrenciesUseCase( private val quotesRepository: QuotesRepository, private val multiNetworkStatusFetcher: MultiNetworkStatusFetcher, private val multiQuoteFetcher: MultiQuoteFetcher, + private val singleYieldBalanceFetcher: SingleYieldBalanceFetcher, private val tokensFeatureToggles: TokensFeatureToggles, ) { @@ -159,11 +162,21 @@ class AddCryptoCurrenciesUseCase( } private suspend fun refreshUpdatedYieldBalances(userWalletId: UserWalletId, addedCurrency: CryptoCurrency) { - stakingRepository.fetchSingleYieldBalance( - userWalletId = userWalletId, - cryptoCurrency = addedCurrency, - refresh = true, - ) + if (tokensFeatureToggles.isStakingLoadingRefactoringEnabled) { + singleYieldBalanceFetcher( + params = YieldBalanceFetcherParams.Single( + userWalletId = userWalletId, + currencyId = addedCurrency.id, + network = addedCurrency.network, + ), + ) + } else { + stakingRepository.fetchSingleYieldBalance( + userWalletId = userWalletId, + cryptoCurrency = addedCurrency, + refresh = true, + ) + } } private suspend fun refreshUpdatedQuotes(currencyToAdd: CryptoCurrency) { diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCardTokenListUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCardTokenListUseCase.kt index 20e19dfaf0..7d56e24a4b 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCardTokenListUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCardTokenListUseCase.kt @@ -6,6 +6,8 @@ import arrow.core.raise.catch import arrow.core.raise.either import com.tangem.domain.networks.multi.MultiNetworkStatusFetcher import com.tangem.domain.quotes.multi.MultiQuoteFetcher +import com.tangem.domain.staking.fetcher.YieldBalanceFetcherParams +import com.tangem.domain.staking.multi.MultiYieldBalanceFetcher import com.tangem.domain.staking.repositories.StakingRepository import com.tangem.domain.tokens.error.TokenListError import com.tangem.domain.tokens.model.CryptoCurrency @@ -26,6 +28,7 @@ class FetchCardTokenListUseCase( private val stakingRepository: StakingRepository, private val multiNetworkStatusFetcher: MultiNetworkStatusFetcher, private val multiQuoteFetcher: MultiQuoteFetcher, + private val multiYieldBalanceFetcher: MultiYieldBalanceFetcher, private val tokensFeatureToggles: TokensFeatureToggles, ) { @@ -110,9 +113,18 @@ class FetchCardTokenListUseCase( currencies: List, refresh: Boolean, ) { - catch( - block = { stakingRepository.fetchMultiYieldBalance(userWalletId, currencies, refresh) }, - catch = { /* Ignore error */ }, - ) + if (tokensFeatureToggles.isStakingLoadingRefactoringEnabled) { + multiYieldBalanceFetcher( + params = YieldBalanceFetcherParams.Multi( + userWalletId = userWalletId, + currencyIdWithNetworkMap = currencies.associateTo(hashMapOf()) { it.id to it.network }, + ), + ) + } else { + catch( + block = { stakingRepository.fetchMultiYieldBalance(userWalletId, currencies, refresh) }, + catch = { /* Ignore error */ }, + ) + } } } \ No newline at end of file diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCurrencyStatusUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCurrencyStatusUseCase.kt index a38ae046d5..e9775c5d32 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCurrencyStatusUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCurrencyStatusUseCase.kt @@ -6,7 +6,9 @@ import arrow.core.raise.catch import arrow.core.raise.either import com.tangem.domain.networks.single.SingleNetworkStatusFetcher import com.tangem.domain.quotes.multi.MultiQuoteFetcher +import com.tangem.domain.staking.fetcher.YieldBalanceFetcherParams import com.tangem.domain.staking.repositories.StakingRepository +import com.tangem.domain.staking.single.SingleYieldBalanceFetcher import com.tangem.domain.tokens.error.CurrencyStatusError import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.domain.tokens.model.Network @@ -36,6 +38,7 @@ class FetchCurrencyStatusUseCase( private val stakingRepository: StakingRepository, private val singleNetworkStatusFetcher: SingleNetworkStatusFetcher, private val multiQuoteFetcher: MultiQuoteFetcher, + private val singleYieldBalanceFetcher: SingleYieldBalanceFetcher, private val tokensFeatureToggles: TokensFeatureToggles, ) { @@ -158,10 +161,20 @@ class FetchCurrencyStatusUseCase( cryptoCurrency: CryptoCurrency, refresh: Boolean, ) { - catch( - block = { stakingRepository.fetchSingleYieldBalance(userWalletId, cryptoCurrency, refresh) }, - ) { - raise(CurrencyStatusError.DataError(it)) + if (tokensFeatureToggles.isStakingLoadingRefactoringEnabled) { + singleYieldBalanceFetcher( + params = YieldBalanceFetcherParams.Single( + userWalletId = userWalletId, + currencyId = cryptoCurrency.id, + network = cryptoCurrency.network, + ), + ) + } else { + catch( + block = { stakingRepository.fetchSingleYieldBalance(userWalletId, cryptoCurrency, refresh) }, + ) { + raise(CurrencyStatusError.DataError(it)) + } } } } \ No newline at end of file diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchTokenListUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchTokenListUseCase.kt index 4602529c72..e0300eb83a 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchTokenListUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchTokenListUseCase.kt @@ -8,6 +8,8 @@ import arrow.core.raise.ensureNotNull import arrow.core.toNonEmptyListOrNull import com.tangem.domain.networks.multi.MultiNetworkStatusFetcher import com.tangem.domain.quotes.multi.MultiQuoteFetcher +import com.tangem.domain.staking.fetcher.YieldBalanceFetcherParams +import com.tangem.domain.staking.multi.MultiYieldBalanceFetcher import com.tangem.domain.staking.repositories.StakingRepository import com.tangem.domain.tokens.error.TokenListError import com.tangem.domain.tokens.model.CryptoCurrency @@ -38,6 +40,7 @@ class FetchTokenListUseCase( private val stakingRepository: StakingRepository, private val multiNetworkStatusFetcher: MultiNetworkStatusFetcher, private val multiQuoteFetcher: MultiQuoteFetcher, + private val multiYieldBalanceFetcher: MultiYieldBalanceFetcher, private val tokensFeatureToggles: TokensFeatureToggles, ) { @@ -152,10 +155,19 @@ class FetchTokenListUseCase( currencies: List, refresh: Boolean, ) { - catch( - block = { stakingRepository.fetchMultiYieldBalance(userWalletId, currencies, refresh) }, - catch = { /* Ignore error */ }, - ) + if (tokensFeatureToggles.isStakingLoadingRefactoringEnabled) { + multiYieldBalanceFetcher( + params = YieldBalanceFetcherParams.Multi( + userWalletId = userWalletId, + currencyIdWithNetworkMap = currencies.associateTo(hashMapOf()) { it.id to it.network }, + ), + ) + } else { + catch( + block = { stakingRepository.fetchMultiYieldBalance(userWalletId, currencies, refresh) }, + catch = { /* Ignore error */ }, + ) + } } /** diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CachedCurrenciesStatusesOperations.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CachedCurrenciesStatusesOperations.kt index c222b79fec..8814392d0a 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CachedCurrenciesStatusesOperations.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CachedCurrenciesStatusesOperations.kt @@ -18,8 +18,10 @@ import com.tangem.domain.quotes.QuotesRepositoryV2 import com.tangem.domain.quotes.multi.MultiQuoteFetcher import com.tangem.domain.quotes.single.SingleQuoteProducer import com.tangem.domain.quotes.single.SingleQuoteSupplier +import com.tangem.domain.staking.fetcher.YieldBalanceFetcherParams import com.tangem.domain.staking.model.stakekit.YieldBalance import com.tangem.domain.staking.model.stakekit.YieldBalanceList +import com.tangem.domain.staking.multi.MultiYieldBalanceFetcher import com.tangem.domain.staking.repositories.StakingRepository import com.tangem.domain.staking.single.SingleYieldBalanceProducer import com.tangem.domain.staking.single.SingleYieldBalanceSupplier @@ -49,6 +51,7 @@ class CachedCurrenciesStatusesOperations( private val multiQuoteFetcher: MultiQuoteFetcher, private val singleQuoteSupplier: SingleQuoteSupplier, private val singleYieldBalanceSupplier: SingleYieldBalanceSupplier, + private val multiYieldBalanceFetcher: MultiYieldBalanceFetcher, private val tokensFeatureToggles: TokensFeatureToggles, ) : BaseCurrenciesStatusesOperations, BaseCurrencyStatusOperations( @@ -200,7 +203,18 @@ class CachedCurrenciesStatusesOperations( quotesRepository.fetchQuotes(rawCurrenciesIds) } }, - async { stakingRepository.fetchMultiYieldBalance(userWalletId, currencies) }, + async { + if (tokensFeatureToggles.isStakingLoadingRefactoringEnabled) { + multiYieldBalanceFetcher( + params = YieldBalanceFetcherParams.Multi( + userWalletId = userWalletId, + currencyIdWithNetworkMap = currencies.associateTo(hashMapOf()) { it.id to it.network }, + ), + ) + } else { + stakingRepository.fetchMultiYieldBalance(userWalletId, currencies) + } + }, ) } .map { } diff --git a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/GetPrimaryCurrencyStatusUpdatesUseCaseTest.kt b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/GetPrimaryCurrencyStatusUpdatesUseCaseTest.kt index e084456c8c..be180baa2f 100644 --- a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/GetPrimaryCurrencyStatusUpdatesUseCaseTest.kt +++ b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/GetPrimaryCurrencyStatusUpdatesUseCaseTest.kt @@ -190,6 +190,7 @@ internal class GetPrimaryCurrencyStatusUpdatesUseCaseTest { singleQuoteSupplier = mockk(), quotesRepositoryV2 = mockk(), singleYieldBalanceSupplier = mockk(), + multiYieldBalanceFetcher = mockk(), ), dispatchers = dispatchers, ) diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingBalanceUpdater.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingBalanceUpdater.kt index d86e6cc5f3..02db8ad802 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingBalanceUpdater.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingBalanceUpdater.kt @@ -5,6 +5,7 @@ import com.tangem.domain.staking.FetchStakingYieldBalanceUseCase import com.tangem.domain.staking.model.stakekit.Yield import com.tangem.domain.staking.model.stakekit.action.StakingActionStatus import com.tangem.domain.tokens.FetchPendingTransactionsUseCase +import com.tangem.domain.tokens.TokensFeatureToggles import com.tangem.domain.tokens.UpdateDelayedNetworkStatusUseCase import com.tangem.domain.tokens.model.CryptoCurrencyStatus import com.tangem.domain.txhistory.usecase.GetTxHistoryItemsCountUseCase @@ -28,6 +29,7 @@ internal class StakingBalanceUpdater @AssistedInject constructor( private val fetchActionsUseCase: FetchActionsUseCase, private val txHistoryFeatureToggles: TxHistoryFeatureToggles, private val txHistoryContentUpdateEmitter: TxHistoryContentUpdateEmitter, + private val tokensFeatureToggles: TokensFeatureToggles, @DelayedWork private val coroutineScope: CoroutineScope, @Assisted private val userWallet: UserWallet, @Assisted private val cryptoCurrencyStatus: CryptoCurrencyStatus, @@ -89,6 +91,7 @@ internal class StakingBalanceUpdater @AssistedInject constructor( stakingYieldBalanceUseCase( userWalletId = userWallet.walletId, cryptoCurrency = cryptoCurrencyStatus.currency, + isRefactoringEnabled = tokensFeatureToggles.isStakingLoadingRefactoringEnabled, refresh = true, ) }