optimize select
This commit is contained in:
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
module Api
|
module Api
|
||||||
class SubmissionsController < ApiBaseController
|
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 :template, only: :create
|
||||||
load_and_authorize_resource :submission, only: %i[show index destroy]
|
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 = Submissions.search(current_user, @submissions, params[:q])
|
||||||
submissions = filter_submissions(submissions, params)
|
submissions = filter_submissions(submissions, params)
|
||||||
|
|
||||||
submissions = paginate(submissions.preload(:created_by_user, :submitters,
|
with_fields = params[:include].to_s.include?('fields')
|
||||||
template: { folder: :parent_folder },
|
|
||||||
combined_document_attachment: :blob,
|
submissions = paginate(
|
||||||
audit_trail_attachment: :blob))
|
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)
|
expires_at = Accounts.link_expires_at(current_account)
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ class SubmissionsArchivedController < ApplicationController
|
|||||||
@submissions = @submissions.left_joins(:template)
|
@submissions = @submissions.left_joins(:template)
|
||||||
@submissions = @submissions.where.not(archived_at: nil)
|
@submissions = @submissions.where.not(archived_at: nil)
|
||||||
.or(@submissions.where.not(templates: { archived_at: nil }))
|
.or(@submissions.where.not(templates: { archived_at: nil }))
|
||||||
.preload(:template_accesses, :created_by_user, template: :author)
|
.preload(:template_accesses, :created_by_user)
|
||||||
|
|
||||||
@submissions = Submissions.search(current_user, @submissions, params[:q], search_template: true)
|
@submissions = Submissions.search(current_user, @submissions, params[:q], search_template: true)
|
||||||
@submissions = Submissions::Filter.call(@submissions, current_user, params)
|
@submissions = Submissions::Filter.call(@submissions, current_user, params)
|
||||||
@@ -18,6 +18,15 @@ class SubmissionsArchivedController < ApplicationController
|
|||||||
@submissions.order(id: :desc)
|
@submissions.order(id: :desc)
|
||||||
end
|
end
|
||||||
|
|
||||||
@pagy, @submissions = pagy_auto(@submissions.preload(submitters: :start_form_submission_events))
|
@pagy, @submissions = pagy_auto(@submissions.select_for_list.preload(submitters: :start_form_submission_events))
|
||||||
|
|
||||||
|
template_scope = @submissions.all?(&:template_submitters) ? Template.select_for_list : nil
|
||||||
|
|
||||||
|
ActiveRecord::Associations::Preloader.new(records: @submissions,
|
||||||
|
associations: :template,
|
||||||
|
scope: template_scope).call
|
||||||
|
|
||||||
|
ActiveRecord::Associations::Preloader.new(records: @submissions.filter_map(&:template),
|
||||||
|
associations: :author).call
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ class SubmissionsDashboardController < ApplicationController
|
|||||||
|
|
||||||
@submissions = @submissions.where(archived_at: nil)
|
@submissions = @submissions.where(archived_at: nil)
|
||||||
.where(templates: { archived_at: nil })
|
.where(templates: { archived_at: nil })
|
||||||
.preload(:template_accesses, :created_by_user, template: :author)
|
.preload(:template_accesses, :created_by_user)
|
||||||
|
|
||||||
@submissions = Submissions.search(current_user, @submissions, params[:q], search_template: true)
|
@submissions = Submissions.search(current_user, @submissions, params[:q], search_template: true)
|
||||||
@submissions = Submissions::Filter.call(@submissions, current_user, params)
|
@submissions = Submissions::Filter.call(@submissions, current_user, params)
|
||||||
@@ -19,6 +19,15 @@ class SubmissionsDashboardController < ApplicationController
|
|||||||
@submissions.order(id: :desc)
|
@submissions.order(id: :desc)
|
||||||
end
|
end
|
||||||
|
|
||||||
@pagy, @submissions = pagy_auto(@submissions.preload(submitters: :start_form_submission_events))
|
@pagy, @submissions = pagy_auto(@submissions.select_for_list.preload(submitters: :start_form_submission_events))
|
||||||
|
|
||||||
|
template_scope = @submissions.all?(&:template_submitters) ? Template.select_for_list : nil
|
||||||
|
|
||||||
|
ActiveRecord::Associations::Preloader.new(records: @submissions,
|
||||||
|
associations: :template,
|
||||||
|
scope: template_scope).call
|
||||||
|
|
||||||
|
ActiveRecord::Associations::Preloader.new(records: @submissions.filter_map(&:template),
|
||||||
|
associations: :author).call
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class TemplateFoldersController < ApplicationController
|
|||||||
(@template_folders.size < 7 ? 9 : 6)
|
(@template_folders.size < 7 ? 9 : 6)
|
||||||
end
|
end
|
||||||
|
|
||||||
@pagy, @templates = pagy_auto(@templates, limit:)
|
@pagy, @templates = pagy_auto(@templates.select_for_list, limit:)
|
||||||
|
|
||||||
if params[:q].present? && @templates.blank?
|
if params[:q].present? && @templates.blank?
|
||||||
@related_submissions_pagy, @related_submissions = load_related_submissions(@template_folder)
|
@related_submissions_pagy, @related_submissions = load_related_submissions(@template_folder)
|
||||||
@@ -82,6 +82,6 @@ class TemplateFoldersController < ApplicationController
|
|||||||
related_submissions = Submissions.search(current_user, related_submissions, params[:q])
|
related_submissions = Submissions.search(current_user, related_submissions, params[:q])
|
||||||
.order(id: :desc)
|
.order(id: :desc)
|
||||||
|
|
||||||
pagy_auto(related_submissions, limit: 5)
|
pagy_auto(related_submissions.select_for_list, limit: 5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class TemplatesArchivedController < ApplicationController
|
|||||||
|
|
||||||
@templates = Templates.search(current_user, @templates, params[:q])
|
@templates = Templates.search(current_user, @templates, params[:q])
|
||||||
|
|
||||||
@pagy, @templates = pagy_auto(@templates, limit: 12)
|
@pagy, @templates = pagy_auto(@templates.select_for_list, limit: 12)
|
||||||
|
|
||||||
return unless params[:q].present? && @templates.blank?
|
return unless params[:q].present? && @templates.blank?
|
||||||
|
|
||||||
@@ -31,6 +31,6 @@ class TemplatesArchivedController < ApplicationController
|
|||||||
related_submissions = Submissions.search(current_user, related_submissions, params[:q])
|
related_submissions = Submissions.search(current_user, related_submissions, params[:q])
|
||||||
.order(id: :desc)
|
.order(id: :desc)
|
||||||
|
|
||||||
pagy_auto(related_submissions, limit: 5)
|
pagy_auto(related_submissions.select_for_list, limit: 5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ class TemplatesArchivedSubmissionsController < ApplicationController
|
|||||||
@submissions.order(id: :desc)
|
@submissions.order(id: :desc)
|
||||||
end
|
end
|
||||||
|
|
||||||
@pagy, @submissions = pagy_auto(@submissions.preload(submitters: :start_form_submission_events))
|
@pagy, @submissions = pagy_auto(@submissions.select_for_list.preload(submitters: :start_form_submission_events))
|
||||||
rescue ActiveRecord::RecordNotFound
|
rescue ActiveRecord::RecordNotFound
|
||||||
redirect_to root_path
|
redirect_to root_path
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class TemplatesController < ApplicationController
|
|||||||
submissions.order(id: :desc)
|
submissions.order(id: :desc)
|
||||||
end
|
end
|
||||||
|
|
||||||
@pagy, @submissions = pagy_auto(submissions.preload(:template_accesses, submitters: :start_form_submission_events))
|
@pagy, @submissions = pagy_auto(submissions.select_for_list.preload(:template_accesses, submitters: :start_form_submission_events))
|
||||||
rescue ActiveRecord::RecordNotFound
|
rescue ActiveRecord::RecordNotFound
|
||||||
redirect_to root_path
|
redirect_to root_path
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ class TemplatesDashboardController < ApplicationController
|
|||||||
@templates = @templates.where(folder_id: @default_folder.id) if params[:q].blank?
|
@templates = @templates.where(folder_id: @default_folder.id) if params[:q].blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
@pagy, @templates = load_templates(@templates, @pagy.count, show_shared_inline: @show_shared_inline)
|
@pagy, @templates = load_templates(@templates.select_for_list, @pagy.count,
|
||||||
|
show_shared_inline: @show_shared_inline)
|
||||||
|
|
||||||
if params[:q].present? && @templates.blank?
|
if params[:q].present? && @templates.blank?
|
||||||
@related_submissions_pagy, @related_submissions = load_related_submissions
|
@related_submissions_pagy, @related_submissions = load_related_submissions
|
||||||
@@ -130,6 +131,6 @@ class TemplatesDashboardController < ApplicationController
|
|||||||
related_submissions = Submissions.search(current_user, related_submissions, params[:q])
|
related_submissions = Submissions.search(current_user, related_submissions, params[:q])
|
||||||
.order(id: :desc)
|
.order(id: :desc)
|
||||||
|
|
||||||
pagy_auto(related_submissions, limit: 5)
|
pagy_auto(related_submissions.select_for_list, limit: 5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class TemplatesSharedController < ApplicationController
|
|||||||
|
|
||||||
@templates = Templates.search_shared(current_user, @templates, params[:q])
|
@templates = Templates.search_shared(current_user, @templates, params[:q])
|
||||||
|
|
||||||
@pagy, @templates = pagy_auto(@templates, limit: 12)
|
@pagy, @templates = pagy_auto(@templates.select_for_list, limit: 12)
|
||||||
|
|
||||||
return unless params[:q].present? && @templates.blank?
|
return unless params[:q].present? && @templates.blank?
|
||||||
|
|
||||||
@@ -42,6 +42,6 @@ class TemplatesSharedController < ApplicationController
|
|||||||
related_submissions = Submissions.search(current_user, related_submissions, params[:q])
|
related_submissions = Submissions.search(current_user, related_submissions, params[:q])
|
||||||
.order(id: :desc)
|
.order(id: :desc)
|
||||||
|
|
||||||
pagy_auto(related_submissions, limit: 5)
|
pagy_auto(related_submissions.select_for_list, limit: 5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -107,6 +107,11 @@ class Submission < ApplicationRecord
|
|||||||
.and(Submitter.arel_table[:completed_at].eq(nil))).select(1).arel.exists)
|
.and(Submitter.arel_table[:completed_at].eq(nil))).select(1).arel.exists)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scope :select_for_list, lambda {
|
||||||
|
select(:id, :name, :created_by_user_id, :account_id,
|
||||||
|
:created_at, :archived_at, :expire_at, :template_id, :template_submitters)
|
||||||
|
}
|
||||||
|
|
||||||
enum :source, {
|
enum :source, {
|
||||||
invite: 'invite',
|
invite: 'invite',
|
||||||
bulk: 'bulk',
|
bulk: 'bulk',
|
||||||
|
|||||||
@@ -81,6 +81,8 @@ class Template < ApplicationRecord
|
|||||||
scope :active, -> { where(archived_at: nil) }
|
scope :active, -> { where(archived_at: nil) }
|
||||||
scope :archived, -> { where.not(archived_at: nil) }
|
scope :archived, -> { where.not(archived_at: nil) }
|
||||||
|
|
||||||
|
scope :select_for_list, -> { select(:id, :name, :author_id, :account_id, :created_at, :archived_at, :folder_id) }
|
||||||
|
|
||||||
def application_key
|
def application_key
|
||||||
external_id
|
external_id
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user