From e592b59734f5e88575770a9288b28f21be3f7db2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 7 Oct 2024 16:49:15 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../InvalidatePendingTransactionsUseCase.kt | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt b/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt index 3ed9de1336..bdc4d9565f 100644 --- a/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt +++ b/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt @@ -9,6 +9,7 @@ import com.tangem.domain.staking.repositories.StakingErrorResolver import com.tangem.domain.staking.repositories.StakingPendingTransactionRepository import com.tangem.domain.wallets.models.UserWalletId import org.joda.time.DateTime +import java.math.BigDecimal import java.util.UUID class InvalidatePendingTransactionsUseCase( @@ -41,12 +42,13 @@ class InvalidatePendingTransactionsUseCase( newBalancesId: Int, pendingData: List>, ): Pair, List> { - val balances = realData.associateBy { Pair(it.groupId to it.type, it.amount to it.date) }.toMutableMap() + val balances = realData.associateBy { BalanceIdentity(it.groupId, it.type, it.amount, it.date) } + .toMutableMap() val transactionsToRemove = mutableListOf() pendingData.forEach { (pendingTransaction, balanceItem) -> - val key = Pair(balanceItem.groupId to balanceItem.type, balanceItem.amount to balanceItem.date) + val key = BalanceIdentity(balanceItem.groupId, balanceItem.type, balanceItem.amount, balanceItem.date) val oldBalancesId = pendingTransaction.balancesId when { @@ -59,20 +61,36 @@ class InvalidatePendingTransactionsUseCase( else -> { val groupId = UUID.randomUUID().toString() val now = DateTime.now() - balances[Pair(groupId to BalanceType.STAKED, pendingTransaction.amount to now)] = BalanceItem( - groupId = groupId, - type = pendingTransaction.type, - amount = pendingTransaction.amount, - rawCurrencyId = pendingTransaction.rawCurrencyId, - validatorAddress = pendingTransaction.validator?.address, - date = null, - pendingActions = emptyList(), - isPending = true, - ) + balances[BalanceIdentity(groupId, BalanceType.STAKED, pendingTransaction.amount, now)] = + BalanceItem( + groupId = groupId, + type = pendingTransaction.type, + amount = pendingTransaction.amount, + rawCurrencyId = pendingTransaction.rawCurrencyId, + validatorAddress = pendingTransaction.validator?.address, + date = null, + pendingActions = emptyList(), + isPending = true, + ) + + balances.entries.find { + it.key.type == BalanceType.STAKED && + it.key.amount == pendingTransaction.amount && + !it.value.isPending + } + ?.key + ?.let { balances.remove(it) } } } } return balances.values.toList() to transactionsToRemove } + + private data class BalanceIdentity( + val groupId: String, + val type: BalanceType, + val amount: BigDecimal, + val date: DateTime?, + ) } \ No newline at end of file