From e18a797afc605c1143bb97e7d9cfd440eac29997 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 18 Oct 2024 13:51:30 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../InvalidatePendingTransactionsUseCase.kt | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 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 6dd0f53745..2c07ae8ea0 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 @@ -42,7 +42,8 @@ class InvalidatePendingTransactionsUseCase( newBalancesId: Int, pendingData: List>, ): Pair, List> { - val balances = realData.associateBy { BalanceIdentity(it.groupId, it.type, it.amount, it.date) } + val balances = realData.groupBy { BalanceIdentity(it.groupId, it.type, it.amount, it.date) } + .mapValues { it.value.toMutableList() } .toMutableMap() val transactionsToRemove = mutableListOf() @@ -56,28 +57,34 @@ class InvalidatePendingTransactionsUseCase( transactionsToRemove.add(pendingTransaction) } balances.containsKey(key) -> { - balances[key] = balanceItem + val removed = balances[key]?.removeIf { !it.isPending } ?: false + if (removed) { + balances[key]?.add(balanceItem) + } } else -> { val groupId = UUID.randomUUID().toString() val now = DateTime.now() + 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(), - token = pendingTransaction.token, - isPending = true, + mutableListOf( + BalanceItem( + groupId = groupId, + type = pendingTransaction.type, + amount = pendingTransaction.amount, + rawCurrencyId = pendingTransaction.rawCurrencyId, + validatorAddress = pendingTransaction.validator?.address, + date = null, + pendingActions = emptyList(), + token = pendingTransaction.token, + isPending = true, + ), ) balances.entries.find { it.key.type == BalanceType.STAKED && it.key.amount == pendingTransaction.amount && - !it.value.isPending + !it.value.any { it.isPending } } ?.key ?.let { balances.remove(it) } @@ -85,7 +92,7 @@ class InvalidatePendingTransactionsUseCase( } } - return balances.values.toList() to transactionsToRemove + return balances.values.flatten() to transactionsToRemove } private data class BalanceIdentity(