Updated on 2026-08-14

This commit is contained in:
Tangem 2026-02-05 15:13:10 +01:00
parent 52e7b5e58c
commit 27921d8c3a
23 changed files with 674 additions and 497 deletions

View file

@ -1,6 +1,5 @@
package com.tangem.data.earn.datastore
import arrow.core.Either
import com.tangem.datasource.local.datastore.RuntimeStateStore
import com.tangem.domain.models.earn.EarnNetworks
import javax.inject.Inject
@ -8,6 +7,6 @@ import javax.inject.Singleton
@Singleton
class EarnNetworksStore @Inject constructor() :
RuntimeStateStore<EarnNetworks> by RuntimeStateStore(
defaultValue = Either.Right(emptyList()),
RuntimeStateStore<EarnNetworks?> by RuntimeStateStore(
defaultValue = null,
)

View file

@ -1,6 +1,5 @@
package com.tangem.data.earn.datastore
import arrow.core.Either
import com.tangem.datasource.local.datastore.RuntimeStateStore
import com.tangem.domain.models.earn.EarnTopToken
import javax.inject.Inject
@ -8,6 +7,6 @@ import javax.inject.Singleton
@Singleton
class EarnTopTokensStore @Inject constructor() :
RuntimeStateStore<EarnTopToken> by RuntimeStateStore(
defaultValue = Either.Right(emptyList()),
RuntimeStateStore<EarnTopToken?> by RuntimeStateStore(
defaultValue = null,
)

View file

@ -1,11 +1,11 @@
package com.tangem.data.earn.di
import com.tangem.data.common.currency.CryptoCurrencyFactory
import com.tangem.blockchainsdk.utils.ExcludedBlockchains
import com.tangem.data.earn.DefaultEarnErrorResolver
import com.tangem.data.earn.repository.DefaultEarnRepository
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.data.earn.datastore.EarnNetworksStore
import com.tangem.data.earn.datastore.EarnTopTokensStore
import com.tangem.data.earn.repository.DefaultEarnRepository
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.domain.common.wallets.UserWalletsListRepository
import com.tangem.domain.earn.EarnErrorResolver
import com.tangem.domain.earn.repository.EarnRepository
@ -29,19 +29,19 @@ internal object EarnDataModule {
tangemTechApi: TangemTechApi,
dispatchers: CoroutineDispatcherProvider,
userWalletsListRepository: UserWalletsListRepository,
cryptoCurrencyFactory: CryptoCurrencyFactory,
earnNetworksStore: EarnNetworksStore,
earnTopTokensStore: EarnTopTokensStore,
earnErrorResolver: EarnErrorResolver,
excludedBlockchains: ExcludedBlockchains,
): EarnRepository {
return DefaultEarnRepository(
tangemTechApi = tangemTechApi,
dispatchers = dispatchers,
userWalletsListRepository = userWalletsListRepository,
cryptoCurrencyFactory = cryptoCurrencyFactory,
earnNetworksStore = earnNetworksStore,
earnTopTokensStore = earnTopTokensStore,
earnErrorResolver = earnErrorResolver,
excludedBlockchains = excludedBlockchains,
)
}
}

View file

@ -2,6 +2,7 @@ package com.tangem.data.earn.repository
import arrow.core.Either
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchainsdk.utils.ExcludedBlockchains
import com.tangem.blockchainsdk.utils.fromNetworkId
import com.tangem.data.common.currency.CryptoCurrencyFactory
import com.tangem.data.earn.converter.EarnTokenConverter
@ -35,12 +36,16 @@ internal class DefaultEarnRepository(
private val tangemTechApi: TangemTechApi,
private val dispatchers: CoroutineDispatcherProvider,
private val userWalletsListRepository: UserWalletsListRepository,
private val cryptoCurrencyFactory: CryptoCurrencyFactory,
private val earnNetworksStore: EarnNetworksStore,
private val earnTopTokensStore: EarnTopTokensStore,
private val earnErrorResolver: EarnErrorResolver,
private val excludedBlockchains: ExcludedBlockchains,
) : EarnRepository {
private val cryptoCurrencyFactory: CryptoCurrencyFactory by lazy {
CryptoCurrencyFactory(excludedBlockchains = excludedBlockchains)
}
override fun getEarnTokensBatchFlow(context: EarnTokensBatchingContext, batchSize: Int): EarnTokensBatchFlow {
val batchFetcher = EarnTokensBatchFetcher(
tangemTechApi = tangemTechApi,
@ -73,7 +78,7 @@ internal class DefaultEarnRepository(
}
}
override fun observeEarnNetworks(): Flow<EarnNetworks> {
override fun observeEarnNetworks(): Flow<EarnNetworks?> {
return earnNetworksStore.get()
}
@ -100,6 +105,7 @@ internal class DefaultEarnRepository(
EarnTokenWithCurrency(
earnToken = earnToken,
cryptoCurrency = cryptoCurrency,
networkName = Blockchain.fromNetworkId(dto.networkId)?.fullName.orEmpty(),
)
}
}
@ -110,7 +116,7 @@ internal class DefaultEarnRepository(
}
}
override fun observeTopEarnTokens(): Flow<EarnTopToken> {
override fun observeTopEarnTokens(): Flow<EarnTopToken?> {
return earnTopTokensStore.get()
}
@ -150,7 +156,7 @@ internal fun createCryptoCurrencyForEarnToken(
rawId = CryptoCurrency.RawID(earnToken.token.id),
name = earnToken.token.name,
symbol = earnToken.token.symbol,
decimals = blockchain.decimals(),
decimals = earnToken.token.decimalCount ?: blockchain.decimals(),
contractAddress = earnToken.token.address,
)
}

View file

@ -1,5 +1,7 @@
package com.tangem.data.earn.repository.batch
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchainsdk.utils.fromNetworkId
import com.tangem.data.common.currency.CryptoCurrencyFactory
import com.tangem.data.earn.converter.EarnTokenConverter
import com.tangem.data.earn.repository.DefaultEarnRepository.Companion.FIRST_PAGE
@ -88,6 +90,7 @@ internal class EarnTokensBatchFetcher(
EarnTokenWithCurrency(
earnToken = earnToken,
cryptoCurrency = cryptoCurrency,
networkName = Blockchain.fromNetworkId(dto.networkId)?.fullName.orEmpty(),
)
}
}