Updated on 2026-08-14

This commit is contained in:
Tangem 2024-09-03 13:25:28 +04:00
parent 428b2554fd
commit 0d185108da
14 changed files with 431 additions and 90 deletions

View file

@ -14,10 +14,16 @@ dependencies {
implementation(projects.core.datasource)
implementation(projects.core.utils)
implementation(projects.core.pagination)
implementation(projects.domain.tokens.models)
implementation(projects.domain.legacy)
implementation(projects.domain.markets)
implementation(projects.domain.models)
implementation(projects.domain.tokens.models)
implementation(projects.data.common)
implementation(projects.libs.blockchainSdk)
// region DI
implementation(deps.hilt.android)
kapt(deps.hilt.kapt)
@ -28,7 +34,6 @@ dependencies {
implementation(deps.moshi)
implementation(deps.moshi.kotlin)
implementation(deps.timber)
implementation(projects.libs.blockchainSdk)
implementation(deps.tangem.blockchain)
// endregion
}

View file

@ -1,5 +1,9 @@
package com.tangem.data.markets
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchainsdk.utils.fromNetworkId
import com.tangem.data.common.currency.CryptoCurrencyFactory
import com.tangem.data.common.currency.getNetwork
import com.tangem.data.common.utils.retryOnError
import com.tangem.data.markets.converters.TokenChartConverter
import com.tangem.data.markets.converters.TokenMarketInfoConverter
@ -8,8 +12,12 @@ import com.tangem.data.markets.converters.toRequestParam
import com.tangem.datasource.api.common.response.getOrThrow
import com.tangem.datasource.api.markets.TangemTechMarketsApi
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.local.userwallet.UserWalletsStore
import com.tangem.domain.common.util.derivationStyleProvider
import com.tangem.domain.markets.*
import com.tangem.domain.markets.repositories.MarketsTokenRepository
import com.tangem.domain.tokens.model.CryptoCurrency
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.pagination.*
import com.tangem.pagination.fetcher.LimitOffsetBatchFetcher
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
@ -19,6 +27,7 @@ import java.util.concurrent.atomic.AtomicLong
internal class DefaultMarketsTokenRepository(
private val marketsApi: TangemTechMarketsApi,
private val tangemTechApi: TangemTechApi,
private val userWalletsStore: UserWalletsStore,
private val dispatcherProvider: CoroutineDispatcherProvider,
) : MarketsTokenRepository {
@ -148,4 +157,36 @@ internal class DefaultMarketsTokenRepository(
return TokenMarketInfoConverter.convert(response.getOrThrow()).quotes
}
override suspend fun createCryptoCurrency(
userWalletId: UserWalletId,
token: TokenMarketParams,
network: TokenMarketInfo.Network,
): CryptoCurrency? {
val userWallet = userWalletsStore.getSyncOrNull(userWalletId) ?: error("UserWalletId [$userWalletId] not found")
val blockchain = Blockchain.fromNetworkId(network.networkId) ?: error("Unknown network [${network.networkId}]")
return if (network.contractAddress == null) {
CryptoCurrencyFactory().createCoin(
blockchain = blockchain,
extraDerivationPath = null,
derivationStyleProvider = userWallet.scanResponse.derivationStyleProvider,
)
} else {
val currencyNetwork = getNetwork(
blockchain = blockchain,
extraDerivationPath = null,
derivationStyleProvider = userWallet.scanResponse.derivationStyleProvider,
) ?: return null
CryptoCurrencyFactory().createToken(
network = currencyNetwork,
rawId = token.id,
name = token.name,
symbol = token.symbol,
decimals = network.decimalCount ?: error("Unknown decimal"),
contractAddress = network.contractAddress!!,
)
}
}
}

View file

@ -4,6 +4,7 @@ import com.tangem.data.markets.DefaultMarketsTokenRepository
import com.tangem.datasource.api.markets.TangemTechMarketsApi
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.di.DevTangemApi
import com.tangem.datasource.local.userwallet.UserWalletsStore
import com.tangem.domain.markets.repositories.MarketsTokenRepository
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.Module
@ -21,12 +22,14 @@ internal object MarketsDataModule {
fun provideMarketsRepository(
@DevTangemApi marketsApi: TangemTechMarketsApi,
@DevTangemApi tangemTechApi: TangemTechApi,
userWalletsStore: UserWalletsStore,
dispatchers: CoroutineDispatcherProvider,
): MarketsTokenRepository {
return DefaultMarketsTokenRepository(
marketsApi = marketsApi,
tangemTechApi = tangemTechApi,
dispatcherProvider = dispatchers,
userWalletsStore = userWalletsStore,
)
}
}