Updated on 2026-08-14

This commit is contained in:
Tangem 2025-05-28 13:44:23 +03:00
parent 0627f0e62c
commit 3e4e8c8f90
4 changed files with 9 additions and 32 deletions

View file

@ -11,8 +11,7 @@ data class CardActivationRemoteStateResponse(
data class Result(
@Json(name = "status") val status: String,
@Json(name = "order") val activationOrder: ActivationOrder?,
@Json(name = "stepChangeCode") val stepChangeCode: Int?,
@Json(name = "updatedAt") val updatedAt: String?,
@Json(name = "step_error") val stepError: String?,
)
@JsonClass(generateAdapter = true)

View file

@ -4,34 +4,19 @@ import com.tangem.datasource.api.visa.models.response.CardActivationRemoteStateR
import com.tangem.domain.visa.model.VisaActivationOrderInfo
import com.tangem.domain.visa.model.VisaActivationRemoteState
import com.tangem.utils.converter.Converter
import kotlinx.coroutines.flow.MutableStateFlow
private const val PIN_CODE_VALIDATION_ERROR = 1000
private const val PIN_CODE_VALIDATION_ERROR = "pin_entry"
object VisaActivationStatusConverterWithState :
Converter<CardActivationRemoteStateResponse, VisaActivationRemoteState> {
private val lastUpdatedAt = MutableStateFlow<String?>(null)
override fun convert(value: CardActivationRemoteStateResponse): VisaActivationRemoteState {
// handle pin code error
// either we entered pin code before with an error (WasError) or after receiving an error (InProgress)
// TODO [REDACTED_TASK_KEY]
val result = value.result
if (result.status == Status.PinCodeRequired.stringValue && result.stepChangeCode == PIN_CODE_VALIDATION_ERROR) {
return if (lastUpdatedAt.value != result.updatedAt) {
lastUpdatedAt.value = result.updatedAt
VisaActivationRemoteState.AwaitingPinCode(
activationOrderInfo = result.activationOrder!!.convert(),
status = VisaActivationRemoteState.AwaitingPinCode.Status.WasError,
)
} else {
VisaActivationRemoteState.AwaitingPinCode(
activationOrderInfo = result.activationOrder!!.convert(),
status = VisaActivationRemoteState.AwaitingPinCode.Status.InProgress,
)
}
if (result.status == Status.PinCodeRequired.stringValue && result.stepError == PIN_CODE_VALIDATION_ERROR) {
return VisaActivationRemoteState.AwaitingPinCode(
activationOrderInfo = result.activationOrder!!.convert(),
status = VisaActivationRemoteState.AwaitingPinCode.Status.WasError,
)
}
val status = Status.entries.find { it.stringValue == result.status } ?: error(

View file

@ -26,7 +26,7 @@ sealed class VisaActivationRemoteState {
val status: Status,
) : VisaActivationRemoteState() {
enum class Status {
WaitingForPinCode, InProgress, WasError
WaitingForPinCode, WasError
}
}
@ -71,7 +71,7 @@ enum class VisaActivationRemoteState_Type {
@Suppress("ClassNaming")
@JsonClass(generateAdapter = false)
enum class AwaitingPinCodeStatus_Type {
WaitingForPinCode, InProgress, WasError
WaitingForPinCode, WasError
}
@Suppress("ClassNaming")
@ -91,8 +91,6 @@ class VisaActivationRemoteState_JsonAdapter {
status = when (value.awaitingPinCodeStatus!!) {
AwaitingPinCodeStatus_Type.WaitingForPinCode ->
AwaitingPinCode.Status.WaitingForPinCode
AwaitingPinCodeStatus_Type.InProgress ->
AwaitingPinCode.Status.InProgress
AwaitingPinCodeStatus_Type.WasError ->
AwaitingPinCode.Status.WasError
},
@ -127,8 +125,6 @@ class VisaActivationRemoteState_JsonAdapter {
awaitingPinCodeStatus = when (value.status) {
AwaitingPinCode.Status.WaitingForPinCode ->
AwaitingPinCodeStatus_Type.WaitingForPinCode
AwaitingPinCode.Status.InProgress ->
AwaitingPinCodeStatus_Type.InProgress
AwaitingPinCode.Status.WasError ->
AwaitingPinCodeStatus_Type.WasError
},

View file

@ -153,9 +153,6 @@ internal class OnboardingVisaInProgressModel @Inject constructor(
)
complete()
}
VisaActivationRemoteState.AwaitingPinCode.Status.InProgress -> {
/** waiting for the new state */
}
}
}