From ff74574e84a2d9b866641ce0d3695255c0f0311a Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Sat, 10 Feb 2024 19:38:03 +0200 Subject: [PATCH] adjust api completion --- .rubocop.yml | 2 +- app/controllers/api/submissions_controller.rb | 27 +++++++++++++++---- app/controllers/api/submitters_controller.rb | 2 ++ app/models/submission_event.rb | 3 ++- lib/submission_events.rb | 3 ++- lib/submissions.rb | 2 +- lib/submissions/ensure_result_generated.rb | 6 +++-- lib/submissions/generate_audit_trail.rb | 1 + 8 files changed, 35 insertions(+), 11 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index bde22067..2a10dcf8 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -30,7 +30,7 @@ Metrics/ParameterLists: Max: 10 Metrics/MethodLength: - Max: 25 + Max: 30 Exclude: - 'db/migrate/**' diff --git a/app/controllers/api/submissions_controller.rb b/app/controllers/api/submissions_controller.rb index fbf2b621..0f0e2c61 100644 --- a/app/controllers/api/submissions_controller.rb +++ b/app/controllers/api/submissions_controller.rb @@ -33,12 +33,18 @@ module Api def show submitters = @submission.submitters.preload(documents_attachments: :blob, attachments_attachments: :blob) - serialized_submitters = submitters.map do |submitter| - Submissions::EnsureResultGenerated.call(submitter) if submitter.completed_at? + submitters.each do |submitter| + if submitter.completed_at? && submitter.documents_attachments.blank? + submitter.documents_attachments = Submissions::EnsureResultGenerated.call(submitter) + end + end - Submitters::SerializeForApi.call(submitter) + if @submission.audit_trail_attachment.blank? && submitters.all?(&:completed_at?) + @submission.audit_trail_attachment = Submissions::GenerateAuditTrail.call(@submission) end + serialized_submitters = submitters.map { |submitter| Submitters::SerializeForApi.call(submitter) } + json = @submission.as_json( serialize_params.deep_merge( include: { submission_events: { only: %i[id submitter_id event_type event_timestamp] } } @@ -80,6 +86,12 @@ module Api Submissions.send_signature_requests(submissions) + submissions.each do |submission| + if submission.submitters.all?(&:completed_at?) && submission.submitters.last + ProcessSubmitterCompletionJob.perform_later(submission.submitters.last) + end + end + render json: submissions.flat_map(&:submitters) rescue Submitters::NormalizeValues::UnknownFieldName, Submitters::NormalizeValues::UnknownSubmitterName => e render json: { error: e.message }, status: :unprocessable_entity @@ -118,8 +130,13 @@ module Api params: ) - Submissions::NormalizeParamUtils.save_default_value_attachments!(attachments, - submissions.flat_map(&:submitters)) + submitters = submissions.flat_map(&:submitters) + + Submissions::NormalizeParamUtils.save_default_value_attachments!(attachments, submitters) + + submitters.each do |submitter| + SubmissionEvents.create_with_tracking_data(submitter, 'api_complete_form', request) if submitter.completed_at? + end submissions end diff --git a/app/controllers/api/submitters_controller.rb b/app/controllers/api/submitters_controller.rb index 03fed6f3..f69f43f3 100644 --- a/app/controllers/api/submitters_controller.rb +++ b/app/controllers/api/submitters_controller.rb @@ -55,6 +55,8 @@ module Api @submitter.save! @submitter.submission.save! + + SubmissionEvents.create_with_tracking_data(@submitter, 'api_complete_form', request) if @submitter.completed_at? end if @submitter.completed_at? diff --git a/app/models/submission_event.rb b/app/models/submission_event.rb index e9b57e14..783c2a25 100644 --- a/app/models/submission_event.rb +++ b/app/models/submission_event.rb @@ -46,7 +46,8 @@ class SubmissionEvent < ApplicationRecord phone_verified: 'phone_verified', start_form: 'start_form', view_form: 'view_form', - complete_form: 'complete_form' + complete_form: 'complete_form', + api_complete_form: 'api_complete_form' }, scope: false private diff --git a/lib/submission_events.rb b/lib/submission_events.rb index 1bb4a68f..0c6fe4c8 100644 --- a/lib/submission_events.rb +++ b/lib/submission_events.rb @@ -14,7 +14,8 @@ module SubmissionEvents phone_verified: 'Phone verified', start_form: 'Submission started', view_form: 'Form viewed', - complete_form: 'Submission completed' + complete_form: 'Submission completed', + api_complete_form: 'Submission completed via API' }.freeze module_function diff --git a/lib/submissions.rb b/lib/submissions.rb index 3a3e2071..733bc28c 100644 --- a/lib/submissions.rb +++ b/lib/submissions.rb @@ -66,7 +66,7 @@ module Submissions first_submitter = submission.template_submitters.filter_map { |s| submitters.find { |e| e.uuid == s['uuid'] } }.first - Submitters.send_signature_requests([first_submitter]) + Submitters.send_signature_requests([first_submitter]) if first_submitter else Submitters.send_signature_requests(submitters) end diff --git a/lib/submissions/ensure_result_generated.rb b/lib/submissions/ensure_result_generated.rb index cbc61028..cc83cbd2 100644 --- a/lib/submissions/ensure_result_generated.rb +++ b/lib/submissions/ensure_result_generated.rb @@ -23,9 +23,11 @@ module Submissions else submitter.document_generation_events.create!(event_name: events.present? ? :retry : :start) - GenerateResultAttachments.call(submitter) + documents = GenerateResultAttachments.call(submitter) submitter.document_generation_events.create!(event_name: :complete) + + documents end rescue ActiveRecord::RecordNotUnique sleep WAIT_FOR_RETRY @@ -49,7 +51,7 @@ module Submissions DocumentGenerationEvent.where(submitter:).order(:created_at).last end - break last_event if last_event.event_name.in?(%w[complete fail]) + break submitter.documents if last_event.event_name.in?(%w[complete fail]) raise WaitForCompleteTimeout if total_wait_time > CHECK_COMPLETE_TIMEOUT end diff --git a/lib/submissions/generate_audit_trail.rb b/lib/submissions/generate_audit_trail.rb index 1fe844c1..65ac5ed8 100644 --- a/lib/submissions/generate_audit_trail.rb +++ b/lib/submissions/generate_audit_trail.rb @@ -279,6 +279,7 @@ module Submissions sign_params = { reason: SIGN_REASON, certificate: pkcs.certificate, + doc_mdp_permissions: :no_changes, key: pkcs.key, certificate_chain: pkcs.ca_certs || [] }