Updated on 2026-08-14

This commit is contained in:
Tangem 2026-03-05 19:40:05 +05:00
parent 922b197172
commit 9df23bfa67
4 changed files with 36 additions and 1 deletions

View file

@ -15,6 +15,7 @@ android {
dependencies {
/** Project - Data */
implementation(projects.core.analytics)
implementation(projects.core.datasource)
implementation(projects.core.error)
implementation(projects.core.error.ext)

View file

@ -2,6 +2,7 @@ package com.tangem.data.pay.repository
import arrow.core.Either
import arrow.core.raise.catch
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.datasource.api.pay.TangemPayApi
import com.tangem.datasource.api.pay.models.request.DeeplinkValidityRequest
import com.tangem.datasource.api.pay.models.request.OrderRequest
@ -18,6 +19,7 @@ import com.tangem.domain.pay.model.CustomerInfo
import com.tangem.domain.pay.model.CustomerInfo.CardInfo
import com.tangem.domain.pay.model.CustomerInfo.ProductInstance
import com.tangem.domain.pay.repository.OnboardingRepository
import com.tangem.domain.tangempay.TangemPayAnalyticsEvents
import com.tangem.domain.visa.error.VisaApiError
import com.tangem.domain.visa.model.TangemPayCardFrozenState
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
@ -32,6 +34,7 @@ private const val TAG = "TangemPay: OnboardingRepository"
@Suppress("LongParameterList")
internal class DefaultOnboardingRepository @Inject constructor(
private val analytics: AnalyticsEventHandler,
private val dispatcherProvider: CoroutineDispatcherProvider,
private val tangemPayApi: TangemPayApi,
private val requestHelper: TangemPayRequestPerformer,
@ -135,6 +138,9 @@ internal class DefaultOnboardingRepository @Inject constructor(
userWalletId: UserWalletId,
response: CustomerMeResponse.Result?,
): CustomerInfo {
val kycStatus = KycStatus.fromString(status = response?.kyc?.status)
sendKycAnalytics(kycStatus)
val card = response?.card
val fiatBalance = response?.balance?.fiat
val paymentAccount = response?.paymentAccount
@ -161,13 +167,24 @@ internal class DefaultOnboardingRepository @Inject constructor(
return CustomerInfo(
customerId = response?.id,
productInstance = productInstance,
kycStatus = KycStatus.fromString(status = response?.kyc?.status),
kycStatus = kycStatus,
cardInfo = cardInfo,
).also {
lastFetchedCustomerInfoMap[userWalletId] = it
}
}
private fun sendKycAnalytics(kycStatus: KycStatus) {
val event = when (kycStatus) {
KycStatus.APPROVED -> TangemPayAnalyticsEvents.KycPassedAndOrderCreated()
KycStatus.REJECTED -> TangemPayAnalyticsEvents.KycRejected()
KycStatus.INIT,
KycStatus.PENDING,
-> return
}
analytics.send(event)
}
override suspend fun hasTangemPayInWallet(userWalletId: UserWalletId): Either<VisaApiError, Boolean> {
val hasTangemPay = tangemPayStorage.checkCustomerWalletResult(userWalletId)
if (hasTangemPay != null) {

View file

@ -176,4 +176,19 @@ sealed class TangemPayAnalyticsEvents(
categoryName = "Visa Screen",
event = "Button - Support On Transaction Popup",
)
class KycPassedAndOrderCreated : TangemPayAnalyticsEvents(
categoryName = "Visa Onboarding",
event = "Visa KYC Passed And Order Created",
)
class KycRejected : TangemPayAnalyticsEvents(
categoryName = "Visa Onboarding",
event = "Visa KYC Rejected",
)
class KycCancelled : TangemPayAnalyticsEvents(
categoryName = "Visa Onboarding",
event = "Visa KYC Canceled",
)
}

View file

@ -25,6 +25,7 @@ import com.tangem.domain.pay.TangemPayEligibilityManager
import com.tangem.domain.pay.repository.OnboardingRepository
import com.tangem.domain.pay.usecase.ProduceTangemPayInitialDataUseCase
import com.tangem.domain.pay.usecase.TangemPayMainScreenCustomerInfoUseCase
import com.tangem.domain.tangempay.TangemPayAnalyticsEvents
import com.tangem.feature.wallet.presentation.wallet.state.WalletStateController
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletDialogConfig
import com.tangem.feature.wallet.presentation.wallet.state.transformers.TangemPayHideOnboardingStateTransformer
@ -261,6 +262,7 @@ internal class TangemPayClickIntentsImplementor @Inject constructor(
}
private fun disableTangemPay(userWalletId: UserWalletId) {
analyticsEventHandler.send(TangemPayAnalyticsEvents.KycCancelled())
modelScope.launch {
tangemPayOnboardingRepository.disableTangemPay(userWalletId)
.onRight { tangemPayMainScreenCustomerInfoUseCase.fetch(userWalletId) }