diff --git a/app/src/main/java/com/tangem/tap/domain/model/builders/WalletStoreBuilder.kt b/app/src/main/java/com/tangem/tap/domain/model/builders/WalletStoreBuilder.kt index 003c85904a..f41c664276 100644 --- a/app/src/main/java/com/tangem/tap/domain/model/builders/WalletStoreBuilder.kt +++ b/app/src/main/java/com/tangem/tap/domain/model/builders/WalletStoreBuilder.kt @@ -1,8 +1,10 @@ package com.tangem.tap.domain.model.builders import com.tangem.blockchain.blockchains.polkadot.ExistentialDepositProvider +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.Token import com.tangem.blockchain.common.WalletManager -import com.tangem.tap.domain.model.UserWallet +import com.tangem.domain.common.util.UserWalletId import com.tangem.tap.domain.model.WalletDataModel import com.tangem.tap.domain.model.WalletStoreModel import com.tangem.tap.domain.tokens.models.BlockchainNetwork @@ -17,29 +19,27 @@ interface WalletStoreBuilder { fun walletManager(walletManager: WalletManager?): WalletStoreBuilder } - interface WalletMangerWalletStoreBuilder : WalletStoreBuilder { - fun blockchainNetwork(blockchainNetwork: BlockchainNetwork?): WalletStoreBuilder - } + interface WalletMangerWalletStoreBuilder : WalletStoreBuilder companion object { operator fun invoke( - userWallet: UserWallet, + userWalletId: UserWalletId, blockchainNetwork: BlockchainNetwork, ): BlockchainNetworkWalletStoreBuilder { - return BlockchainNetworkWalletStoreBuilderImpl(userWallet, blockchainNetwork) + return BlockchainNetworkWalletStoreBuilderImpl(userWalletId, blockchainNetwork) } operator fun invoke( - userWallet: UserWallet, + userWalletId: UserWalletId, walletManager: WalletManager, ): WalletMangerWalletStoreBuilder { - return WalletMangerWalletStoreBuilderImpl(userWallet, walletManager) + return WalletMangerWalletStoreBuilderImpl(userWalletId, walletManager) } } } private class BlockchainNetworkWalletStoreBuilderImpl( - private val userWallet: UserWallet, + private val userWalletId: UserWalletId, private val blockchainNetwork: BlockchainNetwork, ) : WalletStoreBuilder.BlockchainNetworkWalletStoreBuilder { private var walletManager: WalletManager? = null @@ -53,7 +53,7 @@ private class BlockchainNetworkWalletStoreBuilderImpl( val tokensWalletsData = blockchainNetwork.getTokensWalletsData(walletManager) return WalletStoreModel( - userWalletId = userWallet.walletId, + userWalletId = userWalletId, blockchainNetwork = blockchainNetwork, walletManager = walletManager, walletsData = (listOf(blockchainWalletData) + tokensWalletsData), @@ -63,25 +63,20 @@ private class BlockchainNetworkWalletStoreBuilderImpl( } private class WalletMangerWalletStoreBuilderImpl( - private val userWallet: UserWallet, + private val userWalletId: UserWalletId, private val walletManager: WalletManager, ) : WalletStoreBuilder.WalletMangerWalletStoreBuilder { - private var blockchainNetwork: BlockchainNetwork? = null - - override fun blockchainNetwork(blockchainNetwork: BlockchainNetwork?) = this.apply { - this.blockchainNetwork = blockchainNetwork - } override fun build(): WalletStoreModel { - val blockchainNetwork = this.blockchainNetwork ?: BlockchainNetwork.fromWalletManager(walletManager) - val blockchainWalletData = blockchainNetwork.getBlockchainWalletData(walletManager) - val tokensWalletsData = blockchainNetwork.getTokensWalletsData(walletManager) + val wallet = walletManager.wallet + val blockchainWalletData = wallet.blockchain.toBlockchainWalletData(walletManager) + val tokenWalletsData = wallet.getTokens().firstOrNull()?.toTokenWalletData(walletManager) return WalletStoreModel( - userWalletId = userWallet.walletId, - blockchainNetwork = blockchainNetwork, + userWalletId = userWalletId, + blockchainNetwork = BlockchainNetwork.fromWalletManager(walletManager), walletManager = walletManager, - walletsData = (listOf(blockchainWalletData) + tokensWalletsData), + walletsData = (listOf(blockchainWalletData) + listOfNotNull(tokenWalletsData)), walletRent = null, ) } @@ -117,6 +112,35 @@ private fun BlockchainNetwork.getTokensWalletsData(walletManager: WalletManager? } } +private fun Blockchain.toBlockchainWalletData(walletManager: WalletManager): WalletDataModel { + val wallet = walletManager.wallet + return WalletDataModel( + currency = Currency.Blockchain( + blockchain = this, + derivationPath = wallet.publicKey.derivationPath?.rawPath, + ), + status = WalletDataModel.Loading, + walletAddresses = wallet.createAddressesData(), + existentialDeposit = getExistentialDeposit(walletManager), + fiatRate = null, + ) +} + +private fun Token.toTokenWalletData(walletManager: WalletManager): WalletDataModel { + val wallet = walletManager.wallet + return WalletDataModel( + currency = Currency.Token( + token = this, + blockchain = wallet.blockchain, + derivationPath = wallet.publicKey.derivationPath?.rawPath, + ), + status = WalletDataModel.Loading, + walletAddresses = wallet.createAddressesData(), + existentialDeposit = getExistentialDeposit(walletManager), + fiatRate = null, + ) +} + private fun getExistentialDeposit(walletManager: WalletManager?): BigDecimal? { return (walletManager as? ExistentialDepositProvider)?.getExistentialDeposit() } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/walletCurrencies/implementation/DefaultWalletCurrenciesManager.kt b/app/src/main/java/com/tangem/tap/domain/walletCurrencies/implementation/DefaultWalletCurrenciesManager.kt index c664c46c0a..837ff8452c 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletCurrencies/implementation/DefaultWalletCurrenciesManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletCurrencies/implementation/DefaultWalletCurrenciesManager.kt @@ -187,8 +187,8 @@ internal class DefaultWalletCurrenciesManager( .flatMap { walletManager -> walletStoresRepository.storeOrUpdate( userWalletId = userWalletId, - walletStore = WalletStoreBuilder(userWallet, walletManager) - .blockchainNetwork(blockchainNetwork) + walletStore = WalletStoreBuilder(userWalletId, blockchainNetwork) + .walletManager(walletManager) .build(), ) } diff --git a/app/src/main/java/com/tangem/tap/domain/walletStores/implementation/DefaultWalletStoresManager.kt b/app/src/main/java/com/tangem/tap/domain/walletStores/implementation/DefaultWalletStoresManager.kt index 52224a9f13..45a7f0e0f9 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletStores/implementation/DefaultWalletStoresManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletStores/implementation/DefaultWalletStoresManager.kt @@ -122,7 +122,7 @@ internal class DefaultWalletStoresManager( { walletManager -> walletStoresRepository.storeOrUpdate( userWalletId = userWalletId, - walletStore = WalletStoreBuilder(userWallet, blockchainNetwork) + walletStore = WalletStoreBuilder(userWalletId, blockchainNetwork) .walletManager(walletManager) .build(), ) @@ -158,9 +158,10 @@ internal class DefaultWalletStoresManager( refresh = refresh, ) .flatMap { walletManager -> + val userWalletId = userWallet.walletId walletStoresRepository.storeOrUpdate( - userWalletId = userWallet.walletId, - walletStore = WalletStoreBuilder(userWallet, walletManager) + userWalletId = userWalletId, + walletStore = WalletStoreBuilder(userWalletId, walletManager) .build(), ) }