Updated on 2026-08-14
This commit is contained in:
parent
9f2b2eac71
commit
5463c87ff0
16 changed files with 11 additions and 295 deletions
|
|
@ -40,14 +40,6 @@ internal object ManageTokensDomainModule {
|
||||||
return FindTokenUseCase(customTokensRepository)
|
return FindTokenUseCase(customTokensRepository)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
fun provideCheckIsCurrencyNotAddedUseCase(
|
|
||||||
customTokensRepository: CustomTokensRepository,
|
|
||||||
): CheckIsCurrencyNotAddedUseCase {
|
|
||||||
return CheckIsCurrencyNotAddedUseCase(customTokensRepository)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideGetSupportedNetworksUseCase(
|
fun provideGetSupportedNetworksUseCase(
|
||||||
|
|
@ -64,12 +56,6 @@ internal object ManageTokensDomainModule {
|
||||||
return ValidateDerivationPathUseCase(customTokensRepository)
|
return ValidateDerivationPathUseCase(customTokensRepository)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
fun provideCheckHasLinkedTokensUseCase(repository: ManageTokensRepository): CheckHasLinkedTokensUseCase {
|
|
||||||
return CheckHasLinkedTokensUseCase(repository)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideCheckCurrencyUnsupportedUseCase(repository: ManageTokensRepository): CheckCurrencyUnsupportedUseCase {
|
fun provideCheckCurrencyUnsupportedUseCase(repository: ManageTokensRepository): CheckCurrencyUnsupportedUseCase {
|
||||||
|
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
package com.tangem.datasource.di.local
|
|
||||||
|
|
||||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
|
||||||
import com.tangem.datasource.local.token.DefaultUserTokensResponseStore
|
|
||||||
import com.tangem.datasource.local.token.UserTokensResponseStore
|
|
||||||
import dagger.Module
|
|
||||||
import dagger.Provides
|
|
||||||
import dagger.hilt.InstallIn
|
|
||||||
import dagger.hilt.components.SingletonComponent
|
|
||||||
import javax.inject.Singleton
|
|
||||||
|
|
||||||
@Module
|
|
||||||
@InstallIn(SingletonComponent::class)
|
|
||||||
internal object LocalTokenModule {
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
fun provideUserTokensResponseStore(appPreferencesStore: AppPreferencesStore): UserTokensResponseStore {
|
|
||||||
return DefaultUserTokensResponseStore(appPreferencesStore = appPreferencesStore)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
package com.tangem.datasource.local.token
|
|
||||||
|
|
||||||
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
|
|
||||||
import com.tangem.domain.models.wallet.UserWalletId
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store of [UserTokensResponse]
|
|
||||||
*
|
|
||||||
[REDACTED_AUTHOR]
|
|
||||||
*/
|
|
||||||
interface UserTokensResponseStore {
|
|
||||||
|
|
||||||
fun get(userWalletId: UserWalletId): Flow<UserTokensResponse?>
|
|
||||||
|
|
||||||
/** Get [UserTokensResponse] synchronously by [userWalletId] or null */
|
|
||||||
suspend fun getSyncOrNull(userWalletId: UserWalletId): UserTokensResponse?
|
|
||||||
|
|
||||||
suspend fun store(userWalletId: UserWalletId, response: UserTokensResponse)
|
|
||||||
|
|
||||||
suspend fun clear(userWalletId: UserWalletId)
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.tangem.data.account.fetcher
|
package com.tangem.data.account.fetcher
|
||||||
|
|
||||||
import com.tangem.data.account.fetcher.DefaultWalletAccountsFetcher.FetchResult
|
import com.tangem.data.account.fetcher.DefaultWalletAccountsFetcher.FetchResult
|
||||||
|
import com.tangem.data.account.store.LegacyUserTokensResponseStore
|
||||||
import com.tangem.data.account.utils.DefaultWalletAccountsResponseFactory
|
import com.tangem.data.account.utils.DefaultWalletAccountsResponseFactory
|
||||||
import com.tangem.data.common.currency.UserTokensResponseAccountIdEnricher
|
import com.tangem.data.common.currency.UserTokensResponseAccountIdEnricher
|
||||||
import com.tangem.data.common.currency.UserTokensSaver
|
import com.tangem.data.common.currency.UserTokensSaver
|
||||||
|
|
@ -14,7 +15,6 @@ import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
|
||||||
import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse
|
import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse
|
||||||
import com.tangem.datasource.api.tangemTech.models.account.WalletAccountDTO
|
import com.tangem.datasource.api.tangemTech.models.account.WalletAccountDTO
|
||||||
import com.tangem.datasource.api.tangemTech.models.account.toUserTokensResponse
|
import com.tangem.datasource.api.tangemTech.models.account.toUserTokensResponse
|
||||||
import com.tangem.datasource.local.token.UserTokensResponseStore
|
|
||||||
import com.tangem.domain.models.wallet.UserWalletId
|
import com.tangem.domain.models.wallet.UserWalletId
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
@ -35,7 +35,7 @@ import javax.inject.Singleton
|
||||||
@Singleton
|
@Singleton
|
||||||
internal class FetchWalletAccountsErrorHandler @Inject constructor(
|
internal class FetchWalletAccountsErrorHandler @Inject constructor(
|
||||||
private val userTokensSaver: UserTokensSaver,
|
private val userTokensSaver: UserTokensSaver,
|
||||||
private val userTokensResponseStore: UserTokensResponseStore,
|
private val userTokensResponseStore: LegacyUserTokensResponseStore,
|
||||||
private val defaultWalletAccountsResponseFactory: DefaultWalletAccountsResponseFactory,
|
private val defaultWalletAccountsResponseFactory: DefaultWalletAccountsResponseFactory,
|
||||||
private val walletServerBinder: WalletServerBinder,
|
private val walletServerBinder: WalletServerBinder,
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
|
|
@ -1,45 +1,30 @@
|
||||||
package com.tangem.datasource.local.token
|
package com.tangem.data.account.store
|
||||||
|
|
||||||
import androidx.datastore.preferences.core.stringPreferencesKey
|
import androidx.datastore.preferences.core.stringPreferencesKey
|
||||||
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
|
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
|
||||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||||
import com.tangem.datasource.local.preferences.utils.getObject
|
|
||||||
import com.tangem.datasource.local.preferences.utils.getObjectSyncOrNull
|
import com.tangem.datasource.local.preferences.utils.getObjectSyncOrNull
|
||||||
import com.tangem.datasource.local.preferences.utils.storeObject
|
|
||||||
import com.tangem.domain.models.wallet.UserWalletId
|
import com.tangem.domain.models.wallet.UserWalletId
|
||||||
import kotlinx.coroutines.flow.Flow
|
import javax.inject.Inject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default implementation of [UserTokensResponseStore]
|
* Legacy store for user tokens
|
||||||
*
|
*
|
||||||
* @property appPreferencesStore app preferences store
|
* @property appPreferencesStore app preferences store
|
||||||
*
|
*
|
||||||
[REDACTED_AUTHOR]
|
[REDACTED_AUTHOR]
|
||||||
*/
|
*/
|
||||||
internal class DefaultUserTokensResponseStore(
|
internal class LegacyUserTokensResponseStore @Inject constructor(
|
||||||
private val appPreferencesStore: AppPreferencesStore,
|
private val appPreferencesStore: AppPreferencesStore,
|
||||||
) : UserTokensResponseStore {
|
) {
|
||||||
|
|
||||||
override fun get(userWalletId: UserWalletId): Flow<UserTokensResponse?> {
|
suspend fun getSyncOrNull(userWalletId: UserWalletId): UserTokensResponse? {
|
||||||
return appPreferencesStore.getObject<UserTokensResponse>(
|
|
||||||
key = createPreferencesKey(userWalletId = userWalletId.stringValue),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun getSyncOrNull(userWalletId: UserWalletId): UserTokensResponse? {
|
|
||||||
return appPreferencesStore.getObjectSyncOrNull<UserTokensResponse>(
|
return appPreferencesStore.getObjectSyncOrNull<UserTokensResponse>(
|
||||||
key = createPreferencesKey(userWalletId = userWalletId.stringValue),
|
key = createPreferencesKey(userWalletId = userWalletId.stringValue),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun store(userWalletId: UserWalletId, response: UserTokensResponse) {
|
suspend fun clear(userWalletId: UserWalletId) {
|
||||||
appPreferencesStore.storeObject(
|
|
||||||
key = createPreferencesKey(userWalletId = userWalletId.stringValue),
|
|
||||||
value = response,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun clear(userWalletId: UserWalletId) {
|
|
||||||
appPreferencesStore.updateData { preferences ->
|
appPreferencesStore.updateData { preferences ->
|
||||||
val key = createPreferencesKey(userWalletId = userWalletId.stringValue)
|
val key = createPreferencesKey(userWalletId = userWalletId.stringValue)
|
||||||
|
|
||||||
|
|
@ -2,6 +2,7 @@ package com.tangem.data.account.fetcher
|
||||||
|
|
||||||
import com.tangem.data.account.converter.createGetWalletAccountsResponse
|
import com.tangem.data.account.converter.createGetWalletAccountsResponse
|
||||||
import com.tangem.data.account.converter.createWalletAccountDTO
|
import com.tangem.data.account.converter.createWalletAccountDTO
|
||||||
|
import com.tangem.data.account.store.LegacyUserTokensResponseStore
|
||||||
import com.tangem.data.account.utils.DefaultWalletAccountsResponseFactory
|
import com.tangem.data.account.utils.DefaultWalletAccountsResponseFactory
|
||||||
import com.tangem.data.common.currency.UserTokensSaver
|
import com.tangem.data.common.currency.UserTokensSaver
|
||||||
import com.tangem.data.common.wallet.WalletServerBinder
|
import com.tangem.data.common.wallet.WalletServerBinder
|
||||||
|
|
@ -14,7 +15,6 @@ import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
|
||||||
import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse
|
import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse
|
||||||
import com.tangem.datasource.api.tangemTech.models.account.WalletAccountDTO
|
import com.tangem.datasource.api.tangemTech.models.account.WalletAccountDTO
|
||||||
import com.tangem.datasource.api.tangemTech.models.account.toUserTokensResponse
|
import com.tangem.datasource.api.tangemTech.models.account.toUserTokensResponse
|
||||||
import com.tangem.datasource.local.token.UserTokensResponseStore
|
|
||||||
import com.tangem.domain.models.wallet.UserWalletId
|
import com.tangem.domain.models.wallet.UserWalletId
|
||||||
import io.mockk.clearMocks
|
import io.mockk.clearMocks
|
||||||
import io.mockk.coEvery
|
import io.mockk.coEvery
|
||||||
|
|
@ -34,7 +34,7 @@ class FetchWalletAccountsErrorHandlerTest {
|
||||||
private val tangemTechApi: TangemTechApi = mockk()
|
private val tangemTechApi: TangemTechApi = mockk()
|
||||||
private val walletServerBinder: WalletServerBinder = mockk()
|
private val walletServerBinder: WalletServerBinder = mockk()
|
||||||
private val userTokensSaver: UserTokensSaver = mockk(relaxUnitFun = true)
|
private val userTokensSaver: UserTokensSaver = mockk(relaxUnitFun = true)
|
||||||
private val userTokensResponseStore: UserTokensResponseStore = mockk(relaxUnitFun = true)
|
private val userTokensResponseStore: LegacyUserTokensResponseStore = mockk(relaxUnitFun = true)
|
||||||
private val defaultWalletAccountsResponseFactory: DefaultWalletAccountsResponseFactory = mockk()
|
private val defaultWalletAccountsResponseFactory: DefaultWalletAccountsResponseFactory = mockk()
|
||||||
|
|
||||||
private val handler = FetchWalletAccountsErrorHandler(
|
private val handler = FetchWalletAccountsErrorHandler(
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ import com.tangem.data.common.network.NetworkFactory
|
||||||
import com.tangem.data.managetokens.utils.TokenAddressesConverter
|
import com.tangem.data.managetokens.utils.TokenAddressesConverter
|
||||||
import com.tangem.datasource.api.common.response.getOrThrow
|
import com.tangem.datasource.api.common.response.getOrThrow
|
||||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||||
import com.tangem.datasource.local.token.UserTokensResponseStore
|
|
||||||
import com.tangem.domain.card.common.extensions.canHandleBlockchain
|
import com.tangem.domain.card.common.extensions.canHandleBlockchain
|
||||||
import com.tangem.domain.card.common.extensions.hotWalletExcludedBlockchains
|
import com.tangem.domain.card.common.extensions.hotWalletExcludedBlockchains
|
||||||
import com.tangem.domain.card.common.extensions.supportedBlockchains
|
import com.tangem.domain.card.common.extensions.supportedBlockchains
|
||||||
|
|
@ -27,11 +26,9 @@ import com.tangem.domain.models.wallet.UserWalletId
|
||||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
@Suppress("LongParameterList")
|
|
||||||
internal class DefaultCustomTokensRepository(
|
internal class DefaultCustomTokensRepository(
|
||||||
private val tangemTechApi: TangemTechApi,
|
private val tangemTechApi: TangemTechApi,
|
||||||
private val userWalletsListRepository: UserWalletsListRepository,
|
private val userWalletsListRepository: UserWalletsListRepository,
|
||||||
private val userTokensResponseStore: UserTokensResponseStore,
|
|
||||||
private val excludedBlockchains: ExcludedBlockchains,
|
private val excludedBlockchains: ExcludedBlockchains,
|
||||||
private val dispatchers: CoroutineDispatcherProvider,
|
private val dispatchers: CoroutineDispatcherProvider,
|
||||||
private val networkFactory: NetworkFactory,
|
private val networkFactory: NetworkFactory,
|
||||||
|
|
@ -64,27 +61,6 @@ internal class DefaultCustomTokensRepository(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun isCurrencyNotAdded(
|
|
||||||
userWalletId: UserWalletId,
|
|
||||||
networkId: Network.ID,
|
|
||||||
derivationPath: Network.DerivationPath,
|
|
||||||
contractAddress: String?,
|
|
||||||
): Boolean {
|
|
||||||
return withContext(dispatchers.io) {
|
|
||||||
val storedCurrencies = userTokensResponseStore.getSyncOrNull(userWalletId)
|
|
||||||
|
|
||||||
requireNotNull(storedCurrencies) {
|
|
||||||
"User tokens not found for user wallet [$userWalletId] while checking if currency is not added"
|
|
||||||
}
|
|
||||||
|
|
||||||
storedCurrencies.tokens.none { token ->
|
|
||||||
networkId.toBlockchain().toNetworkId() == token.networkId &&
|
|
||||||
derivationPath.value == token.derivationPath &&
|
|
||||||
contractAddress.equals(token.contractAddress, ignoreCase = true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun findToken(
|
override suspend fun findToken(
|
||||||
userWalletId: UserWalletId,
|
userWalletId: UserWalletId,
|
||||||
contractAddress: String,
|
contractAddress: String,
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ import com.tangem.datasource.api.tangemTech.models.CoinsResponse
|
||||||
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
|
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
|
||||||
import com.tangem.datasource.api.tangemTech.models.orDefault
|
import com.tangem.datasource.api.tangemTech.models.orDefault
|
||||||
import com.tangem.datasource.local.config.testnet.TestnetTokensStorage
|
import com.tangem.datasource.local.config.testnet.TestnetTokensStorage
|
||||||
import com.tangem.datasource.local.token.UserTokensResponseStore
|
|
||||||
import com.tangem.domain.card.common.TapWorkarounds.isTestCard
|
import com.tangem.domain.card.common.TapWorkarounds.isTestCard
|
||||||
import com.tangem.domain.card.common.extensions.*
|
import com.tangem.domain.card.common.extensions.*
|
||||||
import com.tangem.domain.card.common.util.cardTypesResolver
|
import com.tangem.domain.card.common.util.cardTypesResolver
|
||||||
|
|
@ -28,7 +27,6 @@ import com.tangem.domain.managetokens.model.ManagedCryptoCurrency.SourceNetwork
|
||||||
import com.tangem.domain.managetokens.repository.ManageTokensRepository
|
import com.tangem.domain.managetokens.repository.ManageTokensRepository
|
||||||
import com.tangem.domain.models.account.AccountId
|
import com.tangem.domain.models.account.AccountId
|
||||||
import com.tangem.domain.models.account.DerivationIndex
|
import com.tangem.domain.models.account.DerivationIndex
|
||||||
import com.tangem.domain.models.network.Network
|
|
||||||
import com.tangem.domain.models.wallet.UserWallet
|
import com.tangem.domain.models.wallet.UserWallet
|
||||||
import com.tangem.domain.models.wallet.UserWalletId
|
import com.tangem.domain.models.wallet.UserWalletId
|
||||||
import com.tangem.pagination.BatchFetchResult
|
import com.tangem.pagination.BatchFetchResult
|
||||||
|
|
@ -44,7 +42,6 @@ internal class DefaultManageTokensRepository(
|
||||||
private val tangemTechApi: TangemTechApi,
|
private val tangemTechApi: TangemTechApi,
|
||||||
private val userWalletsListRepository: UserWalletsListRepository,
|
private val userWalletsListRepository: UserWalletsListRepository,
|
||||||
private val manageTokensUpdateFetcher: ManageTokensUpdateFetcher,
|
private val manageTokensUpdateFetcher: ManageTokensUpdateFetcher,
|
||||||
private val userTokensResponseStore: UserTokensResponseStore,
|
|
||||||
private val testnetTokensStorage: TestnetTokensStorage,
|
private val testnetTokensStorage: TestnetTokensStorage,
|
||||||
private val excludedBlockchains: ExcludedBlockchains,
|
private val excludedBlockchains: ExcludedBlockchains,
|
||||||
private val dispatchers: CoroutineDispatcherProvider,
|
private val dispatchers: CoroutineDispatcherProvider,
|
||||||
|
|
@ -280,52 +277,6 @@ internal class DefaultManageTokensRepository(
|
||||||
}
|
}
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
override suspend fun hasLinkedTokens(
|
|
||||||
userWalletId: UserWalletId,
|
|
||||||
network: Network,
|
|
||||||
tempAddedTokens: Map<ManagedCryptoCurrency.Token, Set<Network>>,
|
|
||||||
tempRemovedTokens: Map<ManagedCryptoCurrency.Token, Set<Network>>,
|
|
||||||
): Boolean {
|
|
||||||
val addedTokens = tempAddedTokens.mapToResponseTokens()
|
|
||||||
val removedTokens = tempRemovedTokens.mapToResponseTokens()
|
|
||||||
|
|
||||||
val storedTokens = requireNotNull(
|
|
||||||
value = getSavedUserTokensResponseSync(userWalletId),
|
|
||||||
lazyMessage = { "Unable to find tokens response for user wallet with provided ID: $userWalletId" },
|
|
||||||
)
|
|
||||||
val newTokensList = storedTokens.tokens + addedTokens - removedTokens.toSet()
|
|
||||||
|
|
||||||
return newTokensList.any { token ->
|
|
||||||
token.contractAddress != null &&
|
|
||||||
token.networkId == network.backendId &&
|
|
||||||
token.derivationPath == network.derivationPath.value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun Map<ManagedCryptoCurrency.Token, Set<Network>>.mapToResponseTokens(): List<UserTokensResponse.Token> {
|
|
||||||
return flatMap { (token, networks) ->
|
|
||||||
token.availableNetworks
|
|
||||||
.filter { sourceNetwork -> networks.contains(sourceNetwork.network) }
|
|
||||||
.map { sourceNetwork ->
|
|
||||||
val networkId = sourceNetwork.network.toBlockchain().toNetworkId()
|
|
||||||
|
|
||||||
UserTokensResponse.Token(
|
|
||||||
id = token.id.value,
|
|
||||||
networkId = networkId,
|
|
||||||
derivationPath = sourceNetwork.network.derivationPath.value,
|
|
||||||
name = token.name,
|
|
||||||
symbol = token.symbol,
|
|
||||||
decimals = sourceNetwork.decimals,
|
|
||||||
contractAddress = (sourceNetwork as? SourceNetwork.Default)?.contractAddress,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private suspend fun getSavedUserTokensResponseSync(key: UserWalletId): UserTokensResponse? {
|
|
||||||
return userTokensResponseStore.getSyncOrNull(userWalletId = key)
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun checkCurrencyUnsupportedState(
|
override suspend fun checkCurrencyUnsupportedState(
|
||||||
userWalletId: UserWalletId,
|
userWalletId: UserWalletId,
|
||||||
sourceNetwork: SourceNetwork,
|
sourceNetwork: SourceNetwork,
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import com.tangem.data.managetokens.DefaultManageTokensRepository
|
||||||
import com.tangem.data.managetokens.utils.ManageTokensUpdateFetcher
|
import com.tangem.data.managetokens.utils.ManageTokensUpdateFetcher
|
||||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||||
import com.tangem.datasource.local.config.testnet.TestnetTokensStorage
|
import com.tangem.datasource.local.config.testnet.TestnetTokensStorage
|
||||||
import com.tangem.datasource.local.token.UserTokensResponseStore
|
|
||||||
import com.tangem.domain.common.wallets.UserWalletsListRepository
|
import com.tangem.domain.common.wallets.UserWalletsListRepository
|
||||||
import com.tangem.domain.managetokens.repository.CustomTokensRepository
|
import com.tangem.domain.managetokens.repository.CustomTokensRepository
|
||||||
import com.tangem.domain.managetokens.repository.ManageTokensRepository
|
import com.tangem.domain.managetokens.repository.ManageTokensRepository
|
||||||
|
|
@ -29,7 +28,6 @@ internal object ManageTokensDataModule {
|
||||||
tangemTechApi: TangemTechApi,
|
tangemTechApi: TangemTechApi,
|
||||||
userWalletsListRepository: UserWalletsListRepository,
|
userWalletsListRepository: UserWalletsListRepository,
|
||||||
manageTokensUpdateFetcher: ManageTokensUpdateFetcher,
|
manageTokensUpdateFetcher: ManageTokensUpdateFetcher,
|
||||||
userTokensResponseStore: UserTokensResponseStore,
|
|
||||||
testnetTokensStorage: TestnetTokensStorage,
|
testnetTokensStorage: TestnetTokensStorage,
|
||||||
dispatchers: CoroutineDispatcherProvider,
|
dispatchers: CoroutineDispatcherProvider,
|
||||||
excludedBlockchains: ExcludedBlockchains,
|
excludedBlockchains: ExcludedBlockchains,
|
||||||
|
|
@ -40,7 +38,6 @@ internal object ManageTokensDataModule {
|
||||||
tangemTechApi = tangemTechApi,
|
tangemTechApi = tangemTechApi,
|
||||||
userWalletsListRepository = userWalletsListRepository,
|
userWalletsListRepository = userWalletsListRepository,
|
||||||
manageTokensUpdateFetcher = manageTokensUpdateFetcher,
|
manageTokensUpdateFetcher = manageTokensUpdateFetcher,
|
||||||
userTokensResponseStore = userTokensResponseStore,
|
|
||||||
testnetTokensStorage = testnetTokensStorage,
|
testnetTokensStorage = testnetTokensStorage,
|
||||||
excludedBlockchains = excludedBlockchains,
|
excludedBlockchains = excludedBlockchains,
|
||||||
networkFactory = networkFactory,
|
networkFactory = networkFactory,
|
||||||
|
|
@ -54,7 +51,6 @@ internal object ManageTokensDataModule {
|
||||||
fun provideCustomTokensRepository(
|
fun provideCustomTokensRepository(
|
||||||
tangemTechApi: TangemTechApi,
|
tangemTechApi: TangemTechApi,
|
||||||
userWalletsListRepository: UserWalletsListRepository,
|
userWalletsListRepository: UserWalletsListRepository,
|
||||||
userTokensResponseStore: UserTokensResponseStore,
|
|
||||||
dispatchers: CoroutineDispatcherProvider,
|
dispatchers: CoroutineDispatcherProvider,
|
||||||
excludedBlockchains: ExcludedBlockchains,
|
excludedBlockchains: ExcludedBlockchains,
|
||||||
networkFactory: NetworkFactory,
|
networkFactory: NetworkFactory,
|
||||||
|
|
@ -62,7 +58,6 @@ internal object ManageTokensDataModule {
|
||||||
return DefaultCustomTokensRepository(
|
return DefaultCustomTokensRepository(
|
||||||
tangemTechApi = tangemTechApi,
|
tangemTechApi = tangemTechApi,
|
||||||
userWalletsListRepository = userWalletsListRepository,
|
userWalletsListRepository = userWalletsListRepository,
|
||||||
userTokensResponseStore = userTokensResponseStore,
|
|
||||||
excludedBlockchains = excludedBlockchains,
|
excludedBlockchains = excludedBlockchains,
|
||||||
dispatchers = dispatchers,
|
dispatchers = dispatchers,
|
||||||
networkFactory = networkFactory,
|
networkFactory = networkFactory,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ package com.tangem.data.tokens.di
|
||||||
import com.tangem.blockchainsdk.utils.ExcludedBlockchains
|
import com.tangem.blockchainsdk.utils.ExcludedBlockchains
|
||||||
import com.tangem.data.common.cache.CacheRegistry
|
import com.tangem.data.common.cache.CacheRegistry
|
||||||
import com.tangem.data.common.currency.CardCryptoCurrencyFactory
|
import com.tangem.data.common.currency.CardCryptoCurrencyFactory
|
||||||
import com.tangem.data.common.currency.ResponseCryptoCurrenciesFactory
|
|
||||||
import com.tangem.data.tokens.repository.DefaultCurrenciesRepository
|
import com.tangem.data.tokens.repository.DefaultCurrenciesRepository
|
||||||
import com.tangem.data.tokens.repository.DefaultCurrencyChecksRepository
|
import com.tangem.data.tokens.repository.DefaultCurrencyChecksRepository
|
||||||
import com.tangem.data.tokens.repository.DefaultTokenReceiveWarningsViewedRepository
|
import com.tangem.data.tokens.repository.DefaultTokenReceiveWarningsViewedRepository
|
||||||
|
|
@ -11,7 +10,6 @@ import com.tangem.data.tokens.repository.DefaultYieldSupplyWarningsViewedReposit
|
||||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||||
import com.tangem.datasource.local.token.TokenReceiveWarningActionStore
|
import com.tangem.datasource.local.token.TokenReceiveWarningActionStore
|
||||||
import com.tangem.datasource.local.token.UserTokensResponseStore
|
|
||||||
import com.tangem.domain.common.wallets.UserWalletsListRepository
|
import com.tangem.domain.common.wallets.UserWalletsListRepository
|
||||||
import com.tangem.domain.express.ExpressServiceFetcher
|
import com.tangem.domain.express.ExpressServiceFetcher
|
||||||
import com.tangem.domain.tokens.MultiWalletCryptoCurrenciesSupplier
|
import com.tangem.domain.tokens.MultiWalletCryptoCurrenciesSupplier
|
||||||
|
|
@ -35,7 +33,6 @@ internal object TokensDataModule {
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideCurrenciesRepository(
|
fun provideCurrenciesRepository(
|
||||||
tangemTechApi: TangemTechApi,
|
tangemTechApi: TangemTechApi,
|
||||||
userTokensResponseStore: UserTokensResponseStore,
|
|
||||||
userWalletsListRepository: UserWalletsListRepository,
|
userWalletsListRepository: UserWalletsListRepository,
|
||||||
walletManagersFacade: WalletManagersFacade,
|
walletManagersFacade: WalletManagersFacade,
|
||||||
cacheRegistry: CacheRegistry,
|
cacheRegistry: CacheRegistry,
|
||||||
|
|
@ -43,7 +40,6 @@ internal object TokensDataModule {
|
||||||
expressServiceFetcher: ExpressServiceFetcher,
|
expressServiceFetcher: ExpressServiceFetcher,
|
||||||
excludedBlockchains: ExcludedBlockchains,
|
excludedBlockchains: ExcludedBlockchains,
|
||||||
cardCryptoCurrencyFactory: CardCryptoCurrencyFactory,
|
cardCryptoCurrencyFactory: CardCryptoCurrencyFactory,
|
||||||
responseCryptoCurrenciesFactory: ResponseCryptoCurrenciesFactory,
|
|
||||||
multiWalletCryptoCurrenciesSupplier: MultiWalletCryptoCurrenciesSupplier,
|
multiWalletCryptoCurrenciesSupplier: MultiWalletCryptoCurrenciesSupplier,
|
||||||
): CurrenciesRepository {
|
): CurrenciesRepository {
|
||||||
return DefaultCurrenciesRepository(
|
return DefaultCurrenciesRepository(
|
||||||
|
|
@ -51,12 +47,10 @@ internal object TokensDataModule {
|
||||||
userWalletsListRepository = userWalletsListRepository,
|
userWalletsListRepository = userWalletsListRepository,
|
||||||
walletManagersFacade = walletManagersFacade,
|
walletManagersFacade = walletManagersFacade,
|
||||||
cacheRegistry = cacheRegistry,
|
cacheRegistry = cacheRegistry,
|
||||||
userTokensResponseStore = userTokensResponseStore,
|
|
||||||
expressServiceFetcher = expressServiceFetcher,
|
expressServiceFetcher = expressServiceFetcher,
|
||||||
dispatchers = dispatchers,
|
dispatchers = dispatchers,
|
||||||
excludedBlockchains = excludedBlockchains,
|
excludedBlockchains = excludedBlockchains,
|
||||||
cardCryptoCurrencyFactory = cardCryptoCurrencyFactory,
|
cardCryptoCurrencyFactory = cardCryptoCurrencyFactory,
|
||||||
responseCryptoCurrenciesFactory = responseCryptoCurrenciesFactory,
|
|
||||||
multiWalletCryptoCurrenciesSupplier = multiWalletCryptoCurrenciesSupplier,
|
multiWalletCryptoCurrenciesSupplier = multiWalletCryptoCurrenciesSupplier,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,9 @@ import com.tangem.blockchainsdk.utils.toBlockchain
|
||||||
import com.tangem.data.common.cache.CacheRegistry
|
import com.tangem.data.common.cache.CacheRegistry
|
||||||
import com.tangem.data.common.currency.CardCryptoCurrencyFactory
|
import com.tangem.data.common.currency.CardCryptoCurrencyFactory
|
||||||
import com.tangem.data.common.currency.CryptoCurrencyFactory
|
import com.tangem.data.common.currency.CryptoCurrencyFactory
|
||||||
import com.tangem.data.common.currency.ResponseCryptoCurrenciesFactory
|
|
||||||
import com.tangem.data.common.currency.getTokenId
|
import com.tangem.data.common.currency.getTokenId
|
||||||
import com.tangem.datasource.api.common.response.getOrThrow
|
import com.tangem.datasource.api.common.response.getOrThrow
|
||||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||||
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
|
|
||||||
import com.tangem.datasource.local.token.UserTokensResponseStore
|
|
||||||
import com.tangem.domain.card.CardTypesResolver
|
import com.tangem.domain.card.CardTypesResolver
|
||||||
import com.tangem.domain.card.common.util.cardTypesResolver
|
import com.tangem.domain.card.common.util.cardTypesResolver
|
||||||
import com.tangem.domain.common.wallets.UserWalletsListRepository
|
import com.tangem.domain.common.wallets.UserWalletsListRepository
|
||||||
|
|
@ -21,7 +18,6 @@ import com.tangem.domain.common.wallets.getSyncStrict
|
||||||
import com.tangem.domain.core.error.DataError
|
import com.tangem.domain.core.error.DataError
|
||||||
import com.tangem.domain.express.ExpressServiceFetcher
|
import com.tangem.domain.express.ExpressServiceFetcher
|
||||||
import com.tangem.domain.express.models.ExpressAsset
|
import com.tangem.domain.express.models.ExpressAsset
|
||||||
import com.tangem.domain.models.account.DerivationIndex
|
|
||||||
import com.tangem.domain.models.currency.CryptoCurrency
|
import com.tangem.domain.models.currency.CryptoCurrency
|
||||||
import com.tangem.domain.models.currency.CryptoCurrencyStatus
|
import com.tangem.domain.models.currency.CryptoCurrencyStatus
|
||||||
import com.tangem.domain.models.network.Network
|
import com.tangem.domain.models.network.Network
|
||||||
|
|
@ -36,9 +32,7 @@ import com.tangem.domain.tokens.repository.CurrenciesRepository
|
||||||
import com.tangem.domain.walletmanager.WalletManagersFacade
|
import com.tangem.domain.walletmanager.WalletManagersFacade
|
||||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||||
import kotlinx.coroutines.coroutineScope
|
import kotlinx.coroutines.coroutineScope
|
||||||
import kotlinx.coroutines.flow.*
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.plus
|
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import com.tangem.blockchain.common.FeePaidCurrency as FeePaidSdkCurrency
|
import com.tangem.blockchain.common.FeePaidCurrency as FeePaidSdkCurrency
|
||||||
|
|
@ -52,28 +46,12 @@ internal class DefaultCurrenciesRepository(
|
||||||
private val expressServiceFetcher: ExpressServiceFetcher,
|
private val expressServiceFetcher: ExpressServiceFetcher,
|
||||||
private val dispatchers: CoroutineDispatcherProvider,
|
private val dispatchers: CoroutineDispatcherProvider,
|
||||||
private val cardCryptoCurrencyFactory: CardCryptoCurrencyFactory,
|
private val cardCryptoCurrencyFactory: CardCryptoCurrencyFactory,
|
||||||
private val userTokensResponseStore: UserTokensResponseStore,
|
|
||||||
private val responseCryptoCurrenciesFactory: ResponseCryptoCurrenciesFactory,
|
|
||||||
private val multiWalletCryptoCurrenciesSupplier: MultiWalletCryptoCurrenciesSupplier,
|
private val multiWalletCryptoCurrenciesSupplier: MultiWalletCryptoCurrenciesSupplier,
|
||||||
excludedBlockchains: ExcludedBlockchains,
|
excludedBlockchains: ExcludedBlockchains,
|
||||||
) : CurrenciesRepository {
|
) : CurrenciesRepository {
|
||||||
|
|
||||||
private val cryptoCurrencyFactory = CryptoCurrencyFactory(excludedBlockchains)
|
private val cryptoCurrencyFactory = CryptoCurrencyFactory(excludedBlockchains)
|
||||||
|
|
||||||
override fun getWalletCurrenciesUpdates(userWalletId: UserWalletId): Flow<List<CryptoCurrency>> {
|
|
||||||
return channelFlow {
|
|
||||||
val userWallet = userWalletsListRepository.getSyncStrict(userWalletId)
|
|
||||||
|
|
||||||
if (userWallet.isMultiCurrency) {
|
|
||||||
getMultiCurrencyWalletCurrenciesUpdates(userWalletId).collect(::send)
|
|
||||||
} else {
|
|
||||||
val currencies = getSingleCurrencyWalletWithCardCurrencies(userWalletId)
|
|
||||||
|
|
||||||
send(currencies)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun getSingleCurrencyWalletPrimaryCurrency(
|
override suspend fun getSingleCurrencyWalletPrimaryCurrency(
|
||||||
userWalletId: UserWalletId,
|
userWalletId: UserWalletId,
|
||||||
refresh: Boolean,
|
refresh: Boolean,
|
||||||
|
|
@ -143,17 +121,6 @@ internal class DefaultCurrenciesRepository(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getMultiCurrencyWalletCurrenciesUpdates(userWalletId: UserWalletId): Flow<List<CryptoCurrency>> {
|
|
||||||
return channelFlow {
|
|
||||||
val userWallet = userWalletsListRepository.getSyncStrict(userWalletId)
|
|
||||||
ensureIsCorrectUserWallet(userWallet, isMultiCurrencyWalletExpected = true)
|
|
||||||
|
|
||||||
getMultiCurrencyWalletCurrencies(userWallet)
|
|
||||||
.onEach { send(it) }
|
|
||||||
.launchIn(scope = this + dispatchers.io)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun getNetworkCoin(
|
override suspend fun getNetworkCoin(
|
||||||
userWalletId: UserWalletId,
|
userWalletId: UserWalletId,
|
||||||
networkId: Network.ID,
|
networkId: Network.ID,
|
||||||
|
|
@ -281,16 +248,6 @@ internal class DefaultCurrenciesRepository(
|
||||||
return (userWalletsListRepository.getSyncStrict(userWalletId) as? UserWallet.Cold)?.cardTypesResolver
|
return (userWalletsListRepository.getSyncStrict(userWalletId) as? UserWallet.Cold)?.cardTypesResolver
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getMultiCurrencyWalletCurrencies(userWallet: UserWallet): Flow<List<CryptoCurrency>> {
|
|
||||||
return getSavedUserTokensResponse(userWallet.walletId).map { storedTokens ->
|
|
||||||
responseCryptoCurrenciesFactory.createCurrencies(
|
|
||||||
response = storedTokens,
|
|
||||||
userWallet = userWallet,
|
|
||||||
accountIndex = DerivationIndex.Main,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private suspend fun fetchExpressAssetsByNetworkIds(
|
private suspend fun fetchExpressAssetsByNetworkIds(
|
||||||
userWallet: UserWallet,
|
userWallet: UserWallet,
|
||||||
cryptoCurrencies: List<CryptoCurrency>,
|
cryptoCurrencies: List<CryptoCurrency>,
|
||||||
|
|
@ -338,8 +295,4 @@ internal class DefaultCurrenciesRepository(
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getSavedUserTokensResponse(key: UserWalletId): Flow<UserTokensResponse> {
|
|
||||||
return userTokensResponseStore.get(userWalletId = key).filterNotNull()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
package com.tangem.domain.managetokens
|
|
||||||
|
|
||||||
import arrow.core.Either
|
|
||||||
import com.tangem.domain.managetokens.model.ManagedCryptoCurrency
|
|
||||||
import com.tangem.domain.managetokens.repository.ManageTokensRepository
|
|
||||||
import com.tangem.domain.models.network.Network
|
|
||||||
import com.tangem.domain.models.wallet.UserWalletId
|
|
||||||
|
|
||||||
class CheckHasLinkedTokensUseCase(
|
|
||||||
private val repository: ManageTokensRepository,
|
|
||||||
) {
|
|
||||||
|
|
||||||
suspend operator fun invoke(
|
|
||||||
userWalletId: UserWalletId,
|
|
||||||
network: Network,
|
|
||||||
tempAddedTokens: Map<ManagedCryptoCurrency.Token, Set<Network>>,
|
|
||||||
tempRemovedTokens: Map<ManagedCryptoCurrency.Token, Set<Network>>,
|
|
||||||
): Either<Throwable, Boolean> {
|
|
||||||
return Either.catch {
|
|
||||||
repository.hasLinkedTokens(
|
|
||||||
userWalletId = userWalletId,
|
|
||||||
network = network,
|
|
||||||
tempAddedTokens = tempAddedTokens,
|
|
||||||
tempRemovedTokens = tempRemovedTokens,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
package com.tangem.domain.managetokens
|
|
||||||
|
|
||||||
import arrow.core.Either
|
|
||||||
import com.tangem.domain.managetokens.repository.CustomTokensRepository
|
|
||||||
import com.tangem.domain.models.network.Network
|
|
||||||
import com.tangem.domain.models.wallet.UserWalletId
|
|
||||||
|
|
||||||
class CheckIsCurrencyNotAddedUseCase(
|
|
||||||
private val repository: CustomTokensRepository,
|
|
||||||
) {
|
|
||||||
|
|
||||||
suspend operator fun invoke(
|
|
||||||
userWalletId: UserWalletId,
|
|
||||||
networkId: Network.ID,
|
|
||||||
derivationPath: Network.DerivationPath,
|
|
||||||
contractAddress: String?,
|
|
||||||
): Either<Throwable, Boolean> = Either.catch {
|
|
||||||
repository.isCurrencyNotAdded(
|
|
||||||
userWalletId = userWalletId,
|
|
||||||
networkId = networkId,
|
|
||||||
derivationPath = derivationPath,
|
|
||||||
contractAddress = contractAddress,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -10,13 +10,6 @@ interface CustomTokensRepository {
|
||||||
|
|
||||||
suspend fun validateContractAddress(contractAddress: String, networkId: Network.ID): Boolean
|
suspend fun validateContractAddress(contractAddress: String, networkId: Network.ID): Boolean
|
||||||
|
|
||||||
suspend fun isCurrencyNotAdded(
|
|
||||||
userWalletId: UserWalletId,
|
|
||||||
networkId: Network.ID,
|
|
||||||
derivationPath: Network.DerivationPath,
|
|
||||||
contractAddress: String?,
|
|
||||||
): Boolean
|
|
||||||
|
|
||||||
suspend fun findToken(
|
suspend fun findToken(
|
||||||
userWalletId: UserWalletId,
|
userWalletId: UserWalletId,
|
||||||
contractAddress: String,
|
contractAddress: String,
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import com.tangem.domain.managetokens.model.CurrencyUnsupportedState
|
||||||
import com.tangem.domain.managetokens.model.ManageTokensListBatchFlow
|
import com.tangem.domain.managetokens.model.ManageTokensListBatchFlow
|
||||||
import com.tangem.domain.managetokens.model.ManageTokensListBatchingContext
|
import com.tangem.domain.managetokens.model.ManageTokensListBatchingContext
|
||||||
import com.tangem.domain.managetokens.model.ManagedCryptoCurrency
|
import com.tangem.domain.managetokens.model.ManagedCryptoCurrency
|
||||||
import com.tangem.domain.models.network.Network
|
|
||||||
import com.tangem.domain.models.wallet.UserWalletId
|
import com.tangem.domain.models.wallet.UserWalletId
|
||||||
|
|
||||||
interface ManageTokensRepository {
|
interface ManageTokensRepository {
|
||||||
|
|
@ -15,13 +14,6 @@ interface ManageTokensRepository {
|
||||||
batchSize: Int,
|
batchSize: Int,
|
||||||
): ManageTokensListBatchFlow
|
): ManageTokensListBatchFlow
|
||||||
|
|
||||||
suspend fun hasLinkedTokens(
|
|
||||||
userWalletId: UserWalletId,
|
|
||||||
network: Network,
|
|
||||||
tempAddedTokens: Map<ManagedCryptoCurrency.Token, Set<Network>>,
|
|
||||||
tempRemovedTokens: Map<ManagedCryptoCurrency.Token, Set<Network>>,
|
|
||||||
): Boolean
|
|
||||||
|
|
||||||
suspend fun checkCurrencyUnsupportedState(
|
suspend fun checkCurrencyUnsupportedState(
|
||||||
userWalletId: UserWalletId,
|
userWalletId: UserWalletId,
|
||||||
sourceNetwork: ManagedCryptoCurrency.SourceNetwork,
|
sourceNetwork: ManagedCryptoCurrency.SourceNetwork,
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import com.tangem.domain.models.currency.CryptoCurrencyStatus
|
||||||
import com.tangem.domain.models.network.Network
|
import com.tangem.domain.models.network.Network
|
||||||
import com.tangem.domain.models.wallet.UserWalletId
|
import com.tangem.domain.models.wallet.UserWalletId
|
||||||
import com.tangem.domain.tokens.model.FeePaidCurrency
|
import com.tangem.domain.tokens.model.FeePaidCurrency
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Repository for everything related to the tokens of user wallet
|
* Repository for everything related to the tokens of user wallet
|
||||||
|
|
@ -15,18 +14,6 @@ import kotlinx.coroutines.flow.Flow
|
||||||
@Suppress("TooManyFunctions")
|
@Suppress("TooManyFunctions")
|
||||||
interface CurrenciesRepository {
|
interface CurrenciesRepository {
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves the list of cryptocurrencies within a user wallet.
|
|
||||||
*
|
|
||||||
* This method returns a list of cryptocurrencies associated with the user wallet regardless of whether
|
|
||||||
* it is a multi-currency or single-currency wallet.
|
|
||||||
*
|
|
||||||
* @param userWalletId The unique identifier of the user wallet.
|
|
||||||
* @return A list of [CryptoCurrency].
|
|
||||||
*/
|
|
||||||
@Deprecated("Use MultiWalletCryptoCurrenciesSupplier")
|
|
||||||
fun getWalletCurrenciesUpdates(userWalletId: UserWalletId): Flow<List<CryptoCurrency>>
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the primary cryptocurrency for a specific single-currency user wallet.
|
* Retrieves the primary cryptocurrency for a specific single-currency user wallet.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue