Updated on 2026-08-14
This commit is contained in:
parent
94af682f08
commit
a284c8d311
13 changed files with 236 additions and 29 deletions
|
|
@ -5,6 +5,7 @@ import com.tangem.data.onramp.converters.CountryConverter
|
|||
import com.tangem.data.onramp.converters.CurrencyConverter
|
||||
import com.tangem.data.onramp.converters.PaymentMethodConverter
|
||||
import com.tangem.data.onramp.converters.StatusConverter
|
||||
import com.tangem.data.onramp.converters.error.OnrampQuoteErrorInput
|
||||
import com.tangem.data.onramp.converters.error.OnrampQuotesErrorConverter
|
||||
import com.tangem.datasource.api.common.response.ApiResponseError
|
||||
import com.tangem.datasource.api.common.response.getOrThrow
|
||||
|
|
@ -192,18 +193,26 @@ internal class DefaultOnrampRepository(
|
|||
toDecimals = cryptoCurrency.decimals,
|
||||
providerId = provider.id,
|
||||
).bind()
|
||||
OnrampQuote.Content(
|
||||
OnrampQuote.Data(
|
||||
fromAmount = convertToBigDecimal(response.fromAmount),
|
||||
toAmount = convertToBigDecimal(response.toAmount),
|
||||
minFromAmount = convertToBigDecimal(response.minFromAmount),
|
||||
maxFromAmount = convertToBigDecimal(response.maxFromAmount),
|
||||
paymentMethodId = response.paymentMethod,
|
||||
providerId = response.providerId,
|
||||
paymentMethod = paymentMethod,
|
||||
provider = provider,
|
||||
)
|
||||
null
|
||||
},
|
||||
onError = { error ->
|
||||
if (error is ApiResponseError.HttpException) {
|
||||
quotesErrorConverter.convert(error.errorBody.orEmpty() to amount)
|
||||
quotesErrorConverter.convert(
|
||||
OnrampQuoteErrorInput(
|
||||
errorBody = error.errorBody.orEmpty(),
|
||||
amount = amount,
|
||||
paymentMethod = paymentMethod,
|
||||
provider = provider,
|
||||
),
|
||||
)
|
||||
} else {
|
||||
Timber.w(error, "Unable to fetch onramp quotes for ${provider.id}. $error")
|
||||
null
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
package com.tangem.data.onramp.converters.error
|
||||
|
||||
import com.tangem.domain.onramp.model.OnrampPaymentMethod
|
||||
import com.tangem.domain.onramp.model.OnrampProvider
|
||||
import com.tangem.domain.tokens.model.Amount
|
||||
|
||||
data class OnrampQuoteErrorInput(
|
||||
val errorBody: String,
|
||||
val amount: Amount,
|
||||
val paymentMethod: OnrampPaymentMethod,
|
||||
val provider: OnrampProvider,
|
||||
)
|
||||
|
|
@ -10,16 +10,15 @@ import com.tangem.utils.converter.Converter
|
|||
|
||||
internal class OnrampQuotesErrorConverter(
|
||||
private val jsonAdapter: JsonAdapter<ExpressErrorResponse>,
|
||||
) : Converter<Pair<String, Amount>, OnrampQuote.Error?> {
|
||||
) : Converter<OnrampQuoteErrorInput, OnrampQuote.Error?> {
|
||||
|
||||
@Suppress("MagicNumber")
|
||||
override fun convert(value: Pair<String, Amount>): OnrampQuote.Error? {
|
||||
val (errorResponse, amount) = value
|
||||
override fun convert(value: OnrampQuoteErrorInput): OnrampQuote.Error? {
|
||||
try {
|
||||
val error = jsonAdapter.fromJson(errorResponse)?.error ?: return null
|
||||
val error = jsonAdapter.fromJson(value.errorBody)?.error ?: return null
|
||||
return when (error.code) {
|
||||
2250 -> tryParseExchangeTooSmallAmountError(error = error, amount = amount)
|
||||
2251 -> tryParseExchangeTooBigAmountError(error = error, amount = amount)
|
||||
2250 -> tryParseExchangeTooSmallAmountError(error = error, input = value)
|
||||
2251 -> tryParseExchangeTooBigAmountError(error = error, input = value)
|
||||
else -> null
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
|
|
@ -29,34 +28,38 @@ internal class OnrampQuotesErrorConverter(
|
|||
|
||||
private fun tryParseExchangeTooSmallAmountError(
|
||||
error: ExpressError,
|
||||
amount: Amount,
|
||||
input: OnrampQuoteErrorInput,
|
||||
): OnrampQuote.Error.AmountTooSmallError? {
|
||||
val minAmount = error.value?.minAmount ?: return null
|
||||
val decimals = error.value?.decimals ?: return null
|
||||
|
||||
return OnrampQuote.Error.AmountTooSmallError(
|
||||
paymentMethod = input.paymentMethod,
|
||||
provider = input.provider,
|
||||
amount = createFromAmountWithOffset(
|
||||
amountWithOffset = minAmount,
|
||||
decimals = decimals,
|
||||
symbol = amount.currencySymbol,
|
||||
type = amount.type,
|
||||
symbol = input.amount.currencySymbol,
|
||||
type = input.amount.type,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun tryParseExchangeTooBigAmountError(
|
||||
error: ExpressError,
|
||||
amount: Amount,
|
||||
input: OnrampQuoteErrorInput,
|
||||
): OnrampQuote.Error.AmountTooBigError? {
|
||||
val maxAmount = error.value?.maxAmount ?: return null
|
||||
val decimals = error.value?.decimals ?: return null
|
||||
|
||||
return OnrampQuote.Error.AmountTooBigError(
|
||||
paymentMethod = input.paymentMethod,
|
||||
provider = input.provider,
|
||||
amount = createFromAmountWithOffset(
|
||||
amountWithOffset = maxAmount,
|
||||
decimals = decimals,
|
||||
symbol = amount.currencySymbol,
|
||||
type = amount.type,
|
||||
symbol = input.amount.currencySymbol,
|
||||
type = input.amount.type,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue