optimize select

This commit is contained in:
Pete Matsyburka
2026-06-28 10:52:54 +03:00
parent e54d76f0e2
commit 3cb37748e9
11 changed files with 60 additions and 18 deletions
+20 -4
View File
@@ -2,6 +2,10 @@
module Api
class SubmissionsController < ApiBaseController
SUBMISSION_COLUMNS = %i[id name slug source submitters_order expire_at created_at updated_at
archived_at variables template_id template_submitters created_by_user_id].freeze
TEMPLATE_COLUMNS = %i[id name external_id created_at updated_at folder_id submitters].freeze
load_and_authorize_resource :template, only: :create
load_and_authorize_resource :submission, only: %i[show index destroy]
@@ -13,10 +17,22 @@ module Api
submissions = Submissions.search(current_user, @submissions, params[:q])
submissions = filter_submissions(submissions, params)
submissions = paginate(submissions.preload(:created_by_user, :submitters,
template: { folder: :parent_folder },
combined_document_attachment: :blob,
audit_trail_attachment: :blob))
with_fields = params[:include].to_s.include?('fields')
submissions = paginate(
submissions.select(with_fields ? SUBMISSION_COLUMNS + %i[template_fields] : SUBMISSION_COLUMNS)
.preload(:created_by_user, :submitters, combined_document_attachment: :blob,
audit_trail_attachment: :blob)
)
ActiveRecord::Associations::Preloader.new(
records: submissions,
associations: :template,
scope: Template.select(with_fields ? TEMPLATE_COLUMNS + %i[fields] : TEMPLATE_COLUMNS)
).call
ActiveRecord::Associations::Preloader.new(records: submissions.filter_map(&:template),
associations: { folder: :parent_folder }).call
expires_at = Accounts.link_expires_at(current_account)