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.
56 lines
1.9 KiB
56 lines
1.9 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,
|
|
combined_document_attachment: :blob
|
|
),
|
|
field: :completed_at)
|
|
|
|
expires_at = Accounts.link_expires_at(current_account)
|
|
|
|
render json: {
|
|
data: submissions.map do |s|
|
|
{
|
|
event_type: 'submission.completed',
|
|
timestamp: s.completed_at,
|
|
data: Submissions::SerializeForApi.call(s, s.submitters, expires_at:)
|
|
}
|
|
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
|