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.
		
		
		
		
		
			
		
			
				
					
					
						
							53 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							53 lines
						
					
					
						
							1.8 KiB
						
					
					
				# frozen_string_literal: true
 | 
						|
 | 
						|
module Templates
 | 
						|
  module SerializeForApi
 | 
						|
    SERIALIZE_PARAMS = {
 | 
						|
      only: %w[
 | 
						|
        id archived_at fields name preferences schema
 | 
						|
        slug source submitters created_at updated_at
 | 
						|
        author_id external_id folder_id shared_link
 | 
						|
      ],
 | 
						|
      methods: %i[application_key folder_name],
 | 
						|
      include: { author: { only: %i[id email first_name last_name] } }
 | 
						|
    }.freeze
 | 
						|
 | 
						|
    module_function
 | 
						|
 | 
						|
    def call(template, schema_documents = template.schema_documents.preload(:blob), preview_image_attachments = nil)
 | 
						|
      json = template.as_json(SERIALIZE_PARAMS)
 | 
						|
 | 
						|
      preview_image_attachments ||=
 | 
						|
        ActiveStorage::Attachment.joins(:blob)
 | 
						|
                                 .where(blob: { filename: ['0.jpg', '0.png'] })
 | 
						|
                                 .where(record_id: schema_documents.map(&:id),
 | 
						|
                                        record_type: 'ActiveStorage::Attachment',
 | 
						|
                                        name: :preview_images)
 | 
						|
                                 .preload(:blob)
 | 
						|
 | 
						|
      json['documents'] = template.schema.filter_map do |item|
 | 
						|
        attachment = schema_documents.find { |e| e.uuid == item['attachment_uuid'] }
 | 
						|
 | 
						|
        unless attachment
 | 
						|
          Rollbar.error("Documents missing: #{template.id}") if defined?(Rollbar)
 | 
						|
 | 
						|
          next
 | 
						|
        end
 | 
						|
 | 
						|
        first_page_blob = preview_image_attachments.find { |e| e.record_id == attachment.id }&.blob
 | 
						|
        first_page_blob ||= attachment.preview_images.joins(:blob).find_by(blob: { filename: ['0.jpg', '0.png'] })&.blob
 | 
						|
 | 
						|
        {
 | 
						|
          'id' => attachment.id,
 | 
						|
          'uuid' => attachment.uuid,
 | 
						|
          'url' => ActiveStorage::Blob.proxy_url(attachment.blob),
 | 
						|
          'preview_image_url' => first_page_blob && ActiveStorage::Blob.proxy_url(first_page_blob),
 | 
						|
          'filename' => attachment.filename
 | 
						|
        }
 | 
						|
      end
 | 
						|
 | 
						|
      json
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |