Updated on 2026-08-14

This commit is contained in:
Tangem 2025-12-18 15:41:05 +05:00
parent 9127624b78
commit a6598eccc8
16 changed files with 156 additions and 149 deletions

View file

@ -1,36 +0,0 @@
package com.tangem.domain.staking.usecase
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchainsdk.utils.toCoinId
import com.tangem.domain.staking.model.stakekit.Yield
import com.tangem.domain.staking.repositories.StakeKitRepository
import com.tangem.domain.staking.toggles.StakingFeatureToggles
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
/**
* Emits a map of Validators values per currency for staking.
*
* Return map:
* - key: currency staking key (network.backendId + "_" + symbol)
* - value: validators
*/
class StakingApyFlowUseCase(
private val stakeKitRepository: StakeKitRepository,
private val stakingFeatureToggles: StakingFeatureToggles,
) {
operator fun invoke(): Flow<Map<String, List<Yield.Validator>>> {
return stakeKitRepository.getEnabledYields()
.map { yields ->
yields.filterNot { yield ->
val isCardanoYield = yield.token.coinGeckoId == Blockchain.Cardano.toCoinId()
isCardanoYield && !stakingFeatureToggles.isCardanoStakingEnabled
}.associate { yield ->
val key = "${yield.token.coinGeckoId}_${yield.token.symbol}"
val apy = yield.validators
key to apy
}
}
}
}

View file

@ -0,0 +1,37 @@
package com.tangem.domain.staking.usecase
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.staking.model.StakingAvailability
import com.tangem.domain.staking.repositories.StakingRepository
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.coroutineScope
/**
* Returns staking availability for a list of crypto currencies for a specific user wallet
*
* Return map:
* - key: crypto currency
* - value: staking availability for the currency
*/
class StakingAvailabilityListUseCase(
private val stakingRepository: StakingRepository,
) {
suspend fun invokeSync(
userWalletId: UserWalletId,
cryptoCurrencyList: List<CryptoCurrency>,
): Map<CryptoCurrency, StakingAvailability> {
return coroutineScope {
cryptoCurrencyList.map { cryptoCurrency ->
async {
cryptoCurrency to stakingRepository.getStakingAvailabilitySync(
userWalletId = userWalletId,
cryptoCurrency = cryptoCurrency,
)
}
}.awaitAll().toMap()
}
}
}