Updated on 2026-08-14

This commit is contained in:
Tangem 2025-09-25 18:27:06 +05:00
parent 434382eb33
commit b54b85858f
17 changed files with 291 additions and 0 deletions

View file

@ -25,6 +25,7 @@ dependencies {
/** Domain */
implementation(projects.domain.yieldSupply)
implementation(projects.domain.yieldSupply.models)
implementation(projects.domain.walletManager)
implementation(projects.domain.legacy)

View file

@ -0,0 +1,31 @@
package com.tangem.data.yield.supply
import com.tangem.datasource.api.common.response.getOrThrow
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.local.yieldsupply.YieldMarketsStore
import com.tangem.data.yield.supply.converters.YieldMarketTokenConverter
import com.tangem.domain.yield.supply.YieldSupplyMarketRepository
import com.tangem.domain.yield.supply.models.YieldMarketToken
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.withContext
internal class DefaultYieldSupplyMarketRepository(
private val techApi: TangemTechApi,
private val store: YieldMarketsStore,
private val dispatchers: CoroutineDispatcherProvider,
) : YieldSupplyMarketRepository {
override suspend fun getCachedMarkets(): List<YieldMarketToken>? = withContext(dispatchers.io) {
store.getSyncOrNull()
}
override suspend fun updateMarkets(): List<YieldMarketToken> = withContext(dispatchers.io) {
val response = techApi.getYieldMarkets().getOrThrow()
val domain = response.marketDtos.map(YieldMarketTokenConverter::convert)
store.store(domain)
domain
}
override fun getMarketsFlow(): Flow<List<YieldMarketToken>> = store.get()
}

View file

@ -0,0 +1,24 @@
package com.tangem.data.yield.supply.converters
import com.tangem.datasource.api.tangemTech.models.YieldMarketsResponse
import com.tangem.domain.yield.supply.models.YieldMarketToken
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,
apy = value.apy,
totalSupplied = value.totalSupplied,
totalBorrowed = value.totalBorrowed,
liquidityRate = value.liquidityRate,
borrowRate = value.borrowRate,
utilizationRate = value.utilizationRate,
isActive = value.isActive,
ltv = value.ltv,
liquidationThreshold = value.liquidationThreshold,
)
}
}

View file

@ -1,7 +1,11 @@
package com.tangem.data.yield.supply.di
import com.tangem.data.yield.supply.DefaultYieldSupplyMarketRepository
import com.tangem.data.yield.supply.DefaultYieldSupplyTransactionRepository
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.local.yieldsupply.YieldMarketsStore
import com.tangem.domain.walletmanager.WalletManagersFacade
import com.tangem.domain.yield.supply.YieldSupplyMarketRepository
import com.tangem.domain.yield.supply.YieldSupplyTransactionRepository
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.Module
@ -25,4 +29,18 @@ internal object YieldSupplyDataModule {
dispatchers = dispatchers,
)
}
@Provides
@Singleton
fun provideYieldSupplyMarketRepository(
techApi: TangemTechApi,
store: YieldMarketsStore,
dispatchers: CoroutineDispatcherProvider,
): YieldSupplyMarketRepository {
return DefaultYieldSupplyMarketRepository(
techApi = techApi,
store = store,
dispatchers = dispatchers,
)
}
}