From 0d63a74f752e6a10b795e368e4c2421297025f90 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 19 Jun 2025 15:08:55 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/di/domain/ManageTokensDomainModule.kt | 6 +- .../CreateCryptoCurrencyUseCase.kt | 65 +++++++++++++++++++ .../managetokens/CreateCurrencyUseCase.kt | 26 -------- .../utils/CustomCurrencyValidator.kt | 6 +- 4 files changed, 72 insertions(+), 31 deletions(-) create mode 100644 domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/CreateCryptoCurrencyUseCase.kt delete mode 100644 domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/CreateCurrencyUseCase.kt diff --git a/app/src/main/java/com/tangem/tap/di/domain/ManageTokensDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/ManageTokensDomainModule.kt index a10bcc05e1..38eae7aec7 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/ManageTokensDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/ManageTokensDomainModule.kt @@ -36,8 +36,10 @@ internal object ManageTokensDomainModule { @Provides @Singleton - fun provideCreateCurrencyUseCase(customTokensRepository: CustomTokensRepository): CreateCurrencyUseCase { - return CreateCurrencyUseCase(customTokensRepository) + fun provideCreateCryptoCurrencyUseCase( + customTokensRepository: CustomTokensRepository, + ): CreateCryptoCurrencyUseCase { + return CreateCryptoCurrencyUseCase(customTokensRepository) } @Provides diff --git a/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/CreateCryptoCurrencyUseCase.kt b/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/CreateCryptoCurrencyUseCase.kt new file mode 100644 index 0000000000..7cdb98ba3d --- /dev/null +++ b/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/CreateCryptoCurrencyUseCase.kt @@ -0,0 +1,65 @@ +package com.tangem.domain.managetokens + +import arrow.core.Either +import com.tangem.domain.managetokens.model.AddCustomTokenForm +import com.tangem.domain.managetokens.model.ManagedCryptoCurrency +import com.tangem.domain.managetokens.repository.CustomTokensRepository +import com.tangem.domain.models.currency.CryptoCurrency +import com.tangem.domain.models.network.Network +import com.tangem.domain.wallets.models.UserWalletId + +/** + * Creates cryptocurrency from manage token + */ +class CreateCryptoCurrencyUseCase( + private val customTokensRepository: CustomTokensRepository, +) { + + /** + * Creates currency from default crypto currency + * + * @param token supported crypto currency info + * @param userWalletId selected user wallet id + */ + suspend operator fun invoke( + token: ManagedCryptoCurrency.Token, + userWalletId: UserWalletId, + ): Either> = Either.catch { + token.availableNetworks + .map { sourceNetwork -> + when (sourceNetwork) { + is ManagedCryptoCurrency.SourceNetwork.Default -> customTokensRepository.createToken( + managedCryptoCurrency = token, + sourceNetwork = sourceNetwork, + rawId = CryptoCurrency.RawID(token.id.value), + ) + is ManagedCryptoCurrency.SourceNetwork.Main -> customTokensRepository.createCoin( + userWalletId = userWalletId, + networkId = sourceNetwork.id, + derivationPath = sourceNetwork.network.derivationPath, + ) + } + } + } + + /** + * Creates currency from custom crypto currency + * + * @param userWalletId selected user wallet id + * @param networkId currency network id + * @param derivationPath custom derivation path + * @param formValues token info (e.i. name, contract address, symbol, decimals) + */ + suspend operator fun invoke( + userWalletId: UserWalletId, + networkId: Network.ID, + derivationPath: Network.DerivationPath, + formValues: AddCustomTokenForm.Validated.All?, + ): Either = Either.catch { + if (formValues == null) { + customTokensRepository.createCoin(userWalletId, networkId, derivationPath) + } else { + customTokensRepository.createCustomToken(userWalletId, networkId, derivationPath, formValues) + } + } +} \ No newline at end of file diff --git a/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/CreateCurrencyUseCase.kt b/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/CreateCurrencyUseCase.kt deleted file mode 100644 index 5e8438b839..0000000000 --- a/domain/manage-tokens/src/main/kotlin/com/tangem/domain/managetokens/CreateCurrencyUseCase.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.tangem.domain.managetokens - -import arrow.core.Either -import com.tangem.domain.managetokens.model.AddCustomTokenForm -import com.tangem.domain.managetokens.repository.CustomTokensRepository -import com.tangem.domain.models.currency.CryptoCurrency -import com.tangem.domain.models.network.Network -import com.tangem.domain.wallets.models.UserWalletId - -class CreateCurrencyUseCase( - private val repository: CustomTokensRepository, -) { - - suspend operator fun invoke( - userWalletId: UserWalletId, - networkId: Network.ID, - derivationPath: Network.DerivationPath, - formValues: AddCustomTokenForm.Validated.All?, - ): Either = Either.catch { - if (formValues == null) { - repository.createCoin(userWalletId, networkId, derivationPath) - } else { - repository.createCustomToken(userWalletId, networkId, derivationPath, formValues) - } - } -} \ No newline at end of file diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/CustomCurrencyValidator.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/CustomCurrencyValidator.kt index 1bdbfd739b..01b8c9cb51 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/CustomCurrencyValidator.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/CustomCurrencyValidator.kt @@ -3,7 +3,7 @@ package com.tangem.features.managetokens.utils import arrow.core.getOrElse import com.tangem.core.decompose.di.ModelScoped import com.tangem.domain.managetokens.CheckIsCurrencyNotAddedUseCase -import com.tangem.domain.managetokens.CreateCurrencyUseCase +import com.tangem.domain.managetokens.CreateCryptoCurrencyUseCase import com.tangem.domain.managetokens.FindTokenUseCase import com.tangem.domain.managetokens.ValidateTokenFormUseCase import com.tangem.domain.managetokens.model.AddCustomTokenForm @@ -23,7 +23,7 @@ import javax.inject.Inject @ModelScoped internal class CustomCurrencyValidator @Inject constructor( private val validateTokenFormUseCase: ValidateTokenFormUseCase, - private val createCustomCurrencyUseCase: CreateCurrencyUseCase, + private val createCryptoCurrencyUseCase: CreateCryptoCurrencyUseCase, private val findTokenUseCase: FindTokenUseCase, private val checkIsCurrencyNotAddedUseCase: CheckIsCurrencyNotAddedUseCase, ) { @@ -164,7 +164,7 @@ internal class CustomCurrencyValidator @Inject constructor( derivationPath: Network.DerivationPath, validatedForm: AddCustomTokenForm.Validated.All?, ) { - val currency = createCustomCurrencyUseCase( + val currency = createCryptoCurrencyUseCase( userWalletId = userWalletId, networkId = networkId, derivationPath = derivationPath,