From b5961302a9202f0b5b76ec3e981b373383f5814d Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 17 Nov 2023 17:19:49 +0200 Subject: [PATCH] Updated on 2026-08-14 --- .../tangem/feature/swap/SwapRepositoryImpl.kt | 26 +++++++++++++++++++ .../swap/converters/RateTypeConverter.kt | 22 ++++++++++++++++ .../swap/converters/SwapPairInfoConverter.kt | 12 +++------ .../feature/swap/domain/SwapRepository.kt | 10 +++++++ .../domain/models/domain/ExchangeQuote.kt | 8 ++++++ .../feature/swap/viewmodels/SwapViewModel.kt | 11 ++++---- 6 files changed, 75 insertions(+), 14 deletions(-) create mode 100644 features/swap/data/src/main/java/com/tangem/feature/swap/converters/RateTypeConverter.kt create mode 100644 features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeQuote.kt diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt index ce4a54b96e..9eb5bedf15 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt @@ -46,6 +46,7 @@ internal class SwapRepositoryImpl @Inject constructor( private val swapConverter = SwapConverter() private val leastTokenInfoConverter = LeastTokenInfoConverter() private val swapPairInfoConverter = SwapPairInfoConverter() + private val rateTypeConverter = RateTypeConverter() override suspend fun getPairs( initialCurrency: LeastTokenInfo, @@ -257,6 +258,31 @@ internal class SwapRepositoryImpl @Inject constructor( return oneInchApiFactory.getApi(networkId) } + override suspend fun getExchangeQuote( + fromContractAddress: String, + fromNetwork: String, + toContractAddress: String, + toNetwork: String, + fromAmount: BigDecimal, + providerId: Int, + rateType: RateType + ): ExchangeQuote { + val response = tangemExpressApi.getExchangeQuote( + fromContractAddress, + fromNetwork, + toContractAddress, + toNetwork, + fromAmount, + providerId, + rateTypeConverter.convertBack(rateType) + ).getOrThrow() + + return ExchangeQuote( + toAmount = response.toAmount, + allowanceContract = response.allowanceContract + ) + } + companion object { // TODO("get this ids from blockchain enum later") private const val OPTIMISM_ID = "optimistic-ethereum" diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/RateTypeConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/RateTypeConverter.kt new file mode 100644 index 0000000000..0d25c4eca2 --- /dev/null +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/RateTypeConverter.kt @@ -0,0 +1,22 @@ +package com.tangem.feature.swap.converters + +import com.tangem.datasource.api.express.models.response.RateType +import com.tangem.utils.converter.TwoWayConverter +import com.tangem.feature.swap.domain.models.domain.RateType as RateTypeDomain + +class RateTypeConverter : TwoWayConverter { + + override fun convert(value: RateType): RateTypeDomain { + return when (value) { + RateType.FIXED -> RateTypeDomain.FIXED + RateType.FLOAT -> RateTypeDomain.FLOAT + } + } + + override fun convertBack(value: RateTypeDomain): RateType { + return when (value) { + RateTypeDomain.FIXED -> RateType.FIXED + RateTypeDomain.FLOAT -> RateType.FLOAT + } + } +} \ No newline at end of file diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt index 9889f7d698..e1e48fc630 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt @@ -1,16 +1,16 @@ package com.tangem.feature.swap.converters -import com.tangem.datasource.api.express.models.response.RateType import com.tangem.datasource.api.express.models.response.SwapPair import com.tangem.datasource.api.express.models.response.SwapPairProvider import com.tangem.feature.swap.domain.models.domain.LeastTokenInfo import com.tangem.feature.swap.domain.models.domain.SwapPairLeast as SwapPairDomain import com.tangem.feature.swap.domain.models.domain.SwapProvider as SwapPairProviderDomain -import com.tangem.feature.swap.domain.models.domain.RateType as RateTypeDomain import com.tangem.utils.converter.Converter class SwapPairInfoConverter : Converter { + private val rateTypeConverter = RateTypeConverter() + override fun convert(value: SwapPair): SwapPairDomain { return SwapPairDomain( from = LeastTokenInfo( @@ -30,14 +30,8 @@ class SwapPairInfoConverter : Converter { private fun convertProvider(swapPairProvider: SwapPairProvider): SwapPairProviderDomain { return SwapPairProviderDomain( providerId = swapPairProvider.providerId, - rateTypes = swapPairProvider.rateTypes.map { convertRateType(it) }, + rateTypes = swapPairProvider.rateTypes.map { rateTypeConverter.convert(it) }, ) } - private fun convertRateType(rateType: RateType): RateTypeDomain { - return when (rateType) { - RateType.FIXED -> RateTypeDomain.FIXED - RateType.FLOAT -> RateTypeDomain.FLOAT - } - } } \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt index ab0e4095c8..8942e75161 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt @@ -61,4 +61,14 @@ interface SwapRepository { currency: CryptoCurrency, amount: BigDecimal?, ): String + + suspend fun getExchangeQuote( + fromContractAddress: String, + fromNetwork: String, + toContractAddress: String, + toNetwork: String, + fromAmount: BigDecimal, + providerId: Int, + rateType: RateType, + ) : ExchangeQuote } \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeQuote.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeQuote.kt new file mode 100644 index 0000000000..d087b97955 --- /dev/null +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeQuote.kt @@ -0,0 +1,8 @@ +package com.tangem.feature.swap.domain.models.domain + +import java.math.BigDecimal + +data class ExchangeQuote( + val toAmount: BigDecimal, + val allowanceContract: String? +) \ No newline at end of file diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt index 1513b59892..7ba34b693d 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt @@ -143,13 +143,14 @@ internal class SwapViewModel @Inject constructor( fromCryptoCurrency = state.initialCryptoCurrency, toCryptoCurrency = state.toGroup.available.first().currencyStatus.currency ) + cryptoCurrency = state.initialCryptoCurrency // updateTokensState(dataState = state.foundTokensState) - // startLoadingQuotes( - // fromToken = state.preselectTokens.fromToken, - // toToken = state.preselectTokens.toToken, - // amount = lastAmount.value, - // ) + startLoadingQuotes( + fromToken = state.initialCryptoCurrency, + toToken = state.toGroup.available.first().currencyStatus.currency, + amount = lastAmount.value, + ) }.onFailure { Timber.tag(loggingTag).e(it) }