Updated on 2026-08-14
This commit is contained in:
parent
5c4f10f90e
commit
2cf60002a4
8 changed files with 61 additions and 11 deletions
|
|
@ -8,6 +8,7 @@ import com.tangem.datasource.api.stakekit.models.response.model.NetworkTypeDTO
|
|||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO.MetadataDTO.RewardClaimingDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO.MetadataDTO.RewardScheduleDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO.RewardTypeDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO.ValidatorDTO.ValidatorStatusDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.action.StakingActionStatusDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.action.StakingActionTypeDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.transaction.StakingTransactionStatusDTO
|
||||
|
|
@ -35,6 +36,7 @@ fun Moshi.Builder.addStakeKitEnumFallbackAdapters(): Moshi.Builder {
|
|||
StakingActionTypeDTO::class.java to StakingActionTypeDTO.UNKNOWN,
|
||||
StakingTransactionStatusDTO::class.java to StakingTransactionStatusDTO.UNKNOWN,
|
||||
StakingTransactionTypeDTO::class.java to StakingTransactionTypeDTO.UNKNOWN,
|
||||
ValidatorStatusDTO::class.java to ValidatorStatusDTO.UNKNOWN,
|
||||
)
|
||||
|
||||
return apply {
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ data class YieldDTO(
|
|||
@Json(name = "address")
|
||||
val address: String,
|
||||
@Json(name = "status")
|
||||
val status: String,
|
||||
val status: ValidatorStatusDTO,
|
||||
@Json(name = "name")
|
||||
val name: String,
|
||||
@Json(name = "image")
|
||||
|
|
@ -84,7 +84,24 @@ data class YieldDTO(
|
|||
val votingPower: Double?,
|
||||
@Json(name = "preferred")
|
||||
val preferred: Boolean,
|
||||
)
|
||||
) {
|
||||
@JsonClass(generateAdapter = true)
|
||||
enum class ValidatorStatusDTO {
|
||||
@Json(name = "active")
|
||||
ACTIVE,
|
||||
|
||||
@Json(name = "deactivating")
|
||||
DEACTIVATING,
|
||||
|
||||
@Json(name = "inactive")
|
||||
INACTIVE,
|
||||
|
||||
@Json(name = "jailed")
|
||||
JAILED,
|
||||
|
||||
UNKNOWN,
|
||||
}
|
||||
}
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class MetadataDTO(
|
||||
|
|
|
|||
|
|
@ -30,14 +30,18 @@ dependencies {
|
|||
implementation(projects.features.staking.api)
|
||||
|
||||
// region DI
|
||||
|
||||
implementation(deps.hilt.android)
|
||||
kapt(deps.hilt.kapt)
|
||||
|
||||
// endregion
|
||||
|
||||
// region Others dependencies
|
||||
|
||||
implementation(deps.androidx.datastore)
|
||||
implementation(deps.jodatime)
|
||||
implementation(deps.kotlin.coroutines)
|
||||
implementation(deps.kotlin.immutable.collections)
|
||||
implementation(deps.moshi)
|
||||
implementation(deps.moshi.kotlin)
|
||||
|
||||
|
|
|
|||
|
|
@ -3,10 +3,13 @@ package com.tangem.data.staking.converters
|
|||
import com.tangem.datasource.api.stakekit.models.response.model.AddressArgumentDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO.MetadataDTO.RewardScheduleDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO.ValidatorDTO.ValidatorStatusDTO
|
||||
import com.tangem.domain.staking.model.stakekit.AddressArgument
|
||||
import com.tangem.domain.staking.model.stakekit.Yield
|
||||
import com.tangem.domain.staking.model.stakekit.Yield.Metadata.RewardSchedule
|
||||
import com.tangem.domain.staking.model.stakekit.Yield.Validator.ValidatorStatus
|
||||
import com.tangem.utils.converter.Converter
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
|
||||
class YieldConverter(
|
||||
private val tokenConverter: TokenConverter,
|
||||
|
|
@ -24,9 +27,11 @@ class YieldConverter(
|
|||
rewardType = convertRewardType(value.rewardType),
|
||||
metadata = convertMetadata(value.metadata),
|
||||
validators = value.validators
|
||||
.filter { it.preferred }
|
||||
.asSequence()
|
||||
.filter { it.preferred && it.status == ValidatorStatusDTO.ACTIVE }
|
||||
.sortedByDescending { it.apr }
|
||||
.map { convertValidator(it) }
|
||||
.sortedByDescending { it.apr },
|
||||
.toImmutableList(),
|
||||
isAvailable = value.isAvailable,
|
||||
)
|
||||
}
|
||||
|
|
@ -109,7 +114,7 @@ class YieldConverter(
|
|||
private fun convertValidator(validatorDTO: YieldDTO.ValidatorDTO): Yield.Validator {
|
||||
return Yield.Validator(
|
||||
address = validatorDTO.address,
|
||||
status = validatorDTO.status,
|
||||
status = convertValidatorStatus(validatorDTO.status),
|
||||
name = validatorDTO.name,
|
||||
image = validatorDTO.image,
|
||||
website = validatorDTO.website,
|
||||
|
|
@ -129,6 +134,16 @@ class YieldConverter(
|
|||
}
|
||||
}
|
||||
|
||||
private fun convertValidatorStatus(validatorStatusDTO: ValidatorStatusDTO): ValidatorStatus {
|
||||
return when (validatorStatusDTO) {
|
||||
ValidatorStatusDTO.ACTIVE -> ValidatorStatus.ACTIVE
|
||||
ValidatorStatusDTO.DEACTIVATING -> ValidatorStatus.DEACTIVATING
|
||||
ValidatorStatusDTO.INACTIVE -> ValidatorStatus.INACTIVE
|
||||
ValidatorStatusDTO.JAILED -> ValidatorStatus.JAILED
|
||||
else -> ValidatorStatus.UNKNOWN
|
||||
}
|
||||
}
|
||||
|
||||
private fun convertRewardSchedule(rewardTypeDTO: RewardScheduleDTO): RewardSchedule {
|
||||
return when (rewardTypeDTO) {
|
||||
RewardScheduleDTO.BLOCK -> RewardSchedule.BLOCK
|
||||
|
|
|
|||
|
|
@ -32,5 +32,6 @@ dependencies {
|
|||
implementation(deps.hilt.android)
|
||||
kapt(deps.hilt.kapt)
|
||||
|
||||
/** Other */
|
||||
implementation(deps.timber)
|
||||
}
|
||||
|
|
@ -53,7 +53,7 @@ data class Yield(
|
|||
@Serializable
|
||||
data class Validator(
|
||||
val address: String,
|
||||
val status: String,
|
||||
val status: ValidatorStatus,
|
||||
val name: String,
|
||||
val image: String? = null,
|
||||
val website: String? = null,
|
||||
|
|
@ -62,7 +62,16 @@ data class Yield(
|
|||
val stakedBalance: String? = null,
|
||||
val votingPower: Double? = null,
|
||||
val preferred: Boolean,
|
||||
)
|
||||
) {
|
||||
|
||||
enum class ValidatorStatus {
|
||||
ACTIVE,
|
||||
DEACTIVATING,
|
||||
INACTIVE,
|
||||
JAILED,
|
||||
UNKNOWN,
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class Metadata(
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import com.tangem.core.ui.extensions.stringReference
|
|||
import com.tangem.core.ui.extensions.wrappedList
|
||||
import com.tangem.domain.appcurrency.model.AppCurrency
|
||||
import com.tangem.domain.staking.model.stakekit.Yield
|
||||
import com.tangem.domain.staking.model.stakekit.Yield.Validator.ValidatorStatus
|
||||
import com.tangem.features.staking.impl.R
|
||||
import com.tangem.features.staking.impl.presentation.state.*
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
|
|
@ -18,7 +19,7 @@ internal object ConfirmationStatePreviewData {
|
|||
private val validatorList = listOf(
|
||||
Yield.Validator(
|
||||
address = "0xa6e768fef2d1af36c0cfdb276422e7881a83e951",
|
||||
status = "active",
|
||||
status = ValidatorStatus.ACTIVE,
|
||||
name = "Luganodes",
|
||||
image = "https://assets.stakek.it/validators/luganodes.png",
|
||||
apr = BigDecimal("0.054823398040640445"),
|
||||
|
|
@ -30,7 +31,7 @@ internal object ConfirmationStatePreviewData {
|
|||
),
|
||||
Yield.Validator(
|
||||
address = "0x35b1ca0f398905cf752e6fe122b51c88022fca32",
|
||||
status = "active",
|
||||
status = ValidatorStatus.ACTIVE,
|
||||
name = "InfStones",
|
||||
image = "https://assets.stakek.it/validators/infstones.png",
|
||||
apr = BigDecimal("0.057786472172836965"),
|
||||
|
|
@ -42,7 +43,7 @@ internal object ConfirmationStatePreviewData {
|
|||
),
|
||||
Yield.Validator(
|
||||
address = "0xd14a87025109013b0a2354a775cb335f926af65a",
|
||||
status = "active",
|
||||
status = ValidatorStatus.ACTIVE,
|
||||
name = "Kiln",
|
||||
image = "https://assets.stakek.it/validators/kiln.png",
|
||||
apr = BigDecimal("0.057786472172836965"),
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.tangem.core.ui.extensions.stringReference
|
|||
import com.tangem.domain.staking.model.stakekit.BalanceType
|
||||
import com.tangem.domain.staking.model.stakekit.RewardBlockType
|
||||
import com.tangem.domain.staking.model.stakekit.Yield
|
||||
import com.tangem.domain.staking.model.stakekit.Yield.Validator.ValidatorStatus
|
||||
import com.tangem.features.staking.impl.R
|
||||
import com.tangem.features.staking.impl.presentation.state.*
|
||||
import com.tangem.features.staking.impl.presentation.state.StakingStates
|
||||
|
|
@ -77,7 +78,7 @@ internal object InitialStakingStatePreview {
|
|||
rawCurrencyId = null,
|
||||
validator = Yield.Validator(
|
||||
address = "address",
|
||||
status = "status",
|
||||
status = ValidatorStatus.ACTIVE,
|
||||
name = "Binance",
|
||||
image = null,
|
||||
website = null,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue