mirror of https://github.com/docusealco/docuseal
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							50 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							50 lines
						
					
					
						
							1.6 KiB
						
					
					
				# frozen_string_literal: true
 | 
						|
 | 
						|
module Submissions
 | 
						|
  module SerializeForApi
 | 
						|
    SERIALIZE_PARAMS = {
 | 
						|
      only: %i[id slug source submitters_order created_at updated_at archived_at],
 | 
						|
      methods: %i[audit_log_url],
 | 
						|
      include: {
 | 
						|
        submitters: { only: %i[id slug uuid name email phone
 | 
						|
                               completed_at opened_at sent_at
 | 
						|
                               created_at updated_at external_id metadata],
 | 
						|
                      methods: %i[status application_key] },
 | 
						|
        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] }
 | 
						|
      }
 | 
						|
    }.freeze
 | 
						|
 | 
						|
    module_function
 | 
						|
 | 
						|
    def call(submission, submitters = nil)
 | 
						|
      submitters ||= submission.submitters.preload(documents_attachments: :blob, attachments_attachments: :blob)
 | 
						|
 | 
						|
      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] } }
 | 
						|
        )
 | 
						|
      )
 | 
						|
 | 
						|
      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
 | 
						|
 | 
						|
      json
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |