diff --git a/app/controllers/api/submissions_controller.rb b/app/controllers/api/submissions_controller.rb index 373a3450..c5acf75f 100644 --- a/app/controllers/api/submissions_controller.rb +++ b/app/controllers/api/submissions_controller.rb @@ -31,24 +31,33 @@ module Api end def show - serialized_subbmitters = - @submission.submitters.preload(documents_attachments: :blob, attachments_attachments: :blob).map do |submitter| - Submissions::EnsureResultGenerated.call(submitter) if submitter.completed_at? + submitters = @submission.submitters.preload(documents_attachments: :blob, attachments_attachments: :blob) - Submitters::SerializeForApi.call(submitter) - end + serialized_submitters = submitters.map do |submitter| + Submissions::EnsureResultGenerated.call(submitter) if submitter.completed_at? + + Submitters::SerializeForApi.call(submitter) + end json = @submission.as_json( serialize_params.deep_merge( - include: { - submission_events: { - only: %i[id submitter_id event_type event_timestamp] - } - } + include: { submission_events: { only: %i[id submitter_id event_type event_timestamp] } } ) ) - json[:submitters] = serialized_subbmitters + if submitters.all?(&:completed_at?) + last_submitter = submitters.max_by(&:completed_at) + + json[:documents] = serialized_submitters.find { |e| e['id'] == last_submitter.id }['documents'] + json[:status] = 'completed' + json[:completed_at] = last_submitter.completed_at + else + json[:documents] = [] + json[:status] = 'pending' + json[:completed_at] = nil + end + + json[:submitters] = serialized_submitters render json: end diff --git a/lib/submitters/serialize_for_api.rb b/lib/submitters/serialize_for_api.rb index 8c486f43..aa261158 100644 --- a/lib/submitters/serialize_for_api.rb +++ b/lib/submitters/serialize_for_api.rb @@ -19,7 +19,8 @@ module Submitters serialize_params = { include: {}, only: %i[id slug uuid name email phone completed_at application_key - opened_at sent_at created_at updated_at] + opened_at sent_at created_at updated_at], + methods: %i[status] } serialize_params[:include][:template] = { only: %i[id name created_at updated_at] } if with_template