Updated on 2026-08-14

This commit is contained in:
Tangem 2023-07-22 17:47:25 +03:00
commit 87382aa682
4 changed files with 35 additions and 24 deletions

View file

@ -73,7 +73,7 @@ internal class DefaultLearn2earnInteractor(
return repository.getUserData().promoCode != null
}
override suspend fun validateUserWallet(): PromotionError? {
override suspend fun validateUserWallet(): Result<Unit> {
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 {

View file

@ -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<Unit>
fun isUserRegisteredInPromotion(): Boolean

View file

@ -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,

View file

@ -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 {