From bb7bef8ab7fc476d8558f14c9586b7cbbf76f50e Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 11 Sep 2023 11:21:12 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/di/domain/AppCurrencyDomainModule.kt | 16 +++++++++-- .../DefaultAppCurrencyRepository.kt | 2 ++ .../GetAvailableCurrenciesUseCase.kt | 27 +++++++++++++++++++ .../appcurrency/SelectAppCurrencyUseCase.kt | 14 ++++++++++ .../error/AvailableCurrenciesError.kt | 8 ++++++ 5 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/GetAvailableCurrenciesUseCase.kt create mode 100644 domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/SelectAppCurrencyUseCase.kt create mode 100644 domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/error/AvailableCurrenciesError.kt diff --git a/app/src/main/java/com/tangem/tap/di/domain/AppCurrencyDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/AppCurrencyDomainModule.kt index c69bca18d1..ab7bc24782 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/AppCurrencyDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/AppCurrencyDomainModule.kt @@ -1,22 +1,34 @@ package com.tangem.tap.di.domain +import com.tangem.domain.appcurrency.GetAvailableCurrenciesUseCase import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase +import com.tangem.domain.appcurrency.SelectAppCurrencyUseCase import com.tangem.domain.appcurrency.repository.AppCurrencyRepository import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.components.ViewModelComponent -import dagger.hilt.android.scopes.ViewModelScoped @Module @InstallIn(ViewModelComponent::class) internal object AppCurrencyDomainModule { @Provides - @ViewModelScoped fun provideGetSelectedAppCurrencyUseCase( appCurrencyRepository: AppCurrencyRepository, ): GetSelectedAppCurrencyUseCase { return GetSelectedAppCurrencyUseCase(appCurrencyRepository) } + + @Provides + fun provideSelectAppCurrencyUseCase(appCurrencyRepository: AppCurrencyRepository): SelectAppCurrencyUseCase { + return SelectAppCurrencyUseCase(appCurrencyRepository) + } + + @Provides + fun provideGetAvailableCurrenciesUseCase( + appCurrencyRepository: AppCurrencyRepository, + ): GetAvailableCurrenciesUseCase { + return GetAvailableCurrenciesUseCase(appCurrencyRepository) + } } \ No newline at end of file diff --git a/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt b/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt index c2fe02a2b5..a20bd2309b 100644 --- a/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt +++ b/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt @@ -88,6 +88,8 @@ internal class DefaultAppCurrencyRepository( Timber.e(e, "Unable to fetch available currencies") availableAppCurrenciesStore.store(getDefaultCurrenciesResponse()) + + throw e } } diff --git a/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/GetAvailableCurrenciesUseCase.kt b/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/GetAvailableCurrenciesUseCase.kt new file mode 100644 index 0000000000..90670a27da --- /dev/null +++ b/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/GetAvailableCurrenciesUseCase.kt @@ -0,0 +1,27 @@ +package com.tangem.domain.appcurrency + +import arrow.core.Either +import arrow.core.NonEmptyList +import arrow.core.raise.catch +import arrow.core.raise.either +import arrow.core.raise.ensureNotNull +import arrow.core.toNonEmptyListOrNull +import com.tangem.domain.appcurrency.error.AvailableCurrenciesError +import com.tangem.domain.appcurrency.model.AppCurrency +import com.tangem.domain.appcurrency.repository.AppCurrencyRepository + +// TODO: Add tests +class GetAvailableCurrenciesUseCase( + private val appCurrencyRepository: AppCurrencyRepository, +) { + + suspend operator fun invoke(): Either> = either { + val currencies = catch({ appCurrencyRepository.getAvailableAppCurrencies() }) { + raise(AvailableCurrenciesError.DataError(it)) + } + + ensureNotNull(currencies.toNonEmptyListOrNull()) { + AvailableCurrenciesError.CurrenciesIsEmpty + } + } +} \ No newline at end of file diff --git a/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/SelectAppCurrencyUseCase.kt b/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/SelectAppCurrencyUseCase.kt new file mode 100644 index 0000000000..25d7c9c739 --- /dev/null +++ b/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/SelectAppCurrencyUseCase.kt @@ -0,0 +1,14 @@ +package com.tangem.domain.appcurrency + +import arrow.core.Either +import com.tangem.domain.appcurrency.repository.AppCurrencyRepository + +// TODO: Add tests +class SelectAppCurrencyUseCase( + private val appCurrencyRepository: AppCurrencyRepository, +) { + + suspend operator fun invoke(currencyCode: String): Either { + return Either.catch { appCurrencyRepository.changeAppCurrency(currencyCode) } + } +} \ No newline at end of file diff --git a/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/error/AvailableCurrenciesError.kt b/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/error/AvailableCurrenciesError.kt new file mode 100644 index 0000000000..a80e0bc920 --- /dev/null +++ b/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/error/AvailableCurrenciesError.kt @@ -0,0 +1,8 @@ +package com.tangem.domain.appcurrency.error + +sealed class AvailableCurrenciesError { + + object CurrenciesIsEmpty : AvailableCurrenciesError() + + data class DataError(val cause: Throwable) : AvailableCurrenciesError() +} \ No newline at end of file