Updated on 2026-08-14

This commit is contained in:
Tangem 2023-10-15 10:28:52 +08:00
parent c8006eddda
commit 9c52a130c4
25 changed files with 199 additions and 131 deletions

View file

@ -3,7 +3,7 @@ package com.tangem.feature.swap.domain
import com.tangem.domain.tokens.model.Network
import com.tangem.domain.tokens.repository.CurrenciesRepository
import com.tangem.domain.wallets.models.UserWallet
import com.tangem.domain.wallets.usecase.GetSelectedWalletUseCase
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
import com.tangem.feature.swap.domain.cache.SwapDataCache
import com.tangem.feature.swap.domain.converters.SwapCurrencyConverter
import com.tangem.feature.swap.domain.models.SwapAmount
@ -31,7 +31,7 @@ internal class SwapInteractorImpl @Inject constructor(
private val allowPermissionsHandler: AllowPermissionsHandler,
private val currenciesRepository: CurrenciesRepository,
private val walletFeatureToggles: WalletFeatureToggles,
private val getSelectedWalletUseCase: GetSelectedWalletUseCase,
private val getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
) : SwapInteractor {
private val swapCurrencyConverter = SwapCurrencyConverter()
@ -268,7 +268,7 @@ internal class SwapInteractorImpl @Inject constructor(
private suspend fun onSuccessNewFlow(currency: Currency) {
val network = network ?: return
getSelectedWalletUseCase().fold(
getSelectedWalletSyncUseCase().fold(
ifRight = { userWallet ->
getAndAddCryptoCurrency(userWallet, currency, network)
},
@ -344,7 +344,7 @@ internal class SwapInteractorImpl @Inject constructor(
}
private suspend fun isAllowedToSpend(networkId: String, fromToken: Currency, amount: SwapAmount): Boolean {
return getSelectedWalletUseCase().fold(
return getSelectedWalletSyncUseCase().fold(
ifRight = { userWallet ->
val allowance = repository.getAllowance(
userWallet.walletId,
@ -737,7 +737,7 @@ internal class SwapInteractorImpl @Inject constructor(
fromToken: Currency,
swapAmount: SwapAmount? = null,
): String {
return getSelectedWalletUseCase().fold(
return getSelectedWalletSyncUseCase().fold(
ifRight = { userWallet ->
repository.getApproveData(
userWalletId = userWallet.walletId,

View file

@ -2,7 +2,7 @@ package com.tangem.feature.swap.domain.di
import com.tangem.domain.tokens.repository.CurrenciesRepository
import com.tangem.domain.wallets.legacy.WalletsStateHolder
import com.tangem.domain.wallets.usecase.GetSelectedWalletUseCase
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
import com.tangem.feature.swap.domain.*
import com.tangem.feature.swap.domain.cache.SwapDataCacheImpl
import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles
@ -27,7 +27,7 @@ class SwapDomainModule {
transactionManager: TransactionManager,
currenciesRepository: CurrenciesRepository,
walletFeatureToggles: WalletFeatureToggles,
@SwapScope getSelectedWalletUseCase: GetSelectedWalletUseCase,
@SwapScope getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
): SwapInteractor {
return SwapInteractorImpl(
transactionManager = transactionManager,
@ -37,7 +37,7 @@ class SwapDomainModule {
allowPermissionsHandler = AllowPermissionsHandlerImpl(),
currenciesRepository = currenciesRepository,
walletFeatureToggles = walletFeatureToggles,
getSelectedWalletUseCase = getSelectedWalletUseCase,
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
)
}
@ -52,8 +52,8 @@ class SwapDomainModule {
@SwapScope
@Provides
@Singleton
fun providesGetSelectedWalletUseCase(walletsStateHolder: WalletsStateHolder): GetSelectedWalletUseCase {
return GetSelectedWalletUseCase(walletsStateHolder = walletsStateHolder)
fun providesGetSelectedWalletUseCase(walletsStateHolder: WalletsStateHolder): GetSelectedWalletSyncUseCase {
return GetSelectedWalletSyncUseCase(walletsStateHolder = walletsStateHolder)
}
}

View file

@ -91,7 +91,7 @@ internal class WalletViewModel @Inject constructor(
// region Parameters
private val getWalletsUseCase: GetWalletsUseCase,
private val saveWalletUseCase: SaveWalletUseCase,
getSelectedWalletUseCase: GetSelectedWalletUseCase,
getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
private val selectWalletUseCase: SelectWalletUseCase,
private val updateWalletUseCase: UpdateWalletUseCase,
private val deleteWalletUseCase: DeleteWalletUseCase,
@ -181,7 +181,7 @@ internal class WalletViewModel @Inject constructor(
private val walletsUpdateActionResolver = WalletsUpdateActionResolver(
currentStateProvider = Provider { uiState },
getSelectedWalletUseCase = getSelectedWalletUseCase,
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
)
override fun onCreate(owner: LifecycleOwner) {

View file

@ -3,7 +3,7 @@ package com.tangem.feature.wallet.presentation.wallet.viewmodels
import com.tangem.common.Provider
import com.tangem.domain.wallets.models.UserWallet
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.domain.wallets.usecase.GetSelectedWalletUseCase
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
import com.tangem.feature.wallet.presentation.wallet.domain.getCardsCount
import com.tangem.feature.wallet.presentation.wallet.state.WalletLockedState
import com.tangem.feature.wallet.presentation.wallet.state.WalletState
@ -12,12 +12,12 @@ import com.tangem.feature.wallet.presentation.wallet.state.components.WalletCard
/**
* Resolver that determines which update action will be performed
*
* @property currentStateProvider current state provider
* @property getSelectedWalletUseCase use case that returns selected wallet
* @property currentStateProvider current state provider
* @property getSelectedWalletSyncUseCase use case that returns selected wallet
*/
internal class WalletsUpdateActionResolver(
private val currentStateProvider: Provider<WalletState>,
private val getSelectedWalletUseCase: GetSelectedWalletUseCase,
private val getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
) {
fun resolve(wallets: List<UserWallet>): Action {
@ -38,7 +38,7 @@ internal class WalletsUpdateActionResolver(
private fun List<UserWallet>.getSelectedWallet(): UserWallet {
val hasUnlockedWallet = any { !it.isLocked }
return if (hasUnlockedWallet) {
val selectedWalletId = getSelectedWalletUseCase().fold(ifLeft = ::error, ifRight = UserWallet::walletId)
val selectedWalletId = getSelectedWalletSyncUseCase().fold(ifLeft = ::error, ifRight = UserWallet::walletId)
firstOrNull { it.walletId == selectedWalletId }
?: error("Wallets don't contain a wallet with id: $selectedWalletId")