diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampAllOffersUseCase.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampAllOffersUseCase.kt index 970018eeee..e832d25600 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampAllOffersUseCase.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampAllOffersUseCase.kt @@ -150,7 +150,16 @@ class GetOnrampAllOffersUseCase( } private fun sortOffers(methodOffers: List): List { - return methodOffers.sortedByDescending { offer -> + val (availableOffers, unavailableOffers) = methodOffers.partition { it.quote is OnrampQuote.Data } + + val sortedAvailableOffers = sortAvailableOffers(availableOffers) + val sortedUnavailableOffers = sortUnavailableOffers(unavailableOffers) + + return sortedAvailableOffers + sortedUnavailableOffers + } + + private fun sortAvailableOffers(availableOffers: List): List { + return availableOffers.sortedByDescending { offer -> when (val quote = offer.quote) { is OnrampQuote.Data -> quote.toAmount.value else -> BigDecimal.ZERO @@ -158,6 +167,27 @@ class GetOnrampAllOffersUseCase( } } + private fun sortUnavailableOffers(unavailableOffers: List): List { + if (unavailableOffers.isEmpty()) return emptyList() + + val (amountErrorOffers, otherOffers) = unavailableOffers.partition { it.quote is OnrampQuote.AmountError } + if (amountErrorOffers.isEmpty()) return otherOffers + + val (tooSmallOffers, tooBigOffers) = amountErrorOffers.partition { offer -> + val error = (offer.quote as OnrampQuote.AmountError).error + error is OnrampError.AmountError.TooSmallError + } + + val sortedTooSmallOffers = tooSmallOffers.sortedBy { offer -> + (offer.quote as OnrampQuote.AmountError).error.requiredAmount + } + val sortedTooBigOffers = tooBigOffers.sortedByDescending { offer -> + (offer.quote as OnrampQuote.AmountError).error.requiredAmount + } + + return sortedTooSmallOffers + sortedTooBigOffers + otherOffers + } + private fun countUniqueProviders(methodOffers: List): Int { return methodOffers.map { it.quote.provider.id }.distinct().size } diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampOffersUseCase.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampOffersUseCase.kt index ac0f2d94b7..3b2c99cf27 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampOffersUseCase.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampOffersUseCase.kt @@ -173,7 +173,7 @@ class GetOnrampOffersUseCase( rateDif = if (bestRateOffer != null) recentOffer.rateDif else null, ), ), - hasMoreOffers = false, + hasMoreOffers = hasMoreOffers, ), ) }