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 Api
 | 
						|
  class SubmissionEventsController < ApiBaseController
 | 
						|
    load_and_authorize_resource :submission, parent: false
 | 
						|
 | 
						|
    def index
 | 
						|
      submissions = build_completed_query(@submissions)
 | 
						|
 | 
						|
      params[:after] = Time.zone.at(params[:after].to_i) if params[:after].present?
 | 
						|
      params[:before] = Time.zone.at(params[:before].to_i) if params[:before].present?
 | 
						|
 | 
						|
      submissions = paginate(submissions.preload(
 | 
						|
                               :created_by_user, :submission_events,
 | 
						|
                               template: :folder,
 | 
						|
                               submitters: { documents_attachments: :blob, attachments_attachments: :blob },
 | 
						|
                               audit_trail_attachment: :blob
 | 
						|
                             ),
 | 
						|
                             field: :completed_at)
 | 
						|
 | 
						|
      render json: {
 | 
						|
        data: submissions.map do |s|
 | 
						|
                {
 | 
						|
                  event_type: 'submission.completed',
 | 
						|
                  timestamp: s.completed_at,
 | 
						|
                  data: Submissions::SerializeForApi.call(s, s.submitters)
 | 
						|
                }
 | 
						|
              end,
 | 
						|
        pagination: {
 | 
						|
          count: submissions.size,
 | 
						|
          next: submissions.last&.completed_at&.to_i,
 | 
						|
          prev: submissions.first&.completed_at&.to_i
 | 
						|
        }
 | 
						|
      }
 | 
						|
    end
 | 
						|
 | 
						|
    private
 | 
						|
 | 
						|
    def build_completed_query(submissions)
 | 
						|
      submissions = submissions.where(
 | 
						|
        Submitter.where(completed_at: nil).where(
 | 
						|
          Submitter.arel_table[:submission_id].eq(Submission.arel_table[:id])
 | 
						|
        ).select(1).arel.exists.not
 | 
						|
      )
 | 
						|
 | 
						|
      submissions.joins(:submitters)
 | 
						|
                 .group(:id)
 | 
						|
                 .select(Submission.arel_table[Arel.star],
 | 
						|
                         Submitter.arel_table[:completed_at].maximum.as('completed_at'))
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |