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.
		
		
		
		
		
			
		
			
				
					
					
						
							46 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							46 lines
						
					
					
						
							1.4 KiB
						
					
					
				# frozen_string_literal: true
 | 
						|
 | 
						|
module Api
 | 
						|
  class SubmissionDocumentsController < ApiBaseController
 | 
						|
    load_and_authorize_resource :submission
 | 
						|
 | 
						|
    def index
 | 
						|
      documents =
 | 
						|
        if @submission.submitters.all?(&:completed_at?)
 | 
						|
          last_submitter = @submission.submitters.max_by(&:completed_at)
 | 
						|
 | 
						|
          if last_submitter.documents_attachments.blank?
 | 
						|
            last_submitter.documents_attachments = Submissions::EnsureResultGenerated.call(last_submitter)
 | 
						|
          end
 | 
						|
 | 
						|
          last_submitter.documents_attachments
 | 
						|
        else
 | 
						|
          values_hash = Submissions::GeneratePreviewAttachments.build_values_hash(@submission)
 | 
						|
 | 
						|
          if @submission.preview_documents.present? &&
 | 
						|
             @submission.preview_documents.all? { |s| s.metadata['values_hash'] == values_hash }
 | 
						|
            @submission.preview_documents
 | 
						|
          else
 | 
						|
            ApplicationRecord.no_touching do
 | 
						|
              @submission.preview_documents.each(&:destroy)
 | 
						|
            end
 | 
						|
 | 
						|
            Submissions::GeneratePreviewAttachments.call(@submission, values_hash:)
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
      ActiveRecord::Associations::Preloader.new(
 | 
						|
        records: documents,
 | 
						|
        associations: [:blob]
 | 
						|
      ).call
 | 
						|
 | 
						|
      render json: {
 | 
						|
        id: @submission.id,
 | 
						|
        documents: documents.map do |attachment|
 | 
						|
          { name: attachment.filename.base, url: ActiveStorage::Blob.proxy_url(attachment.blob) }
 | 
						|
        end
 | 
						|
      }
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |