fix order queries

This commit is contained in:
Pete Matsyburka
2025-04-22 16:32:09 +03:00
parent e1cd62ff40
commit 7fee82ded2
7 changed files with 97 additions and 68 deletions
+34
View File
@@ -0,0 +1,34 @@
# frozen_string_literal: true
module Templates
module Order
module_function
def call(templates, order)
case order
when 'used_at'
subquery = Submission.select(:template_id, Submission.arel_table[:created_at].maximum.as('created_at'))
.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