From 796164c6053b54384e44d801c0acff36fbfb9142 Mon Sep 17 00:00:00 2001 From: Kishan Kumar Date: Mon, 15 Jul 2024 16:33:50 +0530 Subject: [PATCH] NTP-906 | optimisation for upi scratch card (#11794) --- .../helper/ScratchCardNudgeHelper.kt | 2 + .../helper/ScratchCardNudgeHelperImpl.kt | 38 +++++++++++++++++-- .../model/GratificationResponse.kt | 3 +- .../navi/rr/scratchcard/model/ScratchCard.kt | 1 + 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelper.kt b/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelper.kt index dbe828bafc..dcc62fce5a 100644 --- a/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelper.kt +++ b/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelper.kt @@ -16,4 +16,6 @@ interface ScratchCardNudgeHelper { suspend fun getNudgeDetails(product: String, objective: String): RewardNudgeApiStatus fun getGratification(requestId: String, screenName: String): Flow + + suspend fun getGratificationV2(key: String, requestId: String, screenName: String) } diff --git a/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelperImpl.kt b/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelperImpl.kt index b06853086e..9a0afc4adb 100644 --- a/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelperImpl.kt +++ b/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelperImpl.kt @@ -8,6 +8,8 @@ package com.navi.rr.scratchcard.helper import com.google.gson.Gson +import com.navi.base.cache.model.NaviCacheEntity +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 @@ -36,14 +38,20 @@ import javax.inject.Inject import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.Deferred import kotlinx.coroutines.async +import kotlinx.coroutines.cancel import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.launch import org.json.JSONObject -class ScratchCardNudgeHelperImpl @Inject constructor(private val scratchCardRepo: ScratchCardRepo) : - ScratchCardNudgeHelper { +class ScratchCardNudgeHelperImpl +@Inject +constructor( + private val scratchCardRepo: ScratchCardRepo, + private val naviCacheRepository: NaviCacheRepository +) : ScratchCardNudgeHelper { private val eventTracker by lazy { NaviRRAnalytics.naviRRAnalytics.Rewards() } @@ -82,6 +90,30 @@ class ScratchCardNudgeHelperImpl @Inject constructor(private val scratchCardRepo } } + override suspend fun getGratificationV2( + key: String, + requestId: String, + screenName: String, + ) { + coroutineScope { + getGratification(requestId = requestId, screenName = screenName).collect { + response: GratificationStatus -> + when (response) { + is GratificationStatus.Success -> { + response.data.scratchCardResponse?.requestId = requestId + } + is GratificationStatus.Timeout -> { + response.requestId = requestId + } + } + naviCacheRepository.save( + NaviCacheEntity(key = key, value = response.toJson(), version = 1) + ) + cancel() + } + } + } + override fun getGratification( requestId: String, screenName: String, @@ -138,7 +170,7 @@ class ScratchCardNudgeHelperImpl @Inject constructor(private val scratchCardRepo .startPolling( onTimeout = { if (responseProcessed.compareAndSet(false, true)) { - send(GratificationStatus.Timeout) + send(GratificationStatus.Timeout()) } } ) { diff --git a/android/navi-rr/src/main/java/com/navi/rr/scratchcard/model/GratificationResponse.kt b/android/navi-rr/src/main/java/com/navi/rr/scratchcard/model/GratificationResponse.kt index deace0ad8c..d5daaac76b 100644 --- a/android/navi-rr/src/main/java/com/navi/rr/scratchcard/model/GratificationResponse.kt +++ b/android/navi-rr/src/main/java/com/navi/rr/scratchcard/model/GratificationResponse.kt @@ -15,7 +15,8 @@ data class GratificationResponse( ) sealed interface GratificationStatus { - data object Timeout : GratificationStatus + + data class Timeout(var requestId: String? = null) : GratificationStatus data class Success(val data: GratificationResponse) : GratificationStatus } diff --git a/android/navi-rr/src/main/java/com/navi/rr/scratchcard/model/ScratchCard.kt b/android/navi-rr/src/main/java/com/navi/rr/scratchcard/model/ScratchCard.kt index 915817a760..20893a52c9 100644 --- a/android/navi-rr/src/main/java/com/navi/rr/scratchcard/model/ScratchCard.kt +++ b/android/navi-rr/src/main/java/com/navi/rr/scratchcard/model/ScratchCard.kt @@ -41,6 +41,7 @@ data class ScratchCardBackData( data class ScratchCardResponse( val rewardRefId: String? = null, + var requestId: String? = null, val amount: Int? = null, val rewardType: String? = null, val rewardForm: String? = null,