Updated on 2026-08-14
This commit is contained in:
parent
b35a60098e
commit
bb7bef8ab7
5 changed files with 65 additions and 2 deletions
|
|
@ -1,22 +1,34 @@
|
||||||
package com.tangem.tap.di.domain
|
package com.tangem.tap.di.domain
|
||||||
|
|
||||||
|
import com.tangem.domain.appcurrency.GetAvailableCurrenciesUseCase
|
||||||
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
|
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
|
||||||
|
import com.tangem.domain.appcurrency.SelectAppCurrencyUseCase
|
||||||
import com.tangem.domain.appcurrency.repository.AppCurrencyRepository
|
import com.tangem.domain.appcurrency.repository.AppCurrencyRepository
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
import dagger.hilt.android.components.ViewModelComponent
|
import dagger.hilt.android.components.ViewModelComponent
|
||||||
import dagger.hilt.android.scopes.ViewModelScoped
|
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@InstallIn(ViewModelComponent::class)
|
@InstallIn(ViewModelComponent::class)
|
||||||
internal object AppCurrencyDomainModule {
|
internal object AppCurrencyDomainModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@ViewModelScoped
|
|
||||||
fun provideGetSelectedAppCurrencyUseCase(
|
fun provideGetSelectedAppCurrencyUseCase(
|
||||||
appCurrencyRepository: AppCurrencyRepository,
|
appCurrencyRepository: AppCurrencyRepository,
|
||||||
): GetSelectedAppCurrencyUseCase {
|
): GetSelectedAppCurrencyUseCase {
|
||||||
return GetSelectedAppCurrencyUseCase(appCurrencyRepository)
|
return GetSelectedAppCurrencyUseCase(appCurrencyRepository)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
fun provideSelectAppCurrencyUseCase(appCurrencyRepository: AppCurrencyRepository): SelectAppCurrencyUseCase {
|
||||||
|
return SelectAppCurrencyUseCase(appCurrencyRepository)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
fun provideGetAvailableCurrenciesUseCase(
|
||||||
|
appCurrencyRepository: AppCurrencyRepository,
|
||||||
|
): GetAvailableCurrenciesUseCase {
|
||||||
|
return GetAvailableCurrenciesUseCase(appCurrencyRepository)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -88,6 +88,8 @@ internal class DefaultAppCurrencyRepository(
|
||||||
Timber.e(e, "Unable to fetch available currencies")
|
Timber.e(e, "Unable to fetch available currencies")
|
||||||
|
|
||||||
availableAppCurrenciesStore.store(getDefaultCurrenciesResponse())
|
availableAppCurrenciesStore.store(getDefaultCurrenciesResponse())
|
||||||
|
|
||||||
|
throw e
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.tangem.domain.appcurrency.error
|
||||||
|
|
||||||
|
sealed class AvailableCurrenciesError {
|
||||||
|
|
||||||
|
object CurrenciesIsEmpty : AvailableCurrenciesError()
|
||||||
|
|
||||||
|
data class DataError(val cause: Throwable) : AvailableCurrenciesError()
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue