Updated on 2026-08-14
This commit is contained in:
parent
182aa24095
commit
94a9b132a2
23 changed files with 458 additions and 60 deletions
|
|
@ -1,9 +0,0 @@
|
|||
package com.tangem.domain.dynamicaddresses.model
|
||||
|
||||
import java.math.BigDecimal
|
||||
|
||||
data class ConsolidationInfo(
|
||||
val fee: BigDecimal,
|
||||
val inputCount: Int,
|
||||
val canCoverFee: Boolean,
|
||||
)
|
||||
|
|
@ -1,16 +1,16 @@
|
|||
package com.tangem.domain.dynamicaddresses
|
||||
|
||||
import arrow.core.Either
|
||||
import com.tangem.domain.dynamicaddresses.model.ConsolidationInfo
|
||||
import com.tangem.blockchain.common.TransactionData
|
||||
import com.tangem.domain.dynamicaddresses.repository.ConsolidationRepository
|
||||
import com.tangem.domain.models.network.Network
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
|
||||
class GetConsolidationInfoUseCase(
|
||||
class CreateConsolidationTransactionUseCase(
|
||||
private val consolidationRepository: ConsolidationRepository,
|
||||
) {
|
||||
|
||||
suspend operator fun invoke(userWalletId: UserWalletId, network: Network): Either<Throwable, ConsolidationInfo> {
|
||||
return consolidationRepository.getConsolidationInfo(userWalletId, network)
|
||||
suspend operator fun invoke(userWalletId: UserWalletId, network: Network): Either<Throwable, TransactionData> {
|
||||
return consolidationRepository.createConsolidationTransaction(userWalletId, network)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,33 +1,27 @@
|
|||
package com.tangem.domain.dynamicaddresses
|
||||
|
||||
import arrow.core.Either
|
||||
import arrow.core.getOrElse
|
||||
import arrow.core.raise.either
|
||||
import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository
|
||||
import com.tangem.domain.models.network.Network
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import com.tangem.domain.dynamicaddresses.model.ConsolidationInfo
|
||||
import com.tangem.domain.dynamicaddresses.repository.ConsolidationRepository
|
||||
import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository
|
||||
|
||||
class DisableDynamicAddressesUseCase(
|
||||
private val dynamicAddressesRepository: DynamicAddressesRepository,
|
||||
private val consolidationRepository: ConsolidationRepository,
|
||||
) {
|
||||
|
||||
/**
|
||||
* Returns [ConsolidationInfo] when consolidation is required before disabling,
|
||||
* or null when DA can be disabled immediately (no non-base balances).
|
||||
* Returns true when consolidation is required before disabling (non-base balances exist),
|
||||
* or false when DA was disabled immediately.
|
||||
*/
|
||||
suspend operator fun invoke(userWalletId: UserWalletId, network: Network): Either<Throwable, ConsolidationInfo?> =
|
||||
either {
|
||||
suspend operator fun invoke(userWalletId: UserWalletId, network: Network): Either<Throwable, Boolean> =
|
||||
Either.catch {
|
||||
val hasNonBaseBalances = dynamicAddressesRepository.hasNonBaseBalances(userWalletId, network)
|
||||
|
||||
if (!hasNonBaseBalances) {
|
||||
dynamicAddressesRepository.disable(userWalletId, network)
|
||||
return@either null
|
||||
return@catch false
|
||||
}
|
||||
|
||||
consolidationRepository.getConsolidationInfo(userWalletId, network)
|
||||
.getOrElse { raise(it) }
|
||||
true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +1,14 @@
|
|||
package com.tangem.domain.dynamicaddresses.repository
|
||||
|
||||
import arrow.core.Either
|
||||
import com.tangem.blockchain.common.TransactionSigner
|
||||
import com.tangem.domain.dynamicaddresses.model.ConsolidationInfo
|
||||
import com.tangem.blockchain.common.TransactionData
|
||||
import com.tangem.domain.models.network.Network
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
|
||||
interface ConsolidationRepository {
|
||||
|
||||
suspend fun getConsolidationInfo(
|
||||
suspend fun createConsolidationTransaction(
|
||||
userWalletId: UserWalletId,
|
||||
network: Network,
|
||||
): Either<Throwable, ConsolidationInfo>
|
||||
|
||||
suspend fun sendConsolidationTransaction(
|
||||
userWalletId: UserWalletId,
|
||||
network: Network,
|
||||
signer: TransactionSigner,
|
||||
): Either<Throwable, String>
|
||||
): Either<Throwable, TransactionData>
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue