Updated on 2026-08-14

This commit is contained in:
Tangem 2025-10-29 16:09:39 +04:00
parent 211507774f
commit 60d2ba7a38
6 changed files with 72 additions and 12 deletions

View file

@ -1,11 +1,9 @@
package com.tangem.domain.account.status.di
import com.tangem.domain.account.repository.AccountsCRUDRepository
import com.tangem.domain.account.status.supplier.MultiAccountStatusListSupplier
import com.tangem.domain.account.status.supplier.SingleAccountStatusListSupplier
import com.tangem.domain.account.status.usecase.GetAccountCurrencyByAddressUseCase
import com.tangem.domain.account.status.usecase.GetAccountCurrencyStatusUseCase
import com.tangem.domain.account.status.usecase.GetCryptoCurrencyActionsUseCaseV2
import com.tangem.domain.account.status.usecase.ManageCryptoCurrenciesUseCase
import com.tangem.domain.account.status.usecase.*
import com.tangem.domain.account.status.utils.CryptoCurrencyBalanceFetcher
import com.tangem.domain.account.supplier.SingleAccountListSupplier
import com.tangem.domain.common.wallets.UserWalletsListRepository
@ -61,6 +59,16 @@ internal object AccountStatusUseCaseModule {
)
}
@Provides
@Singleton
fun provideGetWalletTotalBalanceUseCaseV2(
multiAccountStatusListSupplier: MultiAccountStatusListSupplier,
): GetWalletTotalBalanceUseCaseV2 {
return GetWalletTotalBalanceUseCaseV2(
multiAccountStatusListSupplier = multiAccountStatusListSupplier,
)
}
@Provides
@Singleton
fun provideGetAccountCurrencyStatusUseCase(

View file

@ -3,6 +3,7 @@ package com.tangem.domain.account.status.supplier
import com.tangem.domain.account.models.AccountStatusList
import com.tangem.domain.account.status.producer.MultiAccountStatusListProducer
import com.tangem.domain.core.flow.FlowCachingSupplier
import kotlinx.coroutines.flow.Flow
/**
* Supplier that provides a list of [AccountStatusList]s for all user wallets.
@ -12,4 +13,9 @@ import com.tangem.domain.core.flow.FlowCachingSupplier
abstract class MultiAccountStatusListSupplier(
override val factory: MultiAccountStatusListProducer.Factory,
override val keyCreator: (Unit) -> String,
) : FlowCachingSupplier<MultiAccountStatusListProducer, Unit, List<AccountStatusList>>()
) : FlowCachingSupplier<MultiAccountStatusListProducer, Unit, List<AccountStatusList>>() {
operator fun invoke(): Flow<List<AccountStatusList>> {
return super.invoke(params = Unit)
}
}

View file

@ -0,0 +1,36 @@
package com.tangem.domain.account.status.usecase
import com.tangem.domain.account.status.supplier.MultiAccountStatusListSupplier
import com.tangem.domain.core.lce.LceFlow
import com.tangem.domain.core.utils.lceContent
import com.tangem.domain.models.TotalFiatBalance
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.tokens.error.TokenListError
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
/**
* Use case to get total fiat balances for multiple user wallets.
* It's second version of the use case that will replace the previous one after accounts feature released.
*
* @param multiAccountStatusListSupplier Supplier that provides the status list for multiple accounts.
*/
class GetWalletTotalBalanceUseCaseV2(
private val multiAccountStatusListSupplier: MultiAccountStatusListSupplier,
) {
operator fun invoke(
userWalletIds: Collection<UserWalletId>,
): LceFlow<TokenListError, Map<UserWalletId, TotalFiatBalance>> {
return multiAccountStatusListSupplier()
.map { accountStatusLists ->
accountStatusLists
.filter { it.userWalletId in userWalletIds }
.associate {
it.userWalletId to it.totalFiatBalance
}
.lceContent()
}
.distinctUntilChanged()
}
}