Updated on 2026-08-14

This commit is contained in:
Tangem 2023-08-09 18:44:09 +08:00
parent 3b33d4db0a
commit 2336c837cb
9 changed files with 110 additions and 4 deletions

View file

@ -0,0 +1,8 @@
package com.tangem.domain.wallets.models
sealed interface GetSelectedWalletError {
object DataError : GetSelectedWalletError
object NoUserWalletSelected : GetSelectedWalletError
}

View file

@ -0,0 +1,8 @@
package com.tangem.domain.wallets.models
sealed interface SelectWalletError {
object DataError : SelectWalletError
object UnableToSelectUserWallet : SelectWalletError
}

View file

@ -0,0 +1,32 @@
package com.tangem.domain.wallets.usecase
import arrow.core.Either
import arrow.core.raise.either
import arrow.core.raise.ensureNotNull
import com.tangem.domain.wallets.legacy.WalletsStateHolder
import com.tangem.domain.wallets.models.GetSelectedWalletError
import com.tangem.domain.wallets.models.UserWallet
/**
* Use case for getting selected wallet
*
* @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager'
*
[REDACTED_AUTHOR]
*/
class GetSelectedWalletUseCase(private val walletsStateHolder: WalletsStateHolder) {
operator fun invoke(): Either<GetSelectedWalletError, UserWallet> {
return either {
val userWalletsListManager = ensureNotNull(
value = walletsStateHolder.userWalletsListManager,
raise = { GetSelectedWalletError.DataError },
)
ensureNotNull(
value = userWalletsListManager.selectedUserWalletSync,
raise = { GetSelectedWalletError.NoUserWalletSelected },
)
}
}
}

View file

@ -0,0 +1,37 @@
package com.tangem.domain.wallets.usecase
import arrow.core.Either
import arrow.core.left
import arrow.core.raise.either
import arrow.core.raise.ensureNotNull
import arrow.core.right
import com.tangem.common.doOnFailure
import com.tangem.common.doOnSuccess
import com.tangem.domain.wallets.legacy.WalletsStateHolder
import com.tangem.domain.wallets.models.SelectWalletError
import com.tangem.domain.wallets.models.UserWalletId
/**
* Use case for selecting wallet
*
* @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager'
*
[REDACTED_AUTHOR]
*/
class SelectWalletUseCase(private val walletsStateHolder: WalletsStateHolder) {
suspend operator fun invoke(userWalletId: UserWalletId): Either<SelectWalletError, Unit> {
return either {
val userWalletsListManager = ensureNotNull(
value = walletsStateHolder.userWalletsListManager,
raise = { SelectWalletError.DataError },
)
userWalletsListManager.select(userWalletId)
.doOnSuccess { return Unit.right() }
.doOnFailure { return SelectWalletError.UnableToSelectUserWallet.left() }
return Unit.right()
}
}
}