From 23d73ac0fab88bdd580bba59b4df15f163236c82 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 21 Nov 2023 11:59:22 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/domain/model/TotalFiatBalance.kt | 24 ---- .../TotalFiatBalanceCalculator.kt | 24 ---- .../di/TotalFiatBalanceCalculatorProvider.kt | 8 -- .../DefaultTotalFiatBalanceCalculator.kt | 104 ------------------ 4 files changed, 160 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/domain/model/TotalFiatBalance.kt delete mode 100644 app/src/main/java/com/tangem/tap/domain/totalBalance/TotalFiatBalanceCalculator.kt delete mode 100644 app/src/main/java/com/tangem/tap/domain/totalBalance/di/TotalFiatBalanceCalculatorProvider.kt delete mode 100644 app/src/main/java/com/tangem/tap/domain/totalBalance/implementation/DefaultTotalFiatBalanceCalculator.kt diff --git a/app/src/main/java/com/tangem/tap/domain/model/TotalFiatBalance.kt b/app/src/main/java/com/tangem/tap/domain/model/TotalFiatBalance.kt deleted file mode 100644 index 0180d85435..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/model/TotalFiatBalance.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.tangem.tap.domain.model - -import java.math.BigDecimal - -/** - * Represents fiat balance of [WalletStoreModel] list - * @property amount Amount of the total balance - * */ -sealed interface TotalFiatBalance { - val amount: BigDecimal? - - object Loading : TotalFiatBalance { - override val amount: BigDecimal? = null - } - - object Failed : TotalFiatBalance { - override val amount: BigDecimal? = null - } - - data class Loaded( - override val amount: BigDecimal, - val isWarning: Boolean, - ) : TotalFiatBalance -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/totalBalance/TotalFiatBalanceCalculator.kt b/app/src/main/java/com/tangem/tap/domain/totalBalance/TotalFiatBalanceCalculator.kt deleted file mode 100644 index a011491b0e..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/totalBalance/TotalFiatBalanceCalculator.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.tangem.tap.domain.totalBalance - -import com.tangem.tap.domain.model.TotalFiatBalance -import com.tangem.tap.domain.model.WalletStoreModel - -interface TotalFiatBalanceCalculator { - - /** - * Calculate total fiat balance for list of [WalletStoreModel] - * @param walletStores List of [WalletStoreModel] to calculate fiat amount - * @param initial Initial [TotalFiatBalance] state, used when list of [WalletStoreModel] is empty - * @return [TotalFiatBalance] with state found with the [WalletStoreModel] list - * */ - suspend fun calculate(walletStores: List, initial: TotalFiatBalance): TotalFiatBalance - - /** - * Same as [TotalFiatBalanceCalculator.calculate] but returns null if list of [WalletStoreModel] is empty - * @param walletStores List of [WalletStoreModel] to calculate fiat amount - * @return [TotalFiatBalance] with state found with the [WalletStoreModel] list - * */ - suspend fun calculateOrNull(walletStores: List): TotalFiatBalance? - - companion object -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/totalBalance/di/TotalFiatBalanceCalculatorProvider.kt b/app/src/main/java/com/tangem/tap/domain/totalBalance/di/TotalFiatBalanceCalculatorProvider.kt deleted file mode 100644 index ea285cc404..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/totalBalance/di/TotalFiatBalanceCalculatorProvider.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.tangem.tap.domain.totalBalance.di - -import com.tangem.tap.domain.totalBalance.TotalFiatBalanceCalculator -import com.tangem.tap.domain.totalBalance.implementation.DefaultTotalFiatBalanceCalculator - -fun TotalFiatBalanceCalculator.Companion.provideDefaultImplementation(): TotalFiatBalanceCalculator { - return DefaultTotalFiatBalanceCalculator() -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/totalBalance/implementation/DefaultTotalFiatBalanceCalculator.kt b/app/src/main/java/com/tangem/tap/domain/totalBalance/implementation/DefaultTotalFiatBalanceCalculator.kt deleted file mode 100644 index 330561f5af..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/totalBalance/implementation/DefaultTotalFiatBalanceCalculator.kt +++ /dev/null @@ -1,104 +0,0 @@ -package com.tangem.tap.domain.totalBalance.implementation - -import com.tangem.tap.common.extensions.toFiatValue -import com.tangem.tap.domain.model.TotalFiatBalance -import com.tangem.tap.domain.model.WalletDataModel -import com.tangem.tap.domain.model.WalletStoreModel -import com.tangem.tap.domain.totalBalance.TotalFiatBalanceCalculator -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import java.math.BigDecimal - -internal class DefaultTotalFiatBalanceCalculator : TotalFiatBalanceCalculator { - override suspend fun calculate(walletStores: List, initial: TotalFiatBalance): TotalFiatBalance { - return calculateOrNull(walletStores) ?: initial - } - - override suspend fun calculateOrNull(walletStores: List): TotalFiatBalance? { - return if (walletStores.isEmpty()) { - null - } else { - withContext(Dispatchers.Default) { - val walletsData = walletStores - .asSequence() - .flatMap { it.walletsData } - - when (val status = walletsData.findStatus()) { - TotalFiatBalanceStatus.Loading -> TotalFiatBalance.Loading - TotalFiatBalanceStatus.Failed -> TotalFiatBalance.Failed - TotalFiatBalanceStatus.Warning, - TotalFiatBalanceStatus.Loaded, - -> TotalFiatBalance.Loaded( - amount = walletsData.calculateTotalFiatAmount(), - isWarning = status == TotalFiatBalanceStatus.Warning, - ) - } - } - } - } - - private fun Sequence.findStatus(): TotalFiatBalanceStatus { - return this - .mapToStatus() - .reduce { prevStatus, newStatus -> - getCurrentStatus(prevStatus, newStatus) - } - } - - private fun Sequence.mapToStatus(): Sequence { - return this.map { walletData -> - when (walletData.status) { - is WalletDataModel.VerifiedOnline, - is WalletDataModel.SameCurrencyTransactionInProgress, - is WalletDataModel.TransactionInProgress, - is WalletDataModel.NoAccount, - -> if (walletData.isWarningCase()) { - TotalFiatBalanceStatus.Warning - } else { - TotalFiatBalanceStatus.Loaded - } - is WalletDataModel.Unreachable, - is WalletDataModel.MissedDerivation, - -> TotalFiatBalanceStatus.Failed - is WalletDataModel.Loading -> TotalFiatBalanceStatus.Loading - } - } - } - - private fun Sequence.calculateTotalFiatAmount(): BigDecimal { - return this - .filterNot { it.isWarningCase() } - .map { walletData -> - walletData.fiatRate - ?.takeUnless { walletData.status.isErrorStatus } - ?.let { walletData.status.amount.toFiatValue(it) } - ?: BigDecimal.ZERO - } - .reduce { acc, value -> - acc + value - } - } - - private fun getCurrentStatus( - prevStatus: TotalFiatBalanceStatus, - newStatus: TotalFiatBalanceStatus, - ): TotalFiatBalanceStatus { - return TotalFiatBalanceStatus[minOf(prevStatus.ordinal, newStatus.ordinal)] - } - - private fun WalletDataModel.isWarningCase(): Boolean = isCustom && fiatRate == null - - private enum class TotalFiatBalanceStatus { - Loading, - Failed, - Warning, - Loaded, - ; - - companion object { - private val allValues = values() - - operator fun get(index: Int) = allValues[index] - } - } -} \ No newline at end of file