Updated on 2026-08-14

This commit is contained in:
Tangem 2025-10-06 13:36:04 +04:00
parent 86fbb5e005
commit 37486f3877
4 changed files with 82 additions and 18 deletions

View file

@ -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,
)
}
}

View file

@ -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()
}
}

View file

@ -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))
}
}

View file

@ -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<AccountCryptoCurrencyStatus> = none()
}