Files
Pete Matsyburka 4e5abb3c09 fix query
2025-04-23 12:30:06 +03:00

36 lines
1.1 KiB
Ruby

# frozen_string_literal: true
module Templates
module Order
module_function
def call(templates, current_user, order)
case order
when 'used_at'
subquery = Submission.select(:template_id, Submission.arel_table[:created_at].maximum.as('created_at'))
.where(account_id: current_user.account_id)
.group(:template_id)
templates = templates.joins(
Template.arel_table
.join(subquery.arel.as('submissions'), Arel::Nodes::OuterJoin)
.on(Template.arel_table[:id].eq(Submission.arel_table[:template_id]))
.join_sources
)
templates.order(
Arel::Nodes::Case.new
.when(Submission.arel_table[:created_at].gt(Template.arel_table[:updated_at]))
.then(Submission.arel_table[:created_at])
.else(Template.arel_table[:updated_at])
.desc
)
when 'name'
templates.order(name: :asc)
else
templates.order(id: :desc)
end
end
end
end