diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt index 4f3a819ef0..4d18c1bfe9 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt @@ -97,31 +97,35 @@ internal class DefaultCurrenciesRepository( } } - override suspend fun addCurrencies(userWalletId: UserWalletId, currencies: List) { - withContext(dispatchers.io) { - val savedCurrencies = requireNotNull( - value = getSavedUserTokensResponseSync(key = userWalletId), - lazyMessage = { "Saved tokens empty. Can not perform add currencies action" }, - ) + override suspend fun addCurrencies( + userWalletId: UserWalletId, + currencies: List, + ): List = withContext(dispatchers.io) { + val savedCurrencies = requireNotNull( + value = getSavedUserTokensResponseSync(key = userWalletId), + lazyMessage = { "Saved tokens empty. Can not perform add currencies action" }, + ) - val currenciesToAdd = populateCurrenciesWithMissedCoins( - currencies = currencies, - ).let { - filterAlreadyAddedCurrencies(savedCurrencies.tokens, it) - } - val updatedResponse = savedCurrencies.copy( - tokens = savedCurrencies.tokens + currenciesToAdd.map(userTokensResponseFactory::createResponseToken), - ) - userTokensSaver.storeAndPush( - userWalletId = userWalletId, - response = updatedResponse, - ) + val currenciesToAdd = filterAlreadyAddedCurrencies( + savedCurrencies = savedCurrencies.tokens, + currenciesToAdd = populateCurrenciesWithMissedCoins(currencies = currencies), + ) - fetchExpressAssetsByNetworkIds( - userWallet = userWalletsStore.getSyncStrict(key = userWalletId), - userTokens = updatedResponse, - ) - } + val updatedResponse = savedCurrencies.copy( + tokens = savedCurrencies.tokens + currenciesToAdd.map(userTokensResponseFactory::createResponseToken), + ) + + userTokensSaver.storeAndPush( + userWalletId = userWalletId, + response = updatedResponse, + ) + + fetchExpressAssetsByNetworkIds( + userWallet = userWalletsStore.getSyncStrict(key = userWalletId), + userTokens = updatedResponse, + ) + + currenciesToAdd } private fun filterAlreadyAddedCurrencies( @@ -573,7 +577,7 @@ internal class DefaultCurrenciesRepository( override fun isNetworkFeeZero(userWalletId: UserWalletId, network: Network): Boolean { val blockchain = Blockchain.fromNetworkId(network.backendId) - return blockchain?.isNetworkFeeZero() ?: false + return blockchain?.isNetworkFeeZero() == true } override suspend fun syncTokens(userWalletId: UserWalletId) { 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 96a60f0cc0..dd0ad48ebc 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 @@ -41,16 +41,15 @@ class SaveMarketTokensUseCase( removedNetworks: Set, ): Either = Either.catch { if (removedNetworks.isNotEmpty()) { - currenciesRepository.removeCurrencies( - userWalletId = userWalletId, - currencies = removedNetworks.mapNotNull { - marketsTokenRepository.createCryptoCurrency( - userWalletId = userWalletId, - token = tokenMarketParams, - network = it, - ) - }, - ) + val removedCurrencies = removedNetworks.mapNotNull { + marketsTokenRepository.createCryptoCurrency( + userWalletId = userWalletId, + token = tokenMarketParams, + network = it, + ) + } + + currenciesRepository.removeCurrencies(userWalletId = userWalletId, currencies = removedCurrencies) } if (addedNetworks.isNotEmpty()) { @@ -67,13 +66,16 @@ class SaveMarketTokensUseCase( ) } - currenciesRepository.addCurrencies(userWalletId = userWalletId, currencies = addedCurrencies) + val savedCurrencies = currenciesRepository.addCurrencies( + userWalletId = userWalletId, + currencies = addedCurrencies, + ) - refreshUpdatedNetworks(userWalletId, addedCurrencies) + refreshUpdatedNetworks(userWalletId, savedCurrencies) - refreshUpdatedYieldBalances(userWalletId, addedCurrencies) + refreshUpdatedYieldBalances(userWalletId, savedCurrencies) - refreshUpdatedQuotes(addedCurrencies) + refreshUpdatedQuotes(savedCurrencies) } } diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/CurrenciesRepository.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/CurrenciesRepository.kt index 63bb8891bd..d58a0257f9 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/CurrenciesRepository.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/CurrenciesRepository.kt @@ -50,7 +50,7 @@ interface CurrenciesRepository { * @throws DataError.UserWalletError.WrongUserWallet If single-currency user wallet * ID provided. */ - suspend fun addCurrencies(userWalletId: UserWalletId, currencies: List) + suspend fun addCurrencies(userWalletId: UserWalletId, currencies: List): List /** * Removes currency from a specific user wallet. diff --git a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/repository/MockCurrenciesRepository.kt b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/repository/MockCurrenciesRepository.kt index 475ea789ec..01c6a656e5 100644 --- a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/repository/MockCurrenciesRepository.kt +++ b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/repository/MockCurrenciesRepository.kt @@ -48,7 +48,10 @@ internal class MockCurrenciesRepository( override suspend fun saveNewCurrenciesList(userWalletId: UserWalletId, currencies: List) = Unit - override suspend fun addCurrencies(userWalletId: UserWalletId, currencies: List) = Unit + override suspend fun addCurrencies( + userWalletId: UserWalletId, + currencies: List, + ): List = emptyList() override suspend fun removeCurrency(userWalletId: UserWalletId, currency: CryptoCurrency) { removeCurrencyResult.onLeft { throw it }