Updated on 2026-08-14

This commit is contained in:
Tangem 2025-06-02 19:48:42 +05:00
parent 9c4840152b
commit e80c356184
6 changed files with 5 additions and 93 deletions

View file

@ -168,15 +168,6 @@ internal object OnrampDomainModule {
)
}
@Provides
@Singleton
fun provideGetOnrampSelectedPaymentMethodUseCase(
onrampRepository: OnrampRepository,
onrampErrorResolver: OnrampErrorResolver,
): GetOnrampSelectedPaymentMethodUseCase {
return GetOnrampSelectedPaymentMethodUseCase(onrampRepository, onrampErrorResolver)
}
@Provides
@Singleton
fun provideGetOnrampProviderWithQuoteUseCase(
@ -186,15 +177,6 @@ internal object OnrampDomainModule {
return GetOnrampProviderWithQuoteUseCase(onrampRepository, onrampErrorResolver)
}
@Provides
@Singleton
fun provideOnrampSaveSelectedPaymentMethod(
onrampRepository: OnrampRepository,
onrampErrorResolver: OnrampErrorResolver,
): OnrampSaveSelectedPaymentMethod {
return OnrampSaveSelectedPaymentMethod(onrampRepository, onrampErrorResolver)
}
@Provides
@Singleton
fun provideOnrampFetchPairsUseCase(

View file

@ -409,17 +409,6 @@ internal class DefaultOnrampRepository(
return quotes.mapTo(hashSetOf(), OnrampQuote::paymentMethod)
}
override suspend fun saveSelectedPaymentMethod(paymentMethod: OnrampPaymentMethod) {
val dto = paymentMethodsConverter.convertBack(paymentMethod)
paymentMethodsStore.store(SELECTED_PAYMENT_METHOD_KEY, listOf(dto))
}
override fun getSelectedPaymentMethod(): Flow<OnrampPaymentMethod> {
return paymentMethodsStore
.get(SELECTED_PAYMENT_METHOD_KEY)
.mapNotNull { paymentMethods -> paymentMethods.firstOrNull()?.let(paymentMethodsConverter::convert) }
}
override suspend fun clearCache() = withContext(NonCancellable) {
paymentMethodsStore.clear()
pairsStore.clear()

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.core.utils.EitherFlow
import com.tangem.domain.onramp.model.OnrampPaymentMethod
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.catch
import kotlinx.coroutines.flow.map
class GetOnrampSelectedPaymentMethodUseCase(
private val repository: OnrampRepository,
private val errorResolver: OnrampErrorResolver,
) {
operator fun invoke(): EitherFlow<OnrampError, OnrampPaymentMethod> {
return repository.getSelectedPaymentMethod()
.map<OnrampPaymentMethod, Either<OnrampError, OnrampPaymentMethod>> { it.right() }
.catch {
emit(errorResolver.resolve(it).left())
}
}
}

View file

@ -1,18 +0,0 @@
package com.tangem.domain.onramp
import arrow.core.Either
import com.tangem.domain.onramp.model.OnrampPaymentMethod
import com.tangem.domain.onramp.model.error.OnrampError
import com.tangem.domain.onramp.repositories.OnrampErrorResolver
import com.tangem.domain.onramp.repositories.OnrampRepository
class OnrampSaveSelectedPaymentMethod(
private val repository: OnrampRepository,
private val errorResolver: OnrampErrorResolver,
) {
suspend operator fun invoke(paymentMethod: OnrampPaymentMethod): Either<OnrampError, Unit> {
return Either.catch { repository.saveSelectedPaymentMethod(paymentMethod) }
.mapLeft(errorResolver::resolve)
}
}

View file

@ -41,8 +41,6 @@ interface OnrampRepository {
suspend fun getDefaultCountrySync(): OnrampCountry?
fun getDefaultCountry(): Flow<OnrampCountry?>
suspend fun getAvailablePaymentMethods(): Set<OnrampPaymentMethod>
suspend fun saveSelectedPaymentMethod(paymentMethod: OnrampPaymentMethod)
fun getSelectedPaymentMethod(): Flow<OnrampPaymentMethod>
fun getQuotes(): Flow<List<OnrampQuote>>
suspend fun getQuotesSync(): List<OnrampQuote>?
suspend fun clearCache()

View file

@ -15,8 +15,6 @@ import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.core.ui.format.bigdecimal.percent
import com.tangem.domain.onramp.GetOnrampPaymentMethodsUseCase
import com.tangem.domain.onramp.GetOnrampProviderWithQuoteUseCase
import com.tangem.domain.onramp.GetOnrampSelectedPaymentMethodUseCase
import com.tangem.domain.onramp.OnrampSaveSelectedPaymentMethod
import com.tangem.domain.onramp.analytics.OnrampAnalyticsEvent
import com.tangem.domain.onramp.model.OnrampPaymentMethod
import com.tangem.domain.onramp.model.OnrampProviderWithQuote
@ -36,7 +34,10 @@ import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
import kotlinx.collections.immutable.toPersistentList
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import timber.log.Timber
import java.math.BigDecimal
@ -49,9 +50,7 @@ internal class SelectProviderModel @Inject constructor(
override val dispatchers: CoroutineDispatcherProvider,
private val analyticsEventHandler: AnalyticsEventHandler,
private val getOnrampPaymentMethodsUseCase: GetOnrampPaymentMethodsUseCase,
private val getOnrampSelectedPaymentMethodUseCase: GetOnrampSelectedPaymentMethodUseCase,
private val getOnrampProviderWithQuoteUseCase: GetOnrampProviderWithQuoteUseCase,
private val saveSelectedPaymentMethod: OnrampSaveSelectedPaymentMethod,
getUserCountryUseCase: GetUserCountryUseCase,
paramsContainer: ParamsContainer,
) : Model() {
@ -70,7 +69,6 @@ internal class SelectProviderModel @Inject constructor(
analyticsEventHandler.send(OnrampAnalyticsEvent.ProvidersScreenOpened)
getPaymentMethods()
getProviders(params.selectedPaymentMethod)
subscribeToPaymentMethodUpdates()
}
private fun getPaymentMethods() {
@ -104,17 +102,6 @@ internal class SelectProviderModel @Inject constructor(
}
}
private fun subscribeToPaymentMethodUpdates() {
getOnrampSelectedPaymentMethodUseCase.invoke()
.onEach { maybePaymentMethod ->
maybePaymentMethod.fold(
ifLeft = ::sendOnrampErrorEvent,
ifRight = ::getProviders,
)
}
.launchIn(modelScope)
}
private fun getProviders(paymentMethod: OnrampPaymentMethod) {
modelScope.launch {
getOnrampProviderWithQuoteUseCase.invoke(paymentMethod)
@ -176,7 +163,6 @@ internal class SelectProviderModel @Inject constructor(
val firstProvider = methodContainer.providers.firstOrNull()
analyticsEventHandler.send(OnrampAnalyticsEvent.OnPaymentMethodChosen(paymentMethod = paymentMethod.name))
modelScope.launch {
saveSelectedPaymentMethod.invoke(paymentMethod)
_state.update { state ->
state.copy(
selectedPaymentMethod = state.selectedPaymentMethod.copy(
@ -184,6 +170,7 @@ internal class SelectProviderModel @Inject constructor(
),
)
}
getProviders(paymentMethod)
if (firstProvider is ProviderListItemUM.Available) {
onProviderSelected(firstProvider.providerResult, firstProvider.isBestRate)
}