@@ -27,18 +27,22 @@ import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerOptOu
2727import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordEmailConfirmationCompleted
2828import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordEmailConfirmationNeeded
2929import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordEmailConfirmationStarted
30- import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutCompleted
30+ import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutFailed
3131import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutStarted
32+ import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutSubmitted
3233import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerScanActionFailed
3334import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerScanActionSucceeded
3435import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerScheduledScanCompleted
3536import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerScheduledScanStarted
3637import com.duckduckgo.pir.impl.models.AddressCityState
3738import com.duckduckgo.pir.impl.models.ExtractedProfile
3839import com.duckduckgo.pir.impl.pixels.PirPixelSender
40+ import com.duckduckgo.pir.impl.pixels.PirStage
3941import com.duckduckgo.pir.impl.scheduling.JobRecordUpdater
42+ import com.duckduckgo.pir.impl.scripts.models.BrokerAction
4043import com.duckduckgo.pir.impl.scripts.models.PirSuccessResponse
4144import com.duckduckgo.pir.impl.scripts.models.PirSuccessResponse.ExtractedResponse
45+ import com.duckduckgo.pir.impl.scripts.models.asActionType
4246import com.duckduckgo.pir.impl.store.PirEventsRepository
4347import com.duckduckgo.pir.impl.store.PirRepository
4448import com.duckduckgo.pir.impl.store.PirSchedulingRepository
@@ -127,12 +131,26 @@ interface PirRunStateHandler {
127131 val extractedProfile : ExtractedProfile ,
128132 ) : PirRunState(brokerName)
129133
130- data class BrokerRecordOptOutCompleted (
134+ data class BrokerRecordOptOutSubmitted (
131135 override val brokerName : String ,
132136 val extractedProfile : ExtractedProfile ,
137+ val attemptId : String ,
138+ val startTimeInMillis : Long ,
139+ val endTimeInMillis : Long ,
140+ val tries : Int ,
141+ val emailPattern : String? ,
142+ ) : PirRunState(brokerName)
143+
144+ data class BrokerRecordOptOutFailed (
145+ override val brokerName : String ,
146+ val extractedProfile : ExtractedProfile ,
147+ val attemptId : String ,
133148 val startTimeInMillis : Long ,
134149 val endTimeInMillis : Long ,
135- val isSubmitSuccess : Boolean ,
150+ val failedAction : BrokerAction ,
151+ val tries : Int ,
152+ val stage : PirStage ,
153+ val emailPattern : String? ,
136154 ) : PirRunState(brokerName)
137155
138156 data class BrokerOptOutActionSucceeded (
@@ -177,7 +195,8 @@ class RealPirRunStateHandler @Inject constructor(
177195 is BrokerScanActionSucceeded -> handleBrokerScanActionSucceeded(pirRunState)
178196 is BrokerScanActionFailed -> handleBrokerScanActionFailed(pirRunState)
179197 is BrokerRecordOptOutStarted -> handleRecordOptOutStarted(pirRunState)
180- is BrokerRecordOptOutCompleted -> handleRecordOptOutCompleted(pirRunState)
198+ is BrokerRecordOptOutSubmitted -> handleBrokerRecordOptOutSubmitted(pirRunState)
199+ is BrokerRecordOptOutFailed -> handleBrokerRecordOptOutFailed(pirRunState)
181200 is BrokerOptOutActionSucceeded -> handleBrokerOptOutActionSucceeded(pirRunState)
182201 is BrokerOptOutActionFailed -> handleBrokerOptOutActionFailed(pirRunState)
183202 is BrokerRecordEmailConfirmationNeeded -> handleBrokerRecordEmailConfirmationNeeded(pirRunState)
@@ -406,19 +425,55 @@ class RealPirRunStateHandler @Inject constructor(
406425 )
407426 }
408427
409- private suspend fun handleRecordOptOutCompleted (state : BrokerRecordOptOutCompleted ) {
410- updateOptOutRecord(state.isSubmitSuccess, state.extractedProfile.dbId)
411- pixelSender.reportOptOutCompleted(
428+ private suspend fun handleBrokerRecordOptOutSubmitted (state : BrokerRecordOptOutSubmitted ) {
429+ val broker = repository.getBrokerForName(state.brokerName)
430+ updateOptOutRecord(true , state.extractedProfile.dbId)
431+
432+ if (broker == null ) return
433+
434+ pixelSender.reportOptOutSubmitted(
435+ brokerUrl = broker.url,
436+ parent = broker.parent ? : " " ,
437+ attemptId = state.attemptId,
438+ durationMs = state.endTimeInMillis - state.startTimeInMillis,
439+ tries = state.tries,
440+ emailPattern = state.emailPattern,
441+ )
442+
443+ eventsRepository.saveOptOutCompleted(
412444 brokerName = state.brokerName,
413- totalTimeInMillis = state.endTimeInMillis - state.startTimeInMillis,
414- isSuccess = state.isSubmitSuccess,
445+ extractedProfile = state.extractedProfile,
446+ startTimeInMillis = state.startTimeInMillis,
447+ endTimeInMillis = state.endTimeInMillis,
448+ isSubmitSuccess = true ,
415449 )
450+ }
451+
452+ private suspend fun handleBrokerRecordOptOutFailed (state : BrokerRecordOptOutFailed ) {
453+ val broker = repository.getBrokerForName(state.brokerName)
454+ updateOptOutRecord(false , state.extractedProfile.dbId)
455+
456+ if (broker == null ) return
457+
458+ pixelSender.reportOptOutFailed(
459+ brokerUrl = broker.url,
460+ parent = broker.parent ? : " " ,
461+ brokerJsonVersion = broker.version,
462+ attemptId = state.attemptId,
463+ durationMs = state.endTimeInMillis - state.startTimeInMillis,
464+ tries = state.tries,
465+ emailPattern = state.emailPattern,
466+ stage = state.stage,
467+ actionId = state.failedAction.id,
468+ actionType = state.failedAction.asActionType(),
469+ )
470+
416471 eventsRepository.saveOptOutCompleted(
417472 brokerName = state.brokerName,
418473 extractedProfile = state.extractedProfile,
419474 startTimeInMillis = state.startTimeInMillis,
420475 endTimeInMillis = state.endTimeInMillis,
421- isSubmitSuccess = state.isSubmitSuccess ,
476+ isSubmitSuccess = false ,
422477 )
423478 }
424479
0 commit comments