Updated on 2026-08-14
This commit is contained in:
parent
51c7e4e10b
commit
173ee13120
21 changed files with 155 additions and 44 deletions
|
|
@ -1,17 +1,24 @@
|
|||
package com.tangem.data.yield.supply
|
||||
|
||||
import com.tangem.blockchain.common.Blockchain
|
||||
import com.tangem.blockchainsdk.utils.fromNetworkId
|
||||
import com.tangem.blockchainsdk.utils.toNetworkId
|
||||
import com.tangem.datasource.api.common.response.getOrThrow
|
||||
import com.tangem.datasource.local.yieldsupply.YieldMarketsStore
|
||||
import com.tangem.data.yield.supply.converters.YieldMarketTokenConverter
|
||||
import com.tangem.datasource.api.tangemTech.YieldSupplyApi
|
||||
import com.tangem.data.yield.supply.converters.YieldTokenStatusConverter
|
||||
import com.tangem.data.yield.supply.converters.YieldTokenChartConverter
|
||||
import com.tangem.domain.models.currency.CryptoCurrency
|
||||
import com.tangem.domain.yield.supply.YieldSupplyMarketRepository
|
||||
import com.tangem.domain.yield.supply.models.YieldMarketToken
|
||||
import com.tangem.domain.yield.supply.models.YieldMarketTokenStatus
|
||||
import com.tangem.domain.yield.supply.models.YieldSupplyMarketChartData
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlin.collections.map
|
||||
|
||||
internal class DefaultYieldSupplyMarketRepository(
|
||||
private val yieldSupplyApi: YieldSupplyApi,
|
||||
|
|
@ -20,7 +27,7 @@ internal class DefaultYieldSupplyMarketRepository(
|
|||
) : YieldSupplyMarketRepository {
|
||||
|
||||
override suspend fun getCachedMarkets(): List<YieldMarketToken>? = withContext(dispatchers.io) {
|
||||
store.getSyncOrNull()
|
||||
store.getSyncOrNull()?.enrichNetworkIds()
|
||||
}
|
||||
|
||||
override suspend fun updateMarkets(): List<YieldMarketToken> = withContext(dispatchers.io) {
|
||||
|
|
@ -30,15 +37,28 @@ internal class DefaultYieldSupplyMarketRepository(
|
|||
domain
|
||||
}
|
||||
|
||||
override fun getMarketsFlow(): Flow<List<YieldMarketToken>> = store.get()
|
||||
override fun getMarketsFlow(): Flow<List<YieldMarketToken>> = store.get().map {
|
||||
it.enrichNetworkIds()
|
||||
}
|
||||
|
||||
override suspend fun getTokenStatus(contractAddress: String): YieldMarketToken {
|
||||
val response = yieldSupplyApi.getYieldTokenStatus(contractAddress).getOrThrow()
|
||||
override suspend fun getTokenStatus(cryptoCurrencyToken: CryptoCurrency.Token): YieldMarketTokenStatus {
|
||||
val chainId = Blockchain.fromNetworkId(cryptoCurrencyToken.network.backendId)?.getChainId()
|
||||
?: error("Chain id is required for evm's")
|
||||
val response = yieldSupplyApi.getYieldTokenStatus(chainId, cryptoCurrencyToken.contractAddress).getOrThrow()
|
||||
return YieldTokenStatusConverter.convert(response)
|
||||
}
|
||||
|
||||
override suspend fun getTokenChart(contractAddress: String): YieldSupplyMarketChartData {
|
||||
val response = yieldSupplyApi.getYieldTokenChart(contractAddress).getOrThrow()
|
||||
override suspend fun getTokenChart(cryptoCurrencyToken: CryptoCurrency.Token): YieldSupplyMarketChartData {
|
||||
val chainId = Blockchain.fromNetworkId(cryptoCurrencyToken.network.backendId)?.getChainId()
|
||||
?: error("Chain id is required for evm's")
|
||||
val response = yieldSupplyApi.getYieldTokenChart(chainId, cryptoCurrencyToken.contractAddress).getOrThrow()
|
||||
return YieldTokenChartConverter.convert(response)
|
||||
}
|
||||
|
||||
private fun List<YieldMarketToken>.enrichNetworkIds(): List<YieldMarketToken> {
|
||||
val chainIdMap = Blockchain.entries.associate { it.getChainId() to it.toNetworkId() }
|
||||
return this.map { token ->
|
||||
token.copy(backendId = chainIdMap[token.chainId])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -7,11 +7,10 @@ import com.tangem.utils.converter.Converter
|
|||
internal object YieldMarketTokenConverter : Converter<YieldMarketsResponse.MarketDto, YieldMarketToken> {
|
||||
override fun convert(value: YieldMarketsResponse.MarketDto): YieldMarketToken {
|
||||
return YieldMarketToken(
|
||||
tokenAddress = value.tokenAddress,
|
||||
tokenSymbol = value.tokenSymbol,
|
||||
tokenName = value.tokenName,
|
||||
tokenAddress = value.tokenAddress.orEmpty(),
|
||||
apy = value.apy,
|
||||
isActive = value.isActive,
|
||||
chainId = value.chainId ?: -1,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,17 +1,21 @@
|
|||
package com.tangem.data.yield.supply.converters
|
||||
|
||||
import com.tangem.datasource.api.tangemTech.models.YieldTokenStatusResponse
|
||||
import com.tangem.domain.yield.supply.models.YieldMarketToken
|
||||
import com.tangem.domain.models.serialization.SerializedBigDecimal
|
||||
import com.tangem.domain.yield.supply.models.YieldMarketTokenStatus
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
internal object YieldTokenStatusConverter : Converter<YieldTokenStatusResponse, YieldMarketToken> {
|
||||
override fun convert(value: YieldTokenStatusResponse): YieldMarketToken {
|
||||
return YieldMarketToken(
|
||||
tokenAddress = value.tokenAddress,
|
||||
tokenSymbol = value.tokenSymbol,
|
||||
tokenName = value.tokenName,
|
||||
apy = value.apy,
|
||||
isActive = value.isActive,
|
||||
internal object YieldTokenStatusConverter : Converter<YieldTokenStatusResponse, YieldMarketTokenStatus> {
|
||||
override fun convert(value: YieldTokenStatusResponse): YieldMarketTokenStatus {
|
||||
return YieldMarketTokenStatus(
|
||||
tokenAddress = value.tokenAddress.orEmpty(),
|
||||
tokenSymbol = value.tokenSymbol.orEmpty(),
|
||||
tokenName = value.tokenName.orEmpty(),
|
||||
apy = value.apy ?: SerializedBigDecimal.ZERO,
|
||||
isActive = value.isActive ?: false,
|
||||
chainId = value.chainId ?: -1,
|
||||
maxFeeUSD = value.maxFeeUSD.orEmpty(),
|
||||
maxFeeNative = value.maxFeeNative.orEmpty(),
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue