Updated on 2026-08-14

This commit is contained in:
Tangem 2026-03-06 10:59:48 +04:00
parent e2721b21e1
commit a67ca6279f
14 changed files with 24 additions and 614 deletions

View file

@ -1,40 +1,30 @@
package com.tangem.domain.nft
import com.tangem.domain.account.supplier.SingleAccountListSupplier
import com.tangem.domain.models.PortfolioId
import com.tangem.domain.models.account.Account
import com.tangem.domain.models.account.AccountId
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.nft.models.NFTNetworks
import com.tangem.domain.nft.repository.NFTRepository
import com.tangem.domain.tokens.repository.CurrenciesRepository
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.mapNotNull
class GetNFTNetworksUseCase(
private val currenciesRepository: CurrenciesRepository,
private val singleAccountListSupplier: SingleAccountListSupplier,
private val nftRepository: NFTRepository,
) {
@OptIn(ExperimentalCoroutinesApi::class)
operator fun invoke(portfolioId: PortfolioId): Flow<NFTNetworks> = when (portfolioId) {
is PortfolioId.Account -> {
singleAccountListSupplier(portfolioId.userWalletId)
.mapNotNull { accountList ->
val account = accountList.accounts.find { it.accountId == portfolioId.accountId }
operator fun invoke(accountId: AccountId): Flow<NFTNetworks> {
return singleAccountListSupplier(accountId.userWalletId)
.mapNotNull { accountList ->
val account = accountList.accounts.find { it.accountId == accountId }
(account as? Account.CryptoPortfolio)?.cryptoCurrencies?.toList()
}
.mapLatest { it.toNFTNetworks(portfolioId.userWalletId) }
}
is PortfolioId.Wallet -> {
currenciesRepository
.getWalletCurrenciesUpdates(portfolioId.userWalletId)
.map { cryptoCurrencies -> cryptoCurrencies.toNFTNetworks(portfolioId.userWalletId) }
}
(account as? Account.CryptoPortfolio)?.cryptoCurrencies?.toList()
}
.mapLatest { it.toNFTNetworks(accountId.userWalletId) }
}
private suspend fun List<CryptoCurrency>.toNFTNetworks(userWalletId: UserWalletId): NFTNetworks {