Updated on 2026-08-14

This commit is contained in:
Tangem 2022-10-26 16:18:13 +05:00
parent 26bffcb155
commit 1f958a4cef
3 changed files with 71 additions and 41 deletions

View file

@ -19,7 +19,7 @@ class OnboardingSaltPayHelper {
manager: SaltPayActivationManager,
): Result<Boolean> {
return try {
val updatedStep = manager.update(null, null).successOr { return it }
val updatedStep = manager.update(SaltPayActivationStep.None, null).successOr { return it }
val isRegistrationCase = updatedStep != SaltPayActivationStep.Finished
val isBackupCase = scanResponse.card.backupStatus?.isActive == false
Result.Success(isRegistrationCase || isBackupCase)

View file

@ -247,33 +247,82 @@ fun handleAnalytics(analyticsHandler: GlobalAnalyticsEventHandler, step: SaltPay
}
suspend fun SaltPayActivationManager.update(
currentStep: SaltPayActivationStep?,
currentStep: SaltPayActivationStep,
currentAmountToClaim: Amount?,
): Result<SaltPayActivationStep> {
Timber.d("updateSaltPayStatus")
val step = checkRegistration(this).successOr {
return Result.Failure(it.error)
}
checkGasIfNeeded(this, step).successOr {
return Result.Failure(it.error)
}
val registrationResponse = checkRegistration().successOr { return it }
val amountToClaim = getAmountToClaimIfNeeded(this, currentAmountToClaim)
val processedStep = when {
step == SaltPayActivationStep.Claim && amountToClaim == null -> {
SaltPayActivationStep.Finished
}
step == SaltPayActivationStep.KycReject && currentStep == SaltPayActivationStep.KycReject -> {
SaltPayActivationStep.KycStart
}
else -> step
val newStep = try {
determineStep(currentStep, amountToClaim, registrationResponse)
} catch (ex: Exception) {
return Result.Failure(ex)
}
Timber.d("update: success: %s", processedStep)
return Result.Success(processedStep)
checkGasIfNeeded(this, newStep).successOr { return it }
Timber.d("update: success: %s", newStep)
return Result.Success(newStep)
}
private fun determineStep(
currentStep: SaltPayActivationStep,
amountToClaim: Amount?,
response: RegistrationResponse.Item,
): SaltPayActivationStep {
return when {
response.passed != true -> throw SaltPayActivationError.CardNotPassed(response.error)
response.disabledByAdmin == true -> throw SaltPayActivationError.CardDisabled(response.error)
// go to claim screen
response.active == true -> SaltPayActivationStep.Claim
// pinSet is false, go toPin screen
response.pinSet == false -> SaltPayActivationStep.NeedPin
response.kycStatus != null -> {
when (currentStep) {
SaltPayActivationStep.KycWaiting -> when (response.kycStatus) {
KYCStatus.NOT_STARTED, KYCStatus.STARTED -> SaltPayActivationStep.KycIntro
KYCStatus.WAITING_FOR_APPROVAL -> SaltPayActivationStep.KycWaiting
KYCStatus.CORRECTION_REQUESTED, KYCStatus.REJECTED -> SaltPayActivationStep.KycReject
KYCStatus.APPROVED -> when (amountToClaim) {
null -> SaltPayActivationStep.Success
else -> SaltPayActivationStep.Claim
}
else -> SaltPayActivationStep.KycIntro
}
SaltPayActivationStep.KycReject -> when (response.kycStatus) {
KYCStatus.NOT_STARTED, KYCStatus.STARTED -> SaltPayActivationStep.KycStart
KYCStatus.WAITING_FOR_APPROVAL -> SaltPayActivationStep.KycWaiting
KYCStatus.CORRECTION_REQUESTED -> SaltPayActivationStep.KycStart
KYCStatus.REJECTED -> SaltPayActivationStep.KycStart
KYCStatus.APPROVED -> when (amountToClaim) {
null -> SaltPayActivationStep.Success
else -> SaltPayActivationStep.Claim
}
else -> SaltPayActivationStep.KycIntro
}
else -> when (response.kycStatus) {
KYCStatus.NOT_STARTED, KYCStatus.STARTED -> SaltPayActivationStep.KycIntro
KYCStatus.WAITING_FOR_APPROVAL -> SaltPayActivationStep.KycWaiting
KYCStatus.CORRECTION_REQUESTED, KYCStatus.REJECTED -> SaltPayActivationStep.KycReject
KYCStatus.APPROVED -> when (amountToClaim) {
null -> SaltPayActivationStep.Finished
else -> SaltPayActivationStep.Claim
}
else -> SaltPayActivationStep.KycIntro
}
}
}
// kycDate is set, go to kyc waiting screen
response.kycDate != null -> SaltPayActivationStep.KycWaiting
else -> SaltPayActivationStep.KycIntro
}
}
private suspend fun getAmountToClaimIfNeeded(
@ -342,28 +391,8 @@ private suspend fun checkGasIfNeeded(
return result
}
private suspend fun checkRegistration(
saltPayManager: SaltPayActivationManager,
): Result<SaltPayActivationStep> {
Timber.d("checkRegistration")
return try {
val registrationResponseItem = saltPayManager.checkRegistration().successOr {
Timber.e(it.error, "checkRegistration: failure")
return it
}
Timber.d("checkRegistration: success: try convert to SaltPayStep")
val step = registrationResponseItem.toSaltPayStep()
Timber.d("checkRegistration: step: %s", step)
Result.Success(step)
} catch (ex: SaltPayActivationError) {
Timber.e(ex, "checkRegistration: step")
Result.Failure(ex)
}
}
@Throws(SaltPayActivationError::class)
fun RegistrationResponse.Item.toSaltPayStep(): SaltPayActivationStep {
fun RegistrationResponse.Item.toSaltPayStep(currentStep: SaltPayActivationStep): SaltPayActivationStep {
return when {
passed != true -> throw SaltPayActivationError.CardNotPassed(this.error)
disabledByAdmin == true -> throw SaltPayActivationError.CardDisabled(this.error)

View file

@ -121,5 +121,6 @@ enum class SaltPayActivationStep {
KycReject,
Claim,
ClaimInProgress,
Success,
Finished;
}