diff --git a/app/controllers/api/submissions_controller.rb b/app/controllers/api/submissions_controller.rb index 4c237bb2..88601355 100644 --- a/app/controllers/api/submissions_controller.rb +++ b/app/controllers/api/submissions_controller.rb @@ -23,7 +23,10 @@ module Api audit_trail_attachment: :blob)) render json: { - data: submissions.as_json(Submissions::SerializeForApi::SERIALIZE_PARAMS), + data: submissions.map do |s| + Submissions::SerializeForApi.call(s, s.submitters, params, + with_events: false, with_documents: false, with_values: false) + end, pagination: { count: submissions.size, next: submissions.last&.id, diff --git a/lib/submissions/serialize_for_api.rb b/lib/submissions/serialize_for_api.rb index f490171e..e32d7b48 100644 --- a/lib/submissions/serialize_for_api.rb +++ b/lib/submissions/serialize_for_api.rb @@ -6,10 +6,7 @@ module Submissions only: %i[id slug source submitters_order expire_at created_at updated_at archived_at], methods: %i[audit_log_url combined_document_url], include: { - submitters: { only: %i[id slug uuid name email phone - completed_at opened_at sent_at declined_at - created_at updated_at external_id metadata], - methods: %i[status application_key] }, + submitters: { only: %i[id] }, template: { only: %i[id name external_id created_at updated_at], methods: %i[folder_name] }, created_by_user: { only: %i[id email first_name last_name] } @@ -18,29 +15,35 @@ module Submissions module_function - def call(submission, submitters = nil, params = {}) + def call(submission, submitters = nil, params = {}, with_events: true, with_documents: true, with_values: true) submitters ||= submission.submitters.preload(documents_attachments: :blob, attachments_attachments: :blob) - serialized_submitters = submitters.map { |submitter| Submitters::SerializeForApi.call(submitter, params:) } + serialized_submitters = submitters.map do |submitter| + Submitters::SerializeForApi.call(submitter, with_documents:, with_events: false, with_values:, params:) + end json = submission.as_json(SERIALIZE_PARAMS) - json['submission_events'] = Submitters::SerializeForApi.serialize_events(submission.submission_events) + json['created_by_user'] ||= nil + + if with_events + json['submission_events'] = Submitters::SerializeForApi.serialize_events(submission.submission_events) + end + json['combined_document_url'] ||= maybe_build_combined_url(submitters, submission, params) if submitters.all?(&:completed_at?) last_submitter = submitters.max_by(&:completed_at) - json[:documents] = serialized_submitters.find { |e| e['id'] == last_submitter.id }['documents'] + if with_documents + json[:documents] = serialized_submitters.find { |e| e['id'] == last_submitter.id }['documents'] + end + json[:status] = 'completed' json[:completed_at] = last_submitter.completed_at else - json[:documents] = [] - json[:status] = if submitters.any?(&:declined_at?) - 'declined' - else - submission.expired? ? 'expired' : 'pending' - end + json[:documents] = [] if with_documents + json[:status] = build_status(submission, submitters) json[:completed_at] = nil end @@ -49,6 +52,14 @@ module Submissions json end + def build_status(submission, submitters) + if submitters.any?(&:declined_at?) + 'declined' + else + submission.expired? ? 'expired' : 'pending' + end + end + def maybe_build_combined_url(submitters, submission, params) return unless submitters.all?(&:completed_at?) diff --git a/lib/submitters/serialize_for_api.rb b/lib/submitters/serialize_for_api.rb index 297bf957..ef17189e 100644 --- a/lib/submitters/serialize_for_api.rb +++ b/lib/submitters/serialize_for_api.rb @@ -10,12 +10,13 @@ module Submitters module_function - def call(submitter, with_template: false, with_events: false, with_documents: true, with_urls: false, params: {}) + def call(submitter, with_template: false, with_events: false, with_documents: true, with_urls: false, + with_values: true, params: {}) ActiveRecord::Associations::Preloader.new( records: [submitter], associations: if with_documents [documents_attachments: :blob, attachments_attachments: :blob] - else + elsif with_values [attachments_attachments: :blob] end ).call @@ -26,7 +27,7 @@ module Submitters additional_attrs['fields'] = SerializeForWebhook.build_fields_array(submitter) end - additional_attrs['values'] = SerializeForWebhook.build_values_array(submitter) + additional_attrs['values'] = SerializeForWebhook.build_values_array(submitter) if with_values additional_attrs['documents'] = SerializeForWebhook.build_documents_array(submitter) if with_documents additional_attrs['preferences'] = submitter.preferences.except('default_values') additional_attrs['submission_events'] = serialize_events(submitter.submission_events) if with_events