diff --git a/data/swap/src/main/java/com/tangem/data/swap/DefaultSwapRepositoryV2.kt b/data/swap/src/main/java/com/tangem/data/swap/DefaultSwapRepositoryV2.kt index e2d1ac8603..82aa29d68a 100644 --- a/data/swap/src/main/java/com/tangem/data/swap/DefaultSwapRepositoryV2.kt +++ b/data/swap/src/main/java/com/tangem/data/swap/DefaultSwapRepositoryV2.kt @@ -66,6 +66,7 @@ internal class DefaultSwapRepositoryV2 @Inject constructor( initialCurrency: CryptoCurrency, cryptoCurrencyStatusList: List, filterProviderTypes: List, + swapTxType: SwapTxType, ): List = withContext(coroutineDispatcher.default) { val cryptoCurrencyList = cryptoCurrencyStatusList.map { it.currency } @@ -73,6 +74,7 @@ internal class DefaultSwapRepositoryV2 @Inject constructor( userWallet = userWallet, initialCurrency = initialCurrency, cryptoCurrencyList = cryptoCurrencyList, + swapTxType = swapTxType, ) val providers = expressRepository.getProviders( @@ -114,11 +116,13 @@ internal class DefaultSwapRepositoryV2 @Inject constructor( initialCurrency: CryptoCurrency, cryptoCurrencyList: List, filterProviderTypes: List, + swapTxType: SwapTxType, ): List = withContext(coroutineDispatcher.default) { val allPairs = getPairsInternal( userWallet = userWallet, initialCurrency = initialCurrency, cryptoCurrencyList = cryptoCurrencyList, + swapTxType = swapTxType, ) val providers = expressRepository.getProviders( @@ -308,24 +312,34 @@ internal class DefaultSwapRepositoryV2 @Inject constructor( userWallet: UserWallet, initialCurrency: CryptoCurrency, cryptoCurrencyList: List, - ) = awaitAll( - // original pairs - async { + swapTxType: SwapTxType, + ) = when (swapTxType) { + SwapTxType.Swap -> awaitAll( + // original pairs + async { + invokePairRequest( + userWallet = userWallet, + from = arrayListOf(initialCurrency), + to = cryptoCurrencyList, + ) + }, + // reversed pairs + async { + invokePairRequest( + userWallet = userWallet, + from = cryptoCurrencyList, + to = arrayListOf(initialCurrency), + ) + }, + ).flatten() + SwapTxType.SendWithSwap -> { invokePairRequest( userWallet = userWallet, from = arrayListOf(initialCurrency), to = cryptoCurrencyList, ) - }, - // reversed pairs - async { - invokePairRequest( - userWallet = userWallet, - from = cryptoCurrencyList, - to = arrayListOf(initialCurrency), - ) - }, - ).flatten() + } + } private suspend fun invokePairRequest( userWallet: UserWallet, diff --git a/domain/swap/src/main/java/com/tangem/domain/swap/SwapRepositoryV2.kt b/domain/swap/src/main/java/com/tangem/domain/swap/SwapRepositoryV2.kt index 6fa54f8771..b94e923f2f 100644 --- a/domain/swap/src/main/java/com/tangem/domain/swap/SwapRepositoryV2.kt +++ b/domain/swap/src/main/java/com/tangem/domain/swap/SwapRepositoryV2.kt @@ -6,10 +6,7 @@ import com.tangem.domain.express.models.ExpressRateType import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.models.currency.CryptoCurrencyStatus import com.tangem.domain.models.wallet.UserWallet -import com.tangem.domain.swap.models.SwapDataModel -import com.tangem.domain.swap.models.SwapPairModel -import com.tangem.domain.swap.models.SwapQuoteModel -import com.tangem.domain.swap.models.SwapStatusModel +import com.tangem.domain.swap.models.* import java.math.BigDecimal /** @@ -25,12 +22,14 @@ interface SwapRepositoryV2 { * @param initialCurrency currency being swapped (either to or from) * @param cryptoCurrencyStatusList list of currencies might be swapped * @param filterProviderTypes filters only specified provider types, if empty returns providers as is + * @param swapTxType swap tx type */ suspend fun getPairs( userWallet: UserWallet, initialCurrency: CryptoCurrency, cryptoCurrencyStatusList: List, filterProviderTypes: List, + swapTxType: SwapTxType, ): List /** @@ -43,6 +42,7 @@ interface SwapRepositoryV2 { initialCurrency: CryptoCurrency, cryptoCurrencyList: List, filterProviderTypes: List, + swapTxType: SwapTxType, ): List /** diff --git a/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapPairsUseCase.kt b/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapPairsUseCase.kt index 5dfe8cda5e..1284c416c3 100644 --- a/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapPairsUseCase.kt +++ b/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapPairsUseCase.kt @@ -11,6 +11,7 @@ import com.tangem.domain.swap.models.SwapCryptoCurrency import com.tangem.domain.swap.models.SwapCurrencies import com.tangem.domain.swap.models.SwapCurrenciesGroup import com.tangem.domain.swap.models.SwapPairModel +import com.tangem.domain.swap.models.SwapTxType /** * Get list of swap pairs @@ -31,12 +32,14 @@ class GetSwapPairsUseCase( initialCurrency: CryptoCurrency, cryptoCurrencyStatusList: List, filterProviderTypes: List, + swapTxType: SwapTxType, ) = Either.catch { val pairs = swapRepositoryV2.getPairs( userWallet = userWallet, initialCurrency = initialCurrency, cryptoCurrencyStatusList = cryptoCurrencyStatusList, filterProviderTypes = filterProviderTypes, + swapTxType = swapTxType, ) val fromGroup = pairs.groupPairs( diff --git a/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapSupportedPairsUseCase.kt b/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapSupportedPairsUseCase.kt index 5f923070f5..b470cc5a4a 100644 --- a/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapSupportedPairsUseCase.kt +++ b/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapSupportedPairsUseCase.kt @@ -11,6 +11,7 @@ import com.tangem.domain.swap.models.SwapCryptoCurrency import com.tangem.domain.swap.models.SwapCurrencies import com.tangem.domain.swap.models.SwapCurrenciesGroup import com.tangem.domain.swap.models.SwapPairModel +import com.tangem.domain.swap.models.SwapTxType /** * Returns pais @@ -25,12 +26,14 @@ class GetSwapSupportedPairsUseCase( initialCurrency: CryptoCurrency, cryptoCurrencyList: List, filterProviderTypes: List, + swapTxType: SwapTxType, ) = Either.catch { val pairs = swapRepositoryV2.getSupportedPairs( userWallet = userWallet, initialCurrency = initialCurrency, cryptoCurrencyList = cryptoCurrencyList, filterProviderTypes = filterProviderTypes, + swapTxType = swapTxType, ) val filteredOutInitial = cryptoCurrencyList.filterNot { it.id == initialCurrency.id } diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt index a765bcee71..45659420c7 100644 --- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt +++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt @@ -9,6 +9,7 @@ import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig import com.tangem.domain.managetokens.CreateCryptoCurrencyUseCase import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.swap.models.SwapCurrencies +import com.tangem.domain.swap.models.SwapTxType import com.tangem.domain.swap.usecase.GetSwapSupportedPairsUseCase import com.tangem.domain.wallets.usecase.GetUserWalletUseCase import com.tangem.features.managetokens.component.analytics.CommonManageTokensAnalyticEvents @@ -84,6 +85,7 @@ internal class SwapChooseTokenNetworkModel @Inject constructor( initialCurrency = params.initialCurrency, cryptoCurrencyList = cryptoCurrencyList + params.initialCurrency, filterProviderTypes = SEND_WITH_SWAP_PROVIDER_TYPES, + swapTxType = SwapTxType.SendWithSwap, ).getOrElse { Timber.e(it.toString()) uiState.update(