def failed_send_handler( participant: Participant, fcm_token: str, error_message: str, schedules: List[ScheduledEvent] ): """ Contains body of code for unregistering a participants push notification behavior. Participants get reenabled when they next touch the app checkin endpoint. """ if participant.push_notification_unreachable_count >= PUSH_NOTIFICATION_ATTEMPT_COUNT: now = timezone.now() fcm_hist = ParticipantFCMHistory.objects.get(token=fcm_token) fcm_hist.unregistered = now fcm_hist.save() PushNotificationDisabledEvent( participant=participant, timestamp=now, count=participant.push_notification_unreachable_count ).save() # disable the credential participant.push_notification_unreachable_count = 0 participant.save() print(f"Participant {participant.patient_id} has had push notifications " f"disabled after {PUSH_NOTIFICATION_ATTEMPT_COUNT} failed attempts to send.") else: now = None participant.push_notification_unreachable_count += 1 participant.save() print(f"Participant {participant.patient_id} has had push notifications failures " f"incremented to {participant.push_notification_unreachable_count}.") create_archived_events(schedules, success=False, created_on=now, status=error_message) enqueue_weekly_surveys(participant, schedules)
def success_send_handler(participant: Participant, fcm_token: str, schedules: List[ScheduledEvent]): # If the query was successful archive the schedules. Clear the fcm unregistered flag # if it was set (this shouldn't happen. ever. but in case we hook in a ui element we need it.) print(f"Push notification send succeeded for {participant.patient_id}.") # this condition shouldn't occur. Leave in, this case would be super stupid to diagnose. fcm_hist = ParticipantFCMHistory.objects.get(token=fcm_token) if fcm_hist.unregistered is not None: fcm_hist.unregistered = None fcm_hist.save() participant.push_notification_unreachable_count = 0 participant.save() create_archived_events(schedules, success=True, status=ArchivedEvent.SUCCESS) enqueue_weekly_surveys(participant, schedules)