Updated on 2026-08-14

This commit is contained in:
Tangem 2023-09-11 11:21:12 +03:00
parent b35a60098e
commit bb7bef8ab7
5 changed files with 65 additions and 2 deletions

View file

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

View file

@ -88,6 +88,8 @@ internal class DefaultAppCurrencyRepository(
Timber.e(e, "Unable to fetch available currencies")
availableAppCurrenciesStore.store(getDefaultCurrenciesResponse())
throw e
}
}

View file

@ -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<AvailableCurrenciesError, NonEmptyList<AppCurrency>> = either {
val currencies = catch({ appCurrencyRepository.getAvailableAppCurrencies() }) {
raise(AvailableCurrenciesError.DataError(it))
}
ensureNotNull(currencies.toNonEmptyListOrNull()) {
AvailableCurrenciesError.CurrenciesIsEmpty
}
}
}

View file

@ -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<Throwable, Unit> {
return Either.catch { appCurrencyRepository.changeAppCurrency(currencyCode) }
}
}

View file

@ -0,0 +1,8 @@
package com.tangem.domain.appcurrency.error
sealed class AvailableCurrenciesError {
object CurrenciesIsEmpty : AvailableCurrenciesError()
data class DataError(val cause: Throwable) : AvailableCurrenciesError()
}