This commit is contained in:
@@ -9,6 +9,19 @@ class PostsController < ApplicationController
|
||||
created_between = params[:created_from].presence, params[:created_to].presence
|
||||
updated_between = params[:updated_from].presence, params[:updated_to].presence
|
||||
|
||||
order = params[:order].to_s.split(':', 2).map(&:strip)
|
||||
unless order[0].in?(['title', 'url', 'original_created_at', 'created_at', 'updated_at'])
|
||||
order[0] = 'original_created_at'
|
||||
end
|
||||
unless order[1].in?(['asc', 'desc'])
|
||||
order[1] =
|
||||
if order[0].in?(['title', 'url'])
|
||||
'asc'
|
||||
else
|
||||
'desc'
|
||||
end
|
||||
end
|
||||
|
||||
page = (params[:page].presence || 1).to_i
|
||||
limit = (params[:limit].presence || 20).to_i
|
||||
|
||||
@@ -36,11 +49,16 @@ class PostsController < ApplicationController
|
||||
q = q.where('posts.updated_at <= ?', updated_between[1]) if updated_between[1]
|
||||
|
||||
sort_sql =
|
||||
'COALESCE(posts.original_created_before - INTERVAL 1 MINUTE,' +
|
||||
'posts.original_created_from,' +
|
||||
'posts.created_at)'
|
||||
posts = q.select("posts.*, #{ sort_sql } AS sort_ts")
|
||||
.order(Arel.sql("#{ sort_sql } DESC"))
|
||||
if order[0] == 'original_created_at'
|
||||
'COALESCE(posts.original_created_before - INTERVAL 1 MINUTE,' +
|
||||
'posts.original_created_from,' +
|
||||
'posts.created_at) ' +
|
||||
order[1]
|
||||
else
|
||||
"posts.#{ order[0] } #{ order[1] }"
|
||||
end
|
||||
posts = q.select('posts.*')
|
||||
.order(Arel.sql("#{ sort_sql }"))
|
||||
.limit(limit).offset(offset).to_a
|
||||
|
||||
render json: { posts: posts.map { |post|
|
||||
|
||||
Reference in New Issue
Block a user