diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/StatusCodeInterceptor.kt b/core/datasource/src/main/java/com/tangem/datasource/di/StatusCodeInterceptor.kt index 7a6362efe3..4da4c8b17d 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/StatusCodeInterceptor.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/StatusCodeInterceptor.kt @@ -36,13 +36,14 @@ class StatusCodeInterceptor : Interceptor { } private fun getBody(): String { - return "\"error\": {\n" + - " \"code\": 2290,\n" + - " \"description\": \"Core: receivedDecimals is not equal to expressDecimals\",\n" + + return "{\n" + + " \"error\": {\n" + + " \"code\": 2250,\n" + + " \"description\": \"Core: exchange too small amount\",\n" + " \"message\": \"Not valid\",\n" + - " \"receivedToDecimals\": 5,\n" + - " \"expressToDecimals\": 5\n" + - " }" + " \"minAmount\": 5\n" + + " }\n" + + "}" } companion object { diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt index 6ca55d7f04..fa28cf44f2 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt @@ -1,6 +1,7 @@ package com.tangem.feature.swap.converters import com.squareup.moshi.JsonAdapter +import com.tangem.datasource.api.express.models.response.ExpressError import com.tangem.datasource.api.express.models.response.ExpressErrorResponse import com.tangem.feature.swap.domain.models.DataError import com.tangem.feature.swap.domain.models.createFromAmountWithOffset @@ -21,28 +22,47 @@ internal class ErrorsDataConverter( 2220 -> DataError.ExchangeProviderNotActiveError(code = error.code) 2230 -> DataError.ExchangeProviderNotAvailableError(code = error.code) 2240 -> DataError.ExchangeNotPossibleError(code = error.code) - 2250 -> DataError.ExchangeTooSmallAmountError( - code = error.code, - amount = createFromAmountWithOffset( - requireNotNull(error.value?.minAmount), - requireNotNull(error.value?.decimals), - ), - ) - 2260 -> DataError.ExchangeNotEnoughAllowanceError( - code = error.code, - currentAllowance = requireNotNull(error.value?.currentAllowance), - ) + 2250 -> tryParseExchangeTooSmallAmountError(error = error) + 2260 -> tryParseExchangeNotEnoughAllowanceError(error = error) 2270 -> DataError.ExchangeNotEnoughBalanceError(code = error.code) 2280 -> DataError.ExchangeInvalidAddressError(code = error.code) - 2290 -> DataError.ExchangeInvalidFromDecimalsError( - code = error.code, - receivedFromDecimals = requireNotNull(error.value?.receivedFromDecimals), - expressFromDecimals = requireNotNull(error.value?.expressFromDecimals), - ) + 2290 -> tryParseExchangeInvalidFromDecimalsError(error = error) else -> DataError.UnknownErrorWithCode(error.code) } } catch (e: Exception) { return DataError.UnknownError } } + + private fun tryParseExchangeTooSmallAmountError(error: ExpressError): DataError { + val minAmount = error.value?.minAmount ?: return DataError.UnknownErrorWithCode(error.code) + val decimals = error.value?.decimals ?: return DataError.UnknownErrorWithCode(error.code) + + return DataError.ExchangeTooSmallAmountError( + code = error.code, + amount = createFromAmountWithOffset(minAmount, decimals), + ) + } + + private fun tryParseExchangeNotEnoughAllowanceError(error: ExpressError): DataError { + val currentAllowance = error.value?.currentAllowance ?: return DataError.UnknownErrorWithCode(error.code) + + return DataError.ExchangeNotEnoughAllowanceError( + code = error.code, + currentAllowance = currentAllowance, + ) + } + + private fun tryParseExchangeInvalidFromDecimalsError(error: ExpressError): DataError { + val receivedFromDecimals = error.value?.receivedFromDecimals ?: return DataError.UnknownErrorWithCode( + code = error.code, + ) + val expressFromDecimals = error.value?.expressFromDecimals ?: return DataError.UnknownErrorWithCode(error.code) + + return DataError.ExchangeInvalidFromDecimalsError( + code = error.code, + receivedFromDecimals = receivedFromDecimals, + expressFromDecimals = expressFromDecimals, + ) + } } \ No newline at end of file