@@ -31,16 +31,41 @@ def perform(params = {})
3131 enqueue_completed_webhooks ( submitter , is_all_completed :)
3232 end
3333
34+ MAX_RETRY_ATTEMPTS = 5
35+
3436 def create_completed_submitter! ( submitter )
37+ retry_attempts ||= 0
3538 completed_submitter = CompletedSubmitter . find_or_initialize_by ( submitter_id : submitter . id )
3639
3740 return completed_submitter if completed_submitter . persisted?
3841
39- submission = submitter . submission
42+ verification_method , sms_count = extract_verification_data ( submitter )
43+
44+ completed_submitter . assign_attributes (
45+ submission_id : submitter . submission_id ,
46+ account_id : submitter . submission . account_id ,
47+ is_first : !CompletedSubmitter . exists? ( submission : submitter . submission_id , is_first : true ) ,
48+ template_id : submitter . submission . template_id ,
49+ source : submitter . submission . source ,
50+ sms_count :,
51+ verification_method :,
52+ completed_at : submitter . completed_at
53+ )
4054
55+ completed_submitter . save!
56+ completed_submitter
57+ rescue ActiveRecord ::RecordNotUnique
58+ retry_attempts += 1
59+ raise if retry_attempts >= MAX_RETRY_ATTEMPTS
60+
61+ sleep 0.1 * retry_attempts
62+ retry
63+ end
64+
65+ def extract_verification_data ( submitter )
4166 complete_verification_events , sms_events =
4267 submitter . submission_events . where ( event_type : %i[ send_sms send_2fa_sms complete_verification complete_kba ] )
43- . partition { |e | e . event_type == ' complete_verification' || e . event_type == ' complete_kba' }
68+ . partition { |e | e . event_type . in? ( %w[ complete_verification complete_kba ] ) }
4469
4570 complete_verification_event = complete_verification_events . first
4671
@@ -51,22 +76,9 @@ def create_completed_submitter!(submitter)
5176 complete_verification_event . data [ 'method' ]
5277 end
5378
54- completed_submitter . assign_attributes (
55- submission_id : submitter . submission_id ,
56- account_id : submission . account_id ,
57- is_first : !CompletedSubmitter . exists? ( submission : submitter . submission_id , is_first : true ) ,
58- template_id : submission . template_id ,
59- source : submission . source ,
60- sms_count : sms_events . sum { |e | e . data [ 'segments' ] || 1 } ,
61- verification_method :,
62- completed_at : submitter . completed_at
63- )
64-
65- completed_submitter . save!
79+ sms_count = sms_events . sum { |e | e . data [ 'segments' ] || 1 }
6680
67- completed_submitter
68- rescue ActiveRecord ::RecordNotUnique
69- retry
81+ [ verification_method , sms_count ]
7082 end
7183
7284 def create_completed_documents! ( submitter )
0 commit comments