TP-59232 | KYC Bug Fix (#10023)

This commit is contained in:
Balrambhai Sharma
2024-03-05 19:06:14 +05:30
committed by GitHub
parent d3ac8108e9
commit 30a544f795
5 changed files with 71 additions and 23 deletions

View File

@@ -18,6 +18,7 @@ import androidx.databinding.DataBindingUtil
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import com.google.gson.reflect.TypeToken
import com.moengage.core.internal.REQUEST_ATTR_QUERY_PARAMS
import com.navi.base.model.CtaData
import com.navi.base.model.CtaType
import com.navi.base.utils.orFalse
@@ -37,9 +38,11 @@ import com.navi.insurance.common.viewmodel.PolicyStatusViewModel
import com.navi.insurance.databinding.LayoutPolicyStatusBinding
import com.navi.insurance.health.activity.InsuranceContainerActivity
import com.navi.insurance.health.viewmodel.InsuranceContainerActivityVM
import com.navi.insurance.models.request.AadhaarVerificationData
import com.navi.insurance.navigator.NaviInsuranceDeeplinkNavigator
import com.navi.insurance.util.APPLICATION_TYPE_EXTRA
import com.navi.insurance.util.INITIAL_PAGE_UI
import com.navi.insurance.util.PAGE_TYPE
import com.navi.insurance.util.QUOTE_ID_EXTRA
import com.navi.insurance.util.SOURCE_TYPE
import com.navi.naviwidgets.extensions.getJsonObject
@@ -88,6 +91,12 @@ class PolicyStatusFragment : GiBaseFragment() {
quoteId = arguments?.getString(QUOTE_ID_EXTRA)
?: run { activity?.intent?.getStringExtra(QUOTE_ID_EXTRA) }
viewModel.sourceType = arguments?.getString(SOURCE_TYPE).orEmpty()
val type = object: TypeToken<AadhaarVerificationData>(){}.type
viewModel.requestBody = getJsonObject<AadhaarVerificationData>(
type,
arguments?.getString(REQUEST_ATTR_QUERY_PARAMS)
) ?: AadhaarVerificationData()
viewModel.pageType = arguments?.getString(PAGE_TYPE).orEmpty()
applicationType = arguments?.getString(APPLICATION_TYPE_EXTRA)
initialPageUI = arguments?.getString(INITIAL_PAGE_UI)
parentActivity = activity as? InsuranceContainerActivity

View File

@@ -7,6 +7,7 @@
package com.navi.insurance.common.repository
import com.navi.base.utils.isNotNull
import com.navi.common.network.models.RepoResult
import com.navi.common.network.retrofit.ResponseCallback
import com.navi.common.uitron.model.action.SourceType
@@ -28,11 +29,11 @@ class PolicyStatusRepository @Inject constructor(private val retrofitService: Re
retrofitService.generateQuoteID(quoteId)
)
suspend fun fetchPostPurchaseStatus(sourceType: String): RepoResult<PolicyStatusResponse> =
suspend fun fetchPostPurchaseStatus(sourceType: String, formNextPageRequest: FormNextPageRequest? = null): RepoResult<PolicyStatusResponse> =
apiResponseCallback(
retrofitService.postNaviOneProfileData(
sourceType = sourceType,
formNextPageRequest = FormNextPageRequest(),
formNextPageRequest = if(formNextPageRequest.isNotNull()) FormNextPageRequest() else FormNextPageRequest()
)
)
}

View File

@@ -17,6 +17,9 @@ import com.navi.insurance.common.models.GiErrorMetaData
import com.navi.insurance.common.models.PolicyStatusResponse
import com.navi.insurance.common.repository.PolicyStatusRepository
import com.navi.insurance.common.util.ActionHandler
import com.navi.insurance.models.request.AadhaarVerificationData
import com.navi.insurance.models.request.FormNextPageRequest
import com.navi.insurance.models.request.FormTypedKeyData
import com.navi.insurance.network.ApiErrorTagType
import com.navi.insurance.util.POST_PURCHASE_JOURNEY
import com.navi.insurance.util.TRIAL_POLICY
@@ -38,6 +41,8 @@ class PolicyStatusViewModel @Inject constructor(
MutableStateFlow<ResponseState<PolicyStatusResponse>>(ResponseState.Idle)
val policyStatusFlow: StateFlow<ResponseState<PolicyStatusResponse>> get() = _policyStatusFlow.asStateFlow()
var sourceType: String = ""
var requestBody: AadhaarVerificationData = AadhaarVerificationData()
var pageType: String = ""
private fun exceptionHandler(errorTag: String) = CoroutineExceptionHandler { _, exception ->
viewModelScope.launch {
@@ -58,6 +63,20 @@ class PolicyStatusViewModel @Inject constructor(
}
}
private fun getFormRequestData(
aadhaarVerificationData: AadhaarVerificationData,
pageType: String?
): FormNextPageRequest {
return FormNextPageRequest(
pageType = pageType.orEmpty(),
data = listOf(
FormTypedKeyData(
attributes = aadhaarVerificationData
)
)
)
}
fun fetchPolicyCurrentStatus(quoteId: String?, isPolling: Boolean, applicationType: String? = null) {
viewModelScope.launch(dispatcher.io + exceptionHandler(ApiErrorTagType.POLICY_STATUS_RESPONSE_ERROR.value)) {
if (!isPolling) {
@@ -67,7 +86,12 @@ class PolicyStatusViewModel @Inject constructor(
}
val response =
if (applicationType == POST_PURCHASE_JOURNEY) {
repository.fetchPostPurchaseStatus(sourceType)
repository.fetchPostPurchaseStatus(
sourceType, formNextPageRequest = getFormRequestData(
requestBody,
pageType
)
)
} else if (applicationType == TRIAL_POLICY) {
repository.generateQuoteID(quoteId)
} else repository.fetchCurrentPolicyStatus(quoteId, applicationType)

View File

@@ -17,7 +17,10 @@ import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import com.digitap.dtokyc.exception.DTException
import com.digitap.dtokyc.handler.OKYCListener
import com.google.gson.reflect.TypeToken
import com.moengage.core.internal.REQUEST_ATTR_QUERY_PARAMS
import com.navi.base.model.CtaData
import com.navi.base.model.LineItem
import com.navi.base.utils.isNotNull
import com.navi.common.ResponseState
import com.navi.common.constants.GI
@@ -44,11 +47,14 @@ import com.navi.insurance.models.response.AadhaarVerifyInitDetails
import com.navi.insurance.navigator.NaviInsuranceDeeplinkNavigator
import com.navi.insurance.network.ApiConstants
import com.navi.insurance.network.ApiErrorTagType
import com.navi.insurance.util.Constants
import com.navi.insurance.util.JOURNEY_KEY_EXTRA
import com.navi.insurance.util.TRUE
import com.navi.naviwidgets.extensions.addOnMultipleClicksHandler
import com.navi.naviwidgets.extensions.getJsonObject
import com.navi.naviwidgets.extensions.setTextFieldData
import com.navi.naviwidgets.utils.NaviWidgetIconUtils
import com.navi.naviwidgets.utils.convertObjectToJsonString
import com.navi.naviwidgets.utils.loadUrlIntoImageView
import com.navi.naviwidgets.views.NaviErrorPageView
import dagger.hilt.android.AndroidEntryPoint
@@ -77,8 +83,11 @@ class GiAadhaarVerificationFragment : GiBaseFragment(), OKYCListener {
super.onViewCreated(view, savedInstanceState)
initObservers()
viewModel.setNaviOneProfileStatus(
arguments?.getBoolean(IS_NAVI_ONE_PROFILE_ENABLED) ?: false
arguments?.getString(IS_NAVI_ONE_PROFILE_ENABLED).toBoolean()
)
val type = object : TypeToken<CtaData?>() {}.type
val ctaData = getJsonObject<CtaData>(type, arguments?.getString(Constants.KEY_CTA_DATA))
viewModel.setNavigationCta(ctaData)
if (arguments?.getString(OKYC_FORM_ENABLED_KEY) == TRUE) {
viewModel.okycFormEnabled = true
viewModel.setAadhaarInitData(
@@ -392,7 +401,15 @@ class GiAadhaarVerificationFragment : GiBaseFragment(), OKYCListener {
}
if (error?.errorCode != ApiConstants.AADHAAR_USER_CANCELLED) {
viewModel.saveAadhaarVerificationData(aadhaarVerificationData)
viewModel.postAadhaarVerificationData(aadhaarVerificationData)
if(viewModel.isNaviOnePRofileEnabled) {
val params = viewModel.ctaData?.parameters?.toMutableList()
params?.add(LineItem(REQUEST_ATTR_QUERY_PARAMS, convertObjectToJsonString(aadhaarVerificationData)))
params?.add(LineItem(PAGE_TYPE, arguments?.getString(PAGE_TYPE)))
var redirectionCta = viewModel.ctaData?.copy(
parameters = params
)
handleCta(viewModel.ctaData)
} else {viewModel.postAadhaarVerificationData(aadhaarVerificationData)}
}
}

View File

@@ -3,6 +3,7 @@ package com.navi.insurance.kyc.viewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.navi.base.model.CtaData
import com.navi.common.ResponseState
import com.navi.common.constants.VENDOR_NAVI_API
import com.navi.common.di.CoroutineDispatcherProvider
@@ -70,6 +71,7 @@ class AadhaarVerificationVM @Inject constructor(
var okycFormEnabled = false
var isNaviOnePRofileEnabled = false
var ctaData: CtaData? = null
var screenName: String? = null
@@ -112,6 +114,10 @@ class AadhaarVerificationVM @Inject constructor(
isNaviOnePRofileEnabled = enabled
}
fun setNavigationCta(cta: CtaData?) {
ctaData = cta
}
fun fetchAadhaarInitResponse() {
viewModelScope.launch(coroutineExceptionHandler(ApiErrorTagType.AADHAAR_INIT_RESPONSE_ERROR.value)) {
_aadhaarVerificationInitResponseStateFlow.value = AadhaarInitResponseState.Loading
@@ -136,24 +142,15 @@ class AadhaarVerificationVM @Inject constructor(
if(okycFormEnabled) {
_formNextPageCtaResponseFlow.emit(ResponseState.Loading)
(_aadhaarVerificationInitResponseStateFlow.value as? AadhaarInitResponseState.Success)?.data?.let { aadhaarVerifyInitDetails ->
val response = if (isNaviOnePRofileEnabled) {
aadhaarVerificationRepository.postNaviOneProfileData(
getFormRequestData(
aadhaarVerificationData,
aadhaarVerifyInitDetails.pageType
)
)
} else {
aadhaarVerificationRepository.doNextPageFormRequest(
getFormRequestData(
aadhaarVerificationData,
aadhaarVerifyInitDetails.pageType
),
aadhaarVerifyInitDetails.applicationId.orEmpty(),
aadhaarVerifyInitDetails.transitionKey.orEmpty(),
aadhaarVerifyInitDetails.journeyKey.orEmpty()
)
}
val response = aadhaarVerificationRepository.doNextPageFormRequest(
getFormRequestData(
aadhaarVerificationData,
aadhaarVerifyInitDetails.pageType
),
aadhaarVerifyInitDetails.applicationId.orEmpty(),
aadhaarVerifyInitDetails.transitionKey.orEmpty(),
aadhaarVerifyInitDetails.journeyKey.orEmpty()
)
if (response.error == null && response.errors.isNullOrEmpty() && response.data != null) {
_formNextPageCtaResponseFlow.emit(ResponseState.Success(response.data!!))
} else {