Updated on 2026-08-14
This commit is contained in:
parent
8b566c31ae
commit
1b8eece376
27 changed files with 87 additions and 185 deletions
|
|
@ -1,16 +0,0 @@
|
|||
package com.tangem.domain.wallets.legacy
|
||||
|
||||
import arrow.core.raise.Raise
|
||||
import arrow.core.raise.ensureNotNull
|
||||
|
||||
internal inline fun <Error> Raise<Error>.ensureUserWalletListManagerNotNull(
|
||||
walletsStateHolder: WalletsStateHolder,
|
||||
raise: (Throwable) -> Error,
|
||||
): UserWalletsListManager {
|
||||
return ensureNotNull(
|
||||
value = walletsStateHolder.userWalletsListManager,
|
||||
raise = {
|
||||
raise(IllegalStateException("User wallets list manager not initialized"))
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
package com.tangem.domain.wallets.legacy
|
||||
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
// TODO: will be remove in this task [REDACTED_JIRA]
|
||||
@Deprecated(message = "Provide UserWalletsListManager using DI", level = DeprecationLevel.WARNING)
|
||||
interface WalletsStateHolder {
|
||||
|
||||
val userWalletsListManager: UserWalletsListManager?
|
||||
|
||||
val userWalletListManagerFlow: Flow<UserWalletsListManager?>
|
||||
}
|
||||
|
|
@ -2,7 +2,5 @@ package com.tangem.domain.wallets.models
|
|||
|
||||
sealed interface DeleteWalletError {
|
||||
|
||||
object DataError : DeleteWalletError
|
||||
|
||||
object UnableToDelete : DeleteWalletError
|
||||
data object UnableToDelete : DeleteWalletError
|
||||
}
|
||||
|
|
@ -2,7 +2,5 @@ package com.tangem.domain.wallets.models
|
|||
|
||||
sealed class GetUserWalletError {
|
||||
|
||||
data class DataError(val cause: Throwable) : GetUserWalletError()
|
||||
|
||||
object UserWalletNotFound : GetUserWalletError()
|
||||
data object UserWalletNotFound : GetUserWalletError()
|
||||
}
|
||||
|
|
@ -2,7 +2,5 @@ package com.tangem.domain.wallets.models
|
|||
|
||||
sealed interface SelectWalletError {
|
||||
|
||||
object DataError : SelectWalletError
|
||||
|
||||
object UnableToSelectUserWallet : SelectWalletError
|
||||
}
|
||||
|
|
@ -6,27 +6,21 @@ import arrow.core.raise.either
|
|||
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.legacy.ensureUserWalletListManagerNotNull
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||
import com.tangem.domain.wallets.models.DeleteWalletError
|
||||
import com.tangem.domain.wallets.models.UserWalletId
|
||||
|
||||
/**
|
||||
* Use case for updating user wallet
|
||||
*
|
||||
* @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager'
|
||||
* @property userWalletsListManager user wallets list manager
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
class DeleteWalletUseCase(private val walletsStateHolder: WalletsStateHolder) {
|
||||
class DeleteWalletUseCase(private val userWalletsListManager: UserWalletsListManager) {
|
||||
|
||||
suspend operator fun invoke(userWalletId: UserWalletId): Either<DeleteWalletError, Unit> {
|
||||
return either {
|
||||
val userWalletsListManager = ensureUserWalletListManagerNotNull(
|
||||
walletsStateHolder = walletsStateHolder,
|
||||
raise = { DeleteWalletError.DataError },
|
||||
)
|
||||
|
||||
userWalletsListManager.delete(userWalletIds = listOf(userWalletId))
|
||||
.doOnSuccess { return Unit.right() }
|
||||
.doOnFailure { return DeleteWalletError.UnableToDelete.left() }
|
||||
|
|
|
|||
|
|
@ -3,8 +3,7 @@ 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.legacy.ensureUserWalletListManagerNotNull
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||
import com.tangem.domain.wallets.models.GetUserWalletError
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
|
||||
|
|
@ -12,19 +11,14 @@ import com.tangem.domain.wallets.models.UserWallet
|
|||
* Use case for getting selected wallet.
|
||||
* Important! If all wallets is locked, use case returns a error.
|
||||
*
|
||||
* @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager'
|
||||
* @property userWalletsListManager user wallets list manager
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
class GetSelectedWalletSyncUseCase(private val walletsStateHolder: WalletsStateHolder) {
|
||||
class GetSelectedWalletSyncUseCase(private val userWalletsListManager: UserWalletsListManager) {
|
||||
|
||||
operator fun invoke(): Either<GetUserWalletError, UserWallet> {
|
||||
return either {
|
||||
val userWalletsListManager = ensureUserWalletListManagerNotNull(
|
||||
walletsStateHolder = walletsStateHolder,
|
||||
raise = GetUserWalletError::DataError,
|
||||
)
|
||||
|
||||
ensureNotNull(
|
||||
value = userWalletsListManager.selectedUserWalletSync,
|
||||
raise = { GetUserWalletError.UserWalletNotFound },
|
||||
|
|
|
|||
|
|
@ -2,8 +2,7 @@ package com.tangem.domain.wallets.usecase
|
|||
|
||||
import arrow.core.Either
|
||||
import arrow.core.raise.either
|
||||
import com.tangem.domain.wallets.legacy.WalletsStateHolder
|
||||
import com.tangem.domain.wallets.legacy.ensureUserWalletListManagerNotNull
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||
import com.tangem.domain.wallets.models.GetUserWalletError
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
|
@ -11,19 +10,14 @@ import kotlinx.coroutines.flow.Flow
|
|||
/**
|
||||
* Use case for getting flow of selected wallet.
|
||||
*
|
||||
* @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager'
|
||||
* @property userWalletsListManager user wallets list manager
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
class GetSelectedWalletUseCase(private val walletsStateHolder: WalletsStateHolder) {
|
||||
class GetSelectedWalletUseCase(private val userWalletsListManager: UserWalletsListManager) {
|
||||
|
||||
operator fun invoke(): Either<GetUserWalletError, Flow<UserWallet>> {
|
||||
return either {
|
||||
val userWalletsListManager = ensureUserWalletListManagerNotNull(
|
||||
walletsStateHolder = walletsStateHolder,
|
||||
raise = GetUserWalletError::DataError,
|
||||
)
|
||||
|
||||
userWalletsListManager.selectedUserWallet
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,21 +3,15 @@ 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.legacy.ensureUserWalletListManagerNotNull
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||
import com.tangem.domain.wallets.models.GetUserWalletError
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
import com.tangem.domain.wallets.models.UserWalletId
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
|
||||
class GetUserWalletUseCase(private val walletsStateHolder: WalletsStateHolder) {
|
||||
class GetUserWalletUseCase(private val userWalletsListManager: UserWalletsListManager) {
|
||||
|
||||
suspend operator fun invoke(userWalletId: UserWalletId): Either<GetUserWalletError, UserWallet> = either {
|
||||
val userWalletsListManager = ensureUserWalletListManagerNotNull(
|
||||
walletsStateHolder = walletsStateHolder,
|
||||
raise = GetUserWalletError::DataError,
|
||||
)
|
||||
|
||||
val userWallets = userWalletsListManager.userWallets.firstOrNull().orEmpty()
|
||||
|
||||
ensureNotNull(userWallets.firstOrNull { it.walletId == userWalletId }) {
|
||||
|
|
|
|||
|
|
@ -1,20 +1,18 @@
|
|||
package com.tangem.domain.wallets.usecase
|
||||
|
||||
import com.tangem.domain.wallets.legacy.WalletsStateHolder
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
/**
|
||||
* Use case for getting list of user wallets
|
||||
*
|
||||
* @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager'
|
||||
* @property userWalletsListManager user wallets list manager
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
class GetWalletsUseCase(private val walletsStateHolder: WalletsStateHolder) {
|
||||
class GetWalletsUseCase(private val userWalletsListManager: UserWalletsListManager) {
|
||||
|
||||
@Throws(IllegalArgumentException::class)
|
||||
operator fun invoke(): Flow<List<UserWallet>> {
|
||||
return requireNotNull(walletsStateHolder.userWalletsListManager).userWallets
|
||||
}
|
||||
operator fun invoke(): Flow<List<UserWallet>> = userWalletsListManager.userWallets
|
||||
}
|
||||
|
|
@ -1,19 +1,19 @@
|
|||
package com.tangem.domain.wallets.usecase
|
||||
|
||||
import com.tangem.domain.models.scan.CardDTO
|
||||
import com.tangem.domain.wallets.legacy.WalletsStateHolder
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||
import com.tangem.domain.wallets.models.UserWalletId
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
||||
/**
|
||||
* Use case that checks if wallet need backup cards
|
||||
*
|
||||
* @property userWalletsListManager user wallets list manager
|
||||
*/
|
||||
class IsNeedToBackupUseCase(private val walletsStateHolder: WalletsStateHolder) {
|
||||
class IsNeedToBackupUseCase(private val userWalletsListManager: UserWalletsListManager) {
|
||||
|
||||
operator fun invoke(id: UserWalletId): Flow<Boolean> {
|
||||
val userWalletsListManager = requireNotNull(walletsStateHolder.userWalletsListManager)
|
||||
|
||||
return userWalletsListManager.userWallets
|
||||
.map { wallets ->
|
||||
val wallet = wallets.firstOrNull { it.walletId == id }
|
||||
|
|
|
|||
|
|
@ -7,27 +7,21 @@ import arrow.core.right
|
|||
import com.tangem.common.doOnFailure
|
||||
import com.tangem.common.doOnSuccess
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListError
|
||||
import com.tangem.domain.wallets.legacy.WalletsStateHolder
|
||||
import com.tangem.domain.wallets.legacy.ensureUserWalletListManagerNotNull
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||
import com.tangem.domain.wallets.models.SaveWalletError
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
|
||||
/**
|
||||
* Use case for saving user wallet
|
||||
*
|
||||
* @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager'
|
||||
* @property userWalletsListManager user wallets list manager
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
class SaveWalletUseCase(private val walletsStateHolder: WalletsStateHolder) {
|
||||
class SaveWalletUseCase(private val userWalletsListManager: UserWalletsListManager) {
|
||||
|
||||
suspend operator fun invoke(userWallet: UserWallet, canOverride: Boolean = false): Either<SaveWalletError, Unit> {
|
||||
return either {
|
||||
val userWalletsListManager = ensureUserWalletListManagerNotNull(
|
||||
walletsStateHolder = walletsStateHolder,
|
||||
raise = { SaveWalletError.DataError },
|
||||
)
|
||||
|
||||
userWalletsListManager.save(userWallet, canOverride)
|
||||
.doOnSuccess { return Unit.right() }
|
||||
.doOnFailure {
|
||||
|
|
|
|||
|
|
@ -5,8 +5,7 @@ import arrow.core.raise.either
|
|||
import arrow.core.right
|
||||
import com.tangem.common.CompletionResult
|
||||
import com.tangem.domain.redux.ReduxStateHolder
|
||||
import com.tangem.domain.wallets.legacy.WalletsStateHolder
|
||||
import com.tangem.domain.wallets.legacy.ensureUserWalletListManagerNotNull
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||
import com.tangem.domain.wallets.models.SelectWalletError
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
import com.tangem.domain.wallets.models.UserWalletId
|
||||
|
|
@ -14,22 +13,18 @@ import com.tangem.domain.wallets.models.UserWalletId
|
|||
/**
|
||||
* Use case for selecting wallet
|
||||
*
|
||||
* @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager'
|
||||
* @property userWalletsListManager user wallets list manager
|
||||
* @property reduxStateHolder redux state holder
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
class SelectWalletUseCase(
|
||||
private val walletsStateHolder: WalletsStateHolder,
|
||||
private val userWalletsListManager: UserWalletsListManager,
|
||||
private val reduxStateHolder: ReduxStateHolder,
|
||||
) {
|
||||
|
||||
suspend operator fun invoke(userWalletId: UserWalletId): Either<SelectWalletError, UserWallet> {
|
||||
return either {
|
||||
val userWalletsListManager = ensureUserWalletListManagerNotNull(
|
||||
walletsStateHolder = walletsStateHolder,
|
||||
raise = { SelectWalletError.DataError },
|
||||
)
|
||||
|
||||
return when (val result = userWalletsListManager.select(userWalletId)) {
|
||||
is CompletionResult.Failure -> raise(SelectWalletError.UnableToSelectUserWallet)
|
||||
is CompletionResult.Success -> {
|
||||
|
|
|
|||
|
|
@ -5,23 +5,23 @@ import arrow.core.raise.either
|
|||
import arrow.core.raise.ensureNotNull
|
||||
import com.tangem.common.doOnFailure
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListError
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager.Lockable.UnlockType
|
||||
import com.tangem.domain.wallets.legacy.WalletsStateHolder
|
||||
import com.tangem.domain.wallets.legacy.asLockable
|
||||
import com.tangem.domain.wallets.models.UnlockWalletsError
|
||||
|
||||
/**
|
||||
* Unlock wallets use case
|
||||
*
|
||||
* @property walletsStateHolder wallets state holder
|
||||
* @property userWalletsListManager user wallets list manager
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
class UnlockWalletsUseCase(private val walletsStateHolder: WalletsStateHolder) {
|
||||
class UnlockWalletsUseCase(private val userWalletsListManager: UserWalletsListManager) {
|
||||
|
||||
suspend operator fun invoke(type: UnlockType = UnlockType.ANY): Either<UnlockWalletsError, Unit> = either {
|
||||
val userWalletsListManager = ensureNotNull(
|
||||
value = walletsStateHolder.userWalletsListManager?.asLockable(),
|
||||
value = userWalletsListManager.asLockable(),
|
||||
raise = {
|
||||
UnlockWalletsError.DataError(
|
||||
cause = IllegalStateException("The lockable user wallets list manager could not be found"),
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@ import arrow.core.raise.either
|
|||
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.legacy.ensureUserWalletListManagerNotNull
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||
import com.tangem.domain.wallets.models.UpdateWalletError
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
import com.tangem.domain.wallets.models.UserWalletId
|
||||
|
|
@ -15,22 +14,17 @@ import com.tangem.domain.wallets.models.UserWalletId
|
|||
/**
|
||||
* Use case for updating user wallet
|
||||
*
|
||||
* @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager'
|
||||
* @property userWalletsListManager user wallets list manager
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
class UpdateWalletUseCase(private val walletsStateHolder: WalletsStateHolder) {
|
||||
class UpdateWalletUseCase(private val userWalletsListManager: UserWalletsListManager) {
|
||||
|
||||
suspend operator fun invoke(
|
||||
userWalletId: UserWalletId,
|
||||
update: suspend (UserWallet) -> UserWallet,
|
||||
): Either<UpdateWalletError, UserWallet> {
|
||||
return either {
|
||||
val userWalletsListManager = ensureUserWalletListManagerNotNull(
|
||||
walletsStateHolder = walletsStateHolder,
|
||||
raise = { UpdateWalletError.DataError },
|
||||
)
|
||||
|
||||
userWalletsListManager.update(userWalletId, update)
|
||||
.doOnSuccess { return it.right() }
|
||||
.doOnFailure { return UpdateWalletError.DataError.left() }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue