diff --git a/domain/account/status/src/main/java/com/tangem/domain/account/status/di/AccountStatusListSupplierModule.kt b/domain/account/status/src/main/java/com/tangem/domain/account/status/di/AccountStatusListSupplierModule.kt index f71bbe7191..51b10dc806 100644 --- a/domain/account/status/src/main/java/com/tangem/domain/account/status/di/AccountStatusListSupplierModule.kt +++ b/domain/account/status/src/main/java/com/tangem/domain/account/status/di/AccountStatusListSupplierModule.kt @@ -4,10 +4,6 @@ import com.tangem.domain.account.status.producer.MultiAccountStatusListProducer import com.tangem.domain.account.status.producer.SingleAccountStatusListProducer import com.tangem.domain.account.status.supplier.MultiAccountStatusListSupplier import com.tangem.domain.account.status.supplier.SingleAccountStatusListSupplier -import com.tangem.domain.account.status.usecase.GetAccountCurrencyByAddressUseCase -import com.tangem.domain.account.supplier.SingleAccountListSupplier -import com.tangem.domain.common.wallets.UserWalletsListRepository -import com.tangem.domain.networks.multi.MultiNetworkStatusSupplier import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -39,18 +35,4 @@ internal object AccountStatusListSupplierModule { keyCreator = { "multi_account_status_list" }, ) {} } - - @Provides - @Singleton - fun provideGetAccountCurrencyByAddressUseCase( - userWalletsListRepository: UserWalletsListRepository, - multiNetworkStatusSupplier: MultiNetworkStatusSupplier, - singleAccountListSupplier: SingleAccountListSupplier, - ): GetAccountCurrencyByAddressUseCase { - return GetAccountCurrencyByAddressUseCase( - userWalletsListRepository = userWalletsListRepository, - multiNetworkStatusSupplier = multiNetworkStatusSupplier, - singleAccountListSupplier = singleAccountListSupplier, - ) - } } \ No newline at end of file diff --git a/domain/account/status/src/main/java/com/tangem/domain/account/status/di/AccountStatusUseCaseModule.kt b/domain/account/status/src/main/java/com/tangem/domain/account/status/di/AccountStatusUseCaseModule.kt new file mode 100644 index 0000000000..2e1d0ce365 --- /dev/null +++ b/domain/account/status/src/main/java/com/tangem/domain/account/status/di/AccountStatusUseCaseModule.kt @@ -0,0 +1,37 @@ +package com.tangem.domain.account.status.di + +import com.tangem.domain.account.status.usecase.GetAccountCurrencyByAddressUseCase +import com.tangem.domain.account.status.usecase.GetAccountCurrencyStatusUseCase +import com.tangem.domain.account.supplier.SingleAccountListSupplier +import com.tangem.domain.common.wallets.UserWalletsListRepository +import com.tangem.domain.networks.multi.MultiNetworkStatusSupplier +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object AccountStatusUseCaseModule { + + @Provides + @Singleton + fun provideGetAccountCurrencyByAddressUseCase( + userWalletsListRepository: UserWalletsListRepository, + multiNetworkStatusSupplier: MultiNetworkStatusSupplier, + singleAccountListSupplier: SingleAccountListSupplier, + ): GetAccountCurrencyByAddressUseCase { + return GetAccountCurrencyByAddressUseCase( + userWalletsListRepository = userWalletsListRepository, + multiNetworkStatusSupplier = multiNetworkStatusSupplier, + singleAccountListSupplier = singleAccountListSupplier, + ) + } + + @Provides + @Singleton + fun provideGetAccountCurrencyStatusUseCase(): GetAccountCurrencyStatusUseCase { + return GetAccountCurrencyStatusUseCase() + } +} \ No newline at end of file diff --git a/domain/account/status/src/main/java/com/tangem/domain/account/status/model/AccountCryptoCurrencyStatus.kt b/domain/account/status/src/main/java/com/tangem/domain/account/status/model/AccountCryptoCurrencyStatus.kt new file mode 100644 index 0000000000..221fe1d49d --- /dev/null +++ b/domain/account/status/src/main/java/com/tangem/domain/account/status/model/AccountCryptoCurrencyStatus.kt @@ -0,0 +1,20 @@ +package com.tangem.domain.account.status.model + +import com.tangem.domain.models.account.Account +import com.tangem.domain.models.currency.CryptoCurrencyStatus +import kotlinx.serialization.Serializable + +/** + * Combines an [Account] with its corresponding [CryptoCurrencyStatus]. + * + * This data class is useful for representing the relationship between an account and the cryptocurrency it holds. + * +[REDACTED_AUTHOR] + */ +@Serializable +data class AccountCryptoCurrencyStatus(val account: Account.CryptoPortfolio, val status: CryptoCurrencyStatus) { + + init { + require(account.cryptoCurrencies.contains(status.currency)) + } +} \ No newline at end of file diff --git a/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetAccountCurrencyStatusUseCase.kt b/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetAccountCurrencyStatusUseCase.kt new file mode 100644 index 0000000000..be08772f57 --- /dev/null +++ b/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetAccountCurrencyStatusUseCase.kt @@ -0,0 +1,25 @@ +package com.tangem.domain.account.status.usecase + +import arrow.core.Option +import arrow.core.none +import com.tangem.domain.account.status.model.AccountCryptoCurrencyStatus +import com.tangem.domain.models.currency.CryptoCurrency + +/** + * Use case to retrieve the status of a specific cryptocurrency associated with an account. + * +[REDACTED_AUTHOR] + */ +// TODO: Implement [REDACTED_JIRA] +class GetAccountCurrencyStatusUseCase { + + /** + * Invokes the use case to get the [AccountCryptoCurrencyStatus] for the given [currencyId]. + * + * @param currencyId The ID of the cryptocurrency to look up. + * + * @return An [Option] containing the [AccountCryptoCurrencyStatus] if found, + * or [arrow.core.None] if not found or if any validation fails. + */ + suspend operator fun invoke(currencyId: CryptoCurrency.ID): Option = none() +} \ No newline at end of file