diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeQuoteResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeQuoteResponse.kt index de2368e418..e643811822 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeQuoteResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeQuoteResponse.kt @@ -6,13 +6,13 @@ import java.math.BigDecimal data class ExchangeQuoteResponse( @Json(name = "fromAmount") - val fromAmount: BigDecimal, + val fromAmount: String, @Json(name = "fromDecimals") val fromDecimals: Int, @Json(name = "toAmount") - val toAmount: BigDecimal, + val toAmount: String, @Json(name = "toDecimals") val toDecimals: Int, 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 8d9f1918ab..0f8e561982 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 @@ -20,16 +20,14 @@ import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.domain.wallets.models.UserWalletId import com.tangem.feature.swap.converters.* import com.tangem.feature.swap.domain.SwapRepository -import com.tangem.feature.swap.domain.models.SwapAmount +import com.tangem.feature.swap.domain.models.createFromAmountWithOffset import com.tangem.feature.swap.domain.models.data.AggregatedSwapDataModel import com.tangem.feature.swap.domain.models.domain.* import com.tangem.feature.swap.domain.models.mapErrors import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.async import kotlinx.coroutines.withContext -import retrofit2.http.Query import java.math.BigDecimal -import java.util.Locale import javax.inject.Inject import com.tangem.datasource.api.express.models.request.LeastTokenInfo as NetworkLeastTokenInfo @@ -147,15 +145,12 @@ internal class SwapRepositoryImpl @Inject constructor( toNetwork = toNetwork, fromAmount = fromAmount, providerId = providerId, - rateType = rateType.name.lowercase() + rateType = rateType.name.lowercase(), ).getOrThrow() AggregatedSwapDataModel( dataModel = QuoteModel( - SwapAmount( - value = response.toAmount, - decimals = response.toDecimals - ) - ) + toTokenAmount = createFromAmountWithOffset(response.toAmount, response.toDecimals), + ), ) } catch (ex: OneIncResponseException) { AggregatedSwapDataModel(null, mapErrors(ex.data.description)) @@ -280,7 +275,7 @@ internal class SwapRepositoryImpl @Inject constructor( toNetwork: String, fromAmount: String, providerId: Int, - rateType: RateType + rateType: RateType, ): ExchangeQuote { val response = tangemExpressApi.getExchangeQuote( fromContractAddress, @@ -289,7 +284,7 @@ internal class SwapRepositoryImpl @Inject constructor( toNetwork, fromAmount, providerId, - rateType.name.lowercase() + rateType.name.lowercase(), ).getOrThrow() return ExchangeQuote( 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 e1e48fc630..c205bec15e 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 @@ -33,5 +33,4 @@ class SwapPairInfoConverter : Converter { rateTypes = swapPairProvider.rateTypes.map { rateTypeConverter.convert(it) }, ) } - } \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt index 68e8846de4..88f790c9c3 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt @@ -300,14 +300,12 @@ internal class SwapInteractorImpl @Inject constructor( } else { loadQuoteData( networkId = networkId, - fromTokenAddress = fromTokenAddress, - toTokenAddress = toTokenAddress, amount = amount, fromToken = fromToken, toToken = toToken, isAllowedToSpend = isAllowedToSpend, isBalanceWithoutFeeEnough = isBalanceWithoutFeeEnough, - providers = providers + providers = providers, ) } } @@ -510,8 +508,6 @@ internal class SwapInteractorImpl @Inject constructor( @Suppress("LongParameterList") private suspend fun loadQuoteData( networkId: String, - fromTokenAddress: String, - toTokenAddress: String, amount: SwapAmount, fromToken: CryptoCurrency, toToken: CryptoCurrency, @@ -520,13 +516,13 @@ internal class SwapInteractorImpl @Inject constructor( isBalanceWithoutFeeEnough: Boolean, ): SwapState { repository.findBestQuote( - fromContractAddress = fromToken.getContractAddress(), + fromContractAddress = fromToken.getContractAddress(), fromNetwork = fromToken.network.backendId, toContractAddress = toToken.getContractAddress(), toNetwork = toToken.network.backendId, fromAmount = amount.toStringWithRightOffset(), providerId = providers[0].providerId, - rateType = RateType.FLOAT + rateType = RateType.FLOAT, // networkId = networkId, // fromTokenAddress = fromTokenAddress, @@ -653,7 +649,10 @@ internal class SwapInteractorImpl @Inject constructor( ): SwapState.QuotesLoadedState { val appCurrency = userWalletManager.getUserAppCurrency() val nativeToken = userWalletManager.getNativeTokenForNetwork(networkId) - val rates = repository.getRates(appCurrency.code, listOf(fromToken.id.value, toToken.id.value, nativeToken.id)) + val rates = repository.getRates( + appCurrency.code, + listOf(fromToken.network.backendId, toToken.network.backendId, nativeToken.id), + ) val fromTokenBalance = cache.getBalanceForToken(networkId, derivationPath, fromToken.symbol) val toTokenBalance = cache.getBalanceForToken(networkId, derivationPath, toToken.symbol) return SwapState.QuotesLoadedState( @@ -663,7 +662,7 @@ internal class SwapInteractorImpl @Inject constructor( tokenWalletBalance = fromTokenBalance?.let { amountFormatter.formatSwapAmountToUI(it, "") } ?: ZERO_BALANCE, tokenFiatBalance = fromTokenAmount.value.toFiatString( - rateValue = rates[fromToken.id.value]?.toBigDecimal() ?: BigDecimal.ZERO, + rateValue = rates[fromToken.network.backendId]?.toBigDecimal() ?: BigDecimal.ZERO, fiatCurrencyName = appCurrency.symbol, formatWithSpaces = true, ), @@ -899,7 +898,6 @@ internal class SwapInteractorImpl @Inject constructor( companion object { private const val DEFAULT_SLIPPAGE = 2 private const val ZERO_BALANCE = "0" - private const val DEFAULT_BLOCKCHAIN_INCH_ADDRESS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" @Suppress("UnusedPrivateMember") private const val INCREASE_FEE_TO_CHECK_ENOUGH_PERCENT = 1.0 // if need to increase fee when check isEnough 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 d09b227b41..4ba2f42f83 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 @@ -14,6 +14,7 @@ interface SwapRepository { suspend fun getExchangeableTokens(networkId: String): List + @Suppress("LongParameterList") suspend fun findBestQuote( fromContractAddress: String, fromNetwork: String, @@ -74,5 +75,5 @@ interface SwapRepository { fromAmount: String, providerId: Int, rateType: RateType, - ) : ExchangeQuote + ): 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 index d087b97955..41d7826e07 100644 --- 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 @@ -1,8 +1,6 @@ package com.tangem.feature.swap.domain.models.domain -import java.math.BigDecimal - data class ExchangeQuote( - val toAmount: BigDecimal, - val allowanceContract: String? + val toAmount: String, + val allowanceContract: String?, ) \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/ui/SwapState.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/ui/SwapState.kt index 14610d708f..b1e20ec216 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/ui/SwapState.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/ui/SwapState.kt @@ -9,7 +9,7 @@ import java.math.BigDecimal sealed interface SwapState { data class QuotesLoadedState( - //add map < Provider ID, Swap state data> + // add map < Provider ID, Swap state data> val fromTokenInfo: TokenSwapInfo, val toTokenInfo: TokenSwapInfo, val priceImpact: Float, 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 245b670cbe..fe3ff3c949 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 @@ -145,7 +145,7 @@ internal class SwapViewModel @Inject constructor( tokensDataState = state, ) - //updateTokensState(state) + // updateTokensState(state) val toToken = state.toGroup.available.first() startLoadingQuotes( @@ -204,7 +204,7 @@ internal class SwapViewModel @Inject constructor( fromToken = fromToken, toToken = toToken, amount = amount, - toProvidersList = toProvidersList + toProvidersList = toProvidersList, ), ) }