Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-12 18:45:06 +05:00
parent d4bafed03c
commit 270c49ffe9
6 changed files with 17 additions and 55 deletions

View file

@ -82,15 +82,6 @@ internal object OnrampDomainModule {
)
}
@Provides
@Singleton
fun provideGetOnrampCurrencyUseCase(
onrampRepository: OnrampRepository,
onrampErrorResolver: OnrampErrorResolver,
): GetOnrampCurrencyUseCase {
return GetOnrampCurrencyUseCase(onrampRepository, onrampErrorResolver)
}
@Provides
@Singleton
fun provideGetOnrampTransactionsUseCase(

View file

@ -101,8 +101,6 @@ object PreferencesKeys {
val SHOULD_SHOW_RING_PROMO_KEY by lazy { booleanPreferencesKey(name = "shouldShowRingPromo") }
val ONRAMP_DEFAULT_CURRENCY by lazy { stringPreferencesKey(name = "onrampDefaultCurrency") }
val ONRAMP_DEFAULT_COUNTRY by lazy { stringPreferencesKey(name = "onrampDefaultCountry") }
val ONRAMP_TRANSACTIONS_STATUSES_KEY by lazy { stringPreferencesKey(name = "onrampTransactionsStatuses") }

View file

@ -21,7 +21,6 @@ import com.tangem.datasource.api.onramp.models.common.OnrampDestinationDTO
import com.tangem.datasource.api.onramp.models.request.OnrampPairsRequest
import com.tangem.datasource.api.onramp.models.response.OnrampDataJson
import com.tangem.datasource.api.onramp.models.response.model.OnrampCountryDTO
import com.tangem.datasource.api.onramp.models.response.model.OnrampCurrencyDTO
import com.tangem.datasource.api.onramp.models.response.model.OnrampPairDTO
import com.tangem.datasource.api.onramp.models.response.model.PaymentMethodDTO
import com.tangem.datasource.crypto.DataSignatureVerifier
@ -124,22 +123,23 @@ internal class DefaultOnrampRepository(
}
override suspend fun saveDefaultCurrency(currency: OnrampCurrency) = withContext(dispatchers.io) {
appPreferencesStore.storeObject<OnrampCurrencyDTO>(
key = PreferencesKeys.ONRAMP_DEFAULT_CURRENCY,
value = currencyConverter.convertBack(currency),
val country = getDefaultCountrySync() ?: return@withContext
appPreferencesStore.storeObject<OnrampCountryDTO>(
key = PreferencesKeys.ONRAMP_DEFAULT_COUNTRY,
value = countryConverter.convertBack(country.copy(defaultCurrency = currency)),
)
}
override suspend fun getDefaultCurrencySync(): OnrampCurrency? = withContext(dispatchers.io) {
appPreferencesStore
.getObjectSyncOrNull<OnrampCurrencyDTO>(PreferencesKeys.ONRAMP_DEFAULT_CURRENCY)
?.let(currencyConverter::convert)
.getObjectSyncOrNull<OnrampCountryDTO>(PreferencesKeys.ONRAMP_DEFAULT_COUNTRY)
?.let(countryConverter::convert)?.defaultCurrency
}
override fun getDefaultCurrency(): Flow<OnrampCurrency?> {
return appPreferencesStore
.getObject<OnrampCurrencyDTO>(PreferencesKeys.ONRAMP_DEFAULT_CURRENCY)
.map { it?.let(currencyConverter::convert) }
.getObject<OnrampCountryDTO>(PreferencesKeys.ONRAMP_DEFAULT_COUNTRY)
.map { it?.let(countryConverter::convert)?.defaultCurrency }
}
override suspend fun saveDefaultCountry(country: OnrampCountry) = withContext(dispatchers.io) {

View file

@ -1,26 +0,0 @@
package com.tangem.domain.onramp
import arrow.core.Either
import arrow.core.left
import arrow.core.right
import com.tangem.domain.onramp.model.OnrampCurrency
import com.tangem.domain.onramp.model.error.OnrampError
import com.tangem.domain.onramp.repositories.OnrampErrorResolver
import com.tangem.domain.onramp.repositories.OnrampRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.map
class GetOnrampCurrencyUseCase(
private val repository: OnrampRepository,
private val errorResolver: OnrampErrorResolver,
) {
operator fun invoke(): Flow<Either<OnrampError, OnrampCurrency?>> {
return repository.getDefaultCurrency()
.map<OnrampCurrency?, Either<OnrampError, OnrampCurrency?>> { it.right() }
.catch {
emit(errorResolver.resolve(it).left())
}
}
}

View file

@ -11,7 +11,6 @@ class OnrampSaveDefaultCountryUseCase(
) {
suspend operator fun invoke(country: OnrampCountry) = Either.catch {
repository.saveDefaultCurrency(country.defaultCurrency)
repository.saveDefaultCountry(country)
}.mapLeft(errorResolver::resolve)
}

View file

@ -54,7 +54,7 @@ internal class OnrampMainComponentModel @Inject constructor(
private val router: Router,
private val isDemoCardUseCase: IsDemoCardUseCase,
private val checkOnrampAvailabilityUseCase: CheckOnrampAvailabilityUseCase,
private val getOnrampCurrencyUseCase: GetOnrampCurrencyUseCase,
private val getOnrampCountryUseCase: GetOnrampCountryUseCase,
private val clearOnrampCacheUseCase: ClearOnrampCacheUseCase,
private val fetchQuotesUseCase: OnrampFetchQuotesUseCase,
private val getOnrampQuotesUseCase: GetOnrampQuotesUseCase,
@ -107,7 +107,7 @@ internal class OnrampMainComponentModel @Inject constructor(
fun handleOnrampAvailable(currency: OnrampCurrency) {
_state.update { stateFactory.getReadyState(currency) }
subscribeToCurrencyUpdates()
subscribeToCountryAndCurrencyUpdates()
subscribeToQuotesUpdate()
}
@ -132,14 +132,14 @@ internal class OnrampMainComponentModel @Inject constructor(
}
}
private fun subscribeToCurrencyUpdates() {
getOnrampCurrencyUseCase.invoke()
.onEach { maybeCurrency ->
maybeCurrency.fold(
private fun subscribeToCountryAndCurrencyUpdates() {
getOnrampCountryUseCase.invoke()
.onEach { maybeCountry ->
maybeCountry.fold(
ifLeft = ::handleOnrampError,
ifRight = { currency ->
if (currency == null) return@onEach
_state.update { amountStateFactory.getUpdatedCurrencyState(currency) }
ifRight = { country ->
if (country == null) return@onEach
_state.update { amountStateFactory.getUpdatedCurrencyState(country.defaultCurrency) }
updatePairsAndQuotes()
},
)