NTP-42969 | Gold first investment reward migration (#15248)
Co-authored-by: Varun Jain <varun.jain@navi.com>
This commit is contained in:
@@ -72,7 +72,7 @@ data class ExtraDataDetails(
|
||||
@SerializedName("sipInfo") val sipInfo: SipInfo? = null,
|
||||
@SerializedName("loaderScreen") val loaderScreen: ActionCheckResponse? = null,
|
||||
@SerializedName("isUserInvested") val isUserInvested: Boolean? = null,
|
||||
@SerializedName("isScratchCardEnabled") val isScratchCardEnabled: Boolean? = null,
|
||||
@SerializedName("reward") val reward: Reward? = null,
|
||||
) : Parcelable
|
||||
|
||||
@Parcelize data class CacheConfig(val ttl: Long? = 0, val maxConsumptions: Int? = 0) : Parcelable
|
||||
@@ -154,3 +154,12 @@ data class SipInfo(
|
||||
@SerializedName("installmentDate") val installmentDate: Int? = null,
|
||||
@SerializedName("source") val source: String? = null,
|
||||
) : Parcelable
|
||||
|
||||
@Parcelize
|
||||
data class Reward(
|
||||
@SerializedName("isScratchCardEnabled") val isScratchCardEnabled: Boolean? = null,
|
||||
@SerializedName("actionData") val actionData: ActionData? = null,
|
||||
@SerializedName("sourceType") val sourceType: String? = null,
|
||||
@SerializedName("scratchCardRewardType") val scratchCardRewardType: String? = null,
|
||||
@SerializedName("rewardEventId") val rewardEventId: String? = null,
|
||||
) : Parcelable
|
||||
|
||||
@@ -67,6 +67,9 @@ import com.navi.gold.util.CommonUtils.updateColorsBasedOnPosition
|
||||
import com.navi.gold.util.Constants
|
||||
import com.navi.gold.util.Constants.CSAT_POPUP_DELAY
|
||||
import com.navi.gold.util.Constants.CSAT_POPUP_DELAY_TIME
|
||||
import com.navi.gold.util.Constants.GOLD_FIRST_INVESTMENT
|
||||
import com.navi.gold.util.Constants.NAVI_UPI_TXN
|
||||
import com.navi.gold.util.Constants.NONE
|
||||
import com.navi.gold.util.Constants.REDIRECTION_SOURCE
|
||||
import com.navi.gold.util.Constants.SHOW_REWARD_GRATIFICATION
|
||||
import com.navi.gold.util.Constants.TYPE
|
||||
@@ -256,19 +259,7 @@ class DigitalGoldTransactionActivity : BaseActivity(), WidgetCallback, CsatCompl
|
||||
}
|
||||
?: run {
|
||||
setPageContent(widgetResponse)
|
||||
|
||||
widgetResponse.extraData?.screenDefinition?.let { screenDefinition ->
|
||||
val gratificationFragment =
|
||||
GratificationFragment.getInstance(
|
||||
gratificationData = Gson().toJson(screenDefinition),
|
||||
screenName = screenName,
|
||||
dialogDismissListener = {
|
||||
csatPopupDelay = 500
|
||||
startCsat(csatPopupDelay)
|
||||
},
|
||||
)
|
||||
safelyOpenFragment(gratificationFragment, GratificationFragment.TAG)
|
||||
} ?: run { handleScratchCardResponse(widgetResponse) }
|
||||
handleScratchCardResponse(widgetResponse)
|
||||
}
|
||||
|
||||
widgetResponse.extraData?.launchToastInfo?.contentWidget?.let { toastWidgets ->
|
||||
@@ -291,21 +282,38 @@ class DigitalGoldTransactionActivity : BaseActivity(), WidgetCallback, CsatCompl
|
||||
|
||||
viewModel.scratchCardResponse.observe(this@DigitalGoldTransactionActivity) {
|
||||
scratchCardResponse ->
|
||||
scratchCardSharedVm.setScratchCardScreenData(scratchCardResponse.data)
|
||||
scratchCardResponse?.data?.scratchCardResponse?.rewardForm?.let { rewardForm ->
|
||||
when (rewardForm) {
|
||||
NONE -> {
|
||||
scratchCardSharedVm.setScratchCardScreenData(scratchCardResponse.data)
|
||||
|
||||
val scratchCardFragment =
|
||||
ScratchCardFragment.getInstance(
|
||||
screenName = screenName,
|
||||
dialogDismissListener = { startCsat(CSAT_POPUP_DELAY_TIME) },
|
||||
)
|
||||
val scratchCardFragment =
|
||||
ScratchCardFragment.getInstance(
|
||||
screenName = screenName,
|
||||
dialogDismissListener = { startCsat(CSAT_POPUP_DELAY_TIME) },
|
||||
)
|
||||
|
||||
safelyOpenFragment(scratchCardFragment, ScratchCardFragment.TAG)
|
||||
safelyOpenFragment(scratchCardFragment, ScratchCardFragment.TAG)
|
||||
}
|
||||
else -> {
|
||||
val gratificationFragment =
|
||||
GratificationFragment.getInstance(
|
||||
gratificationData =
|
||||
Gson().toJson(scratchCardResponse.data.screenDefinition),
|
||||
screenName = screenName,
|
||||
dialogDismissListener = { startCsat(CSAT_POPUP_DELAY_TIME) },
|
||||
)
|
||||
|
||||
safelyOpenFragment(gratificationFragment, GratificationFragment.TAG)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleScratchCardResponse(widgetResponse: WidgetResponse) {
|
||||
if (widgetResponse.extraData?.isScratchCardEnabled.orFalse()) {
|
||||
if (widgetResponse.extraData?.reward?.isScratchCardEnabled.orFalse()) {
|
||||
fetchScratchCardData()
|
||||
} else {
|
||||
startCsat(CSAT_POPUP_DELAY_TIME)
|
||||
@@ -313,9 +321,29 @@ class DigitalGoldTransactionActivity : BaseActivity(), WidgetCallback, CsatCompl
|
||||
}
|
||||
|
||||
private fun fetchScratchCardData() {
|
||||
intent.getStringExtra(UPI_REQUEST_ID)?.let {
|
||||
viewModel.fetchScratchCardData(naviUpiRequestId = it, screenName = screenName)
|
||||
intent.removeExtra(UPI_REQUEST_ID)
|
||||
|
||||
viewModel.digitalGoldTransactionWidgets.value?.extraData?.reward?.let { rewardData ->
|
||||
val rewardEventId =
|
||||
when (rewardData.scratchCardRewardType) {
|
||||
GOLD_FIRST_INVESTMENT -> {
|
||||
rewardData.rewardEventId
|
||||
}
|
||||
NAVI_UPI_TXN -> {
|
||||
intent.getStringExtra(UPI_REQUEST_ID)?.let { rewardEventId ->
|
||||
intent.removeExtra(UPI_REQUEST_ID)
|
||||
rewardEventId
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
null
|
||||
}
|
||||
}
|
||||
rewardEventId?.let {
|
||||
viewModel.fetchScratchCardOrGratificationData(
|
||||
naviUpiRequestId = rewardEventId,
|
||||
screenName = screenName,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -83,4 +83,8 @@ object Constants {
|
||||
const val DIGITAL_GOLD_PAYMENT = "DIGITAL_GOLD_PAYMENT"
|
||||
const val GOLD_OFFER_BOTTOM_SHEET = "GOLD_OFFER_BOTTOM_SHEET"
|
||||
const val SHOW_OFFER_BOTTOMSHEET = "SHOW_OFFER_BOTTOMSHEET"
|
||||
const val SCRATCH_CARD = "SCRATCH_CARD"
|
||||
const val NONE = "NONE"
|
||||
const val GOLD_FIRST_INVESTMENT = "GOLD_FIRST_INVESTMENT"
|
||||
const val NAVI_UPI_TXN = "NAVI_UPI_TXN"
|
||||
}
|
||||
|
||||
@@ -192,7 +192,7 @@ constructor(
|
||||
this.isAutoClickConsumed = true
|
||||
}
|
||||
|
||||
fun fetchScratchCardData(naviUpiRequestId: String, screenName: String) {
|
||||
fun fetchScratchCardOrGratificationData(naviUpiRequestId: String, screenName: String) {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
scratchCardNudgeHelper
|
||||
.getGratification(requestId = naviUpiRequestId, screenName = screenName)
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.navi.base.cache.repository.NaviCacheRepository
|
||||
import com.navi.base.sharedpref.CommonPrefConstants
|
||||
import com.navi.base.sharedpref.PreferenceManager
|
||||
import com.navi.base.utils.FirestoreDataProviderImpl
|
||||
import com.navi.base.utils.isNotNull
|
||||
import com.navi.common.checkmate.model.MetricInfo
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.UPI_SCRATCH_CARD_REWARDS_POLLING_CONFIG
|
||||
@@ -328,6 +329,7 @@ constructor(
|
||||
amount = scratchCardData?.metadata?.subtitle,
|
||||
rewardType = scratchCardData?.rewardType,
|
||||
template = template,
|
||||
rewardForm = scratchCardData?.rewardForm,
|
||||
)
|
||||
template?.screenStructure?.templates?.get(screenTemplate)?.let {
|
||||
val inflatedTemplate =
|
||||
@@ -353,9 +355,17 @@ constructor(
|
||||
private fun getTemplateName(
|
||||
amount: String?,
|
||||
rewardType: String? = null,
|
||||
rewardForm: String? = null,
|
||||
template: ScreenDefinition?,
|
||||
): String? {
|
||||
val jsonMetaData = template?.jsonMetaData?.get(TEMPLATE_NAME).toJsonObject()
|
||||
if (rewardForm.isNotNull() && rewardForm == NONE) {
|
||||
return if (amount != ZERO_AMOUNT) {
|
||||
jsonMetaData?.optJSONObject(rewardType)?.getString(INSTANT_REWARD)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
return if (amount != ZERO_AMOUNT) {
|
||||
jsonMetaData?.optJSONObject(rewardType)?.getString(REWARD)
|
||||
} else {
|
||||
@@ -373,6 +383,8 @@ constructor(
|
||||
const val TEMPLATE_NAME = "templateName"
|
||||
const val REWARD = "REWARD"
|
||||
const val NO_REWARD = "NO_REWARD"
|
||||
const val INSTANT_REWARD = "INSTANT_REWARD"
|
||||
const val NONE = "NONE"
|
||||
const val ZERO_AMOUNT = "0"
|
||||
private val POLL_INTERVAL = 1.seconds // TODO("Need to check with product")
|
||||
private const val MAX_POLL_COUNT = 20 // TODO("Need to check with product")
|
||||
|
||||
Reference in New Issue
Block a user