Sort.kt
package com.distasilucas.cryptobalancetracker.model
import com.distasilucas.cryptobalancetracker.model.response.insights.UserCryptoInsights
import java.math.BigDecimal
enum class SortBy(
private val userCryptoInsightsComparator: Comparator<UserCryptoInsights>
) {
PERCENTAGE(Comparator.comparing { it.percentage }),
CURRENT_PRICE(Comparator.comparing { BigDecimal(it.cryptoInfo.price?.usd) }),
CHANGE_PRICE_IN_24H(Comparator.comparing { it.cryptoInfo.priceChange?.changePercentageIn24h!! }),
CHANGE_PRICE_IN_7D(Comparator.comparing { it.cryptoInfo.priceChange?.changePercentageIn7d!! }),
CHANGE_PRICE_IN_30D(Comparator.comparing { it.cryptoInfo.priceChange?.changePercentageIn30d!! });
fun getUserCryptosInsightsComparator(sortType: SortType): Comparator<UserCryptoInsights> {
return if (sortType == SortType.ASC) userCryptoInsightsComparator else userCryptoInsightsComparator.reversed()
}
}
enum class SortType {
ASC,
DESC
}
data class SortParams(
val sortBy: SortBy,
val sortType: SortType
) {
fun cryptosInsightsResponseComparator(): Comparator<UserCryptoInsights> {
return sortBy.getUserCryptosInsightsComparator(sortType)
}
}