diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt index 9bf458c7ff..c2cfa092b7 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt @@ -73,7 +73,7 @@ internal class DefaultLearn2earnInteractor( return repository.getUserData().promoCode != null } - override suspend fun validateUserWallet(): PromotionError? { + override suspend fun validateUserWallet(): Result { val promoCode = repository.getUserData().promoCode val userWalletId = userWalletManager.getWalletId() @@ -83,8 +83,12 @@ internal class DefaultLearn2earnInteractor( repository.validateCode(userWalletId, promoCode).error }?.toDomainError() - return domainError - ?.also { handlePromotionError(it) } + return if (domainError == null) { + Result.success(Unit) + } else { + handlePromotionError(domainError) + Result.failure(domainError) + } } override fun isUserRegisteredInPromotion(): Boolean { diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt index e4571a9420..85f15629df 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt @@ -1,7 +1,6 @@ package com.tangem.feature.learn2earn.domain.api import android.net.Uri -import com.tangem.feature.learn2earn.domain.models.PromotionError import kotlinx.coroutines.flow.Flow /** @@ -23,7 +22,7 @@ interface Learn2earnInteractor : WebViewRedirectHandler { fun isPromotionActiveOnMain(): Boolean - suspend fun validateUserWallet(): PromotionError? + suspend fun validateUserWallet(): Result fun isUserRegisteredInPromotion(): Boolean diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt index 082e51488c..1d14fb5c7f 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt @@ -20,6 +20,7 @@ import com.tangem.utils.coroutines.AppCoroutineDispatcherProvider import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import timber.log.Timber import javax.inject.Inject /** @@ -57,7 +58,7 @@ class Learn2earnViewModel @Inject constructor( updateUi { uiState .updateGetBonusVisibility(isVisible = isTangemWallet) - .changeGetBounsDescription(getBonusDescription()) + .changeGetBonusDescription(getBonusDescription()) } } } @@ -78,24 +79,31 @@ class Learn2earnViewModel @Inject constructor( } viewModelScope.launch(dispatchers.io) { - val error = interactor.validateUserWallet() - when { - error == null -> { - updateUi { - uiState - .updateStoriesVisibility(isVisible = interactor.isPromotionActiveOnStories()) - .updateGetBonusVisibility(isVisible = interactor.isPromotionActiveOnMain()) - .changeGetBounsDescription(getBonusDescription()) - } + runCatching { interactor.validateUserWallet() } + .onSuccess { result -> + result.fold( + onSuccess = { + updateUi { + uiState + .updateStoriesVisibility(isVisible = interactor.isPromotionActiveOnStories()) + .updateGetBonusVisibility(isVisible = interactor.isPromotionActiveOnMain()) + .changeGetBonusDescription(getBonusDescription()) + } + }, + onFailure = { + if (interactor.isPromotionActive()) { + val error = it as? PromotionError ?: return@launch + updateViewsVisibilityOnError(error) + } else { + updateUi { uiState.updateViewsVisibility(isVisible = false) } + } + }, + ) } - // additional check after the error has been handled by interactor - !interactor.isPromotionActive() -> { - updateUi { uiState.updateViewsVisibility(isVisible = false) } + .onFailure { + Timber.e(it) + updateUi { uiState.updateGetBonusVisibility(isVisible = false) } } - else -> { - updateViewsVisibilityOnError(error) - } - } } } @@ -116,7 +124,7 @@ class Learn2earnViewModel @Inject constructor( -> { updateUi { uiState.updateViewsVisibility(isVisible = true) - .changeGetBounsDescription(getBonusDescription()) + .changeGetBonusDescription(getBonusDescription()) } } is PromotionError.UnknownError, diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt index c97472b8b5..a473dd04d2 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt @@ -48,7 +48,7 @@ internal fun Learn2earnState.updateViewsVisibility(isVisible: Boolean): Learn2ea .updateGetBonusVisibility(isVisible) } -internal fun Learn2earnState.changeGetBounsDescription(description: MainScreenState.Description): Learn2earnState { +internal fun Learn2earnState.changeGetBonusDescription(description: MainScreenState.Description): Learn2earnState { return if (mainScreenState.description == description) { this } else {