Updated on 2026-08-14
This commit is contained in:
parent
6b92fc6179
commit
b5961302a9
6 changed files with 75 additions and 14 deletions
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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<RateType, RateTypeDomain> {
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<SwapPair, SwapPairDomain> {
|
||||
|
||||
private val rateTypeConverter = RateTypeConverter()
|
||||
|
||||
override fun convert(value: SwapPair): SwapPairDomain {
|
||||
return SwapPairDomain(
|
||||
from = LeastTokenInfo(
|
||||
|
|
@ -30,14 +30,8 @@ class SwapPairInfoConverter : Converter<SwapPair, SwapPairDomain> {
|
|||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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?
|
||||
)
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue