This commit is contained in:
@@ -30,8 +30,20 @@ class PostsController < ApplicationController
|
|||||||
|
|
||||||
offset = (page - 1) * limit
|
offset = (page - 1) * limit
|
||||||
|
|
||||||
|
pt_max_sql =
|
||||||
|
PostTag
|
||||||
|
.select('post_id, MAX(updated_at) AS max_updated_at')
|
||||||
|
.group('post_id')
|
||||||
|
.to_sql
|
||||||
|
|
||||||
|
updated_at_all_sql =
|
||||||
|
'GREATEST(posts.updated_at,' +
|
||||||
|
'COALESCE(pt_max.max_updated_at, posts.updated_at))'
|
||||||
|
|
||||||
q =
|
q =
|
||||||
filtered_posts
|
filtered_posts
|
||||||
|
.joins("LEFT JOIN (#{ pt_max_sql }) pt_max ON pt_max.post_id = posts.id")
|
||||||
|
.reselect('posts.*', Arel.sql("#{ updated_at_all_sql } AS updated_at_all"))
|
||||||
.preload(tags: { tag_name: :wiki_page })
|
.preload(tags: { tag_name: :wiki_page })
|
||||||
.with_attached_thumbnail
|
.with_attached_thumbnail
|
||||||
|
|
||||||
@@ -45,8 +57,12 @@ class PostsController < ApplicationController
|
|||||||
end
|
end
|
||||||
q = q.where('posts.created_at >= ?', created_between[0]) if created_between[0]
|
q = q.where('posts.created_at >= ?', created_between[0]) if created_between[0]
|
||||||
q = q.where('posts.created_at <= ?', created_between[1]) if created_between[1]
|
q = q.where('posts.created_at <= ?', created_between[1]) if created_between[1]
|
||||||
q = q.where('posts.updated_at >= ?', updated_between[0]) if updated_between[0]
|
if updated_between[0]
|
||||||
q = q.where('posts.updated_at <= ?', updated_between[1]) if updated_between[1]
|
q = q.where("#{ updated_at_all_sql } >= ?", updated_between[0])
|
||||||
|
end
|
||||||
|
if updated_between[1]
|
||||||
|
q = q.where("#{ updated_at_all_sql } <= ?", updated_between[1])
|
||||||
|
end
|
||||||
|
|
||||||
sort_sql =
|
sort_sql =
|
||||||
if order[0] == 'original_created_at'
|
if order[0] == 'original_created_at'
|
||||||
@@ -57,12 +73,12 @@ class PostsController < ApplicationController
|
|||||||
else
|
else
|
||||||
"posts.#{ order[0] } #{ order[1] }"
|
"posts.#{ order[0] } #{ order[1] }"
|
||||||
end
|
end
|
||||||
posts = q.select('posts.*')
|
posts = q.order(Arel.sql("#{ sort_sql }")).limit(limit).offset(offset).to_a
|
||||||
.order(Arel.sql("#{ sort_sql }"))
|
|
||||||
.limit(limit).offset(offset).to_a
|
q = q.except(:select, :order)
|
||||||
|
|
||||||
render json: { posts: posts.map { |post|
|
render json: { posts: posts.map { |post|
|
||||||
PostRepr.base(post).tap do |json|
|
PostRepr.base(post).merge(updated_at: post.updated_at_all).tap do |json|
|
||||||
json['thumbnail'] =
|
json['thumbnail'] =
|
||||||
if post.thumbnail.attached?
|
if post.thumbnail.attached?
|
||||||
rails_storage_proxy_url(post.thumbnail, only_path: false)
|
rails_storage_proxy_url(post.thumbnail, only_path: false)
|
||||||
|
|||||||
Reference in New Issue
Block a user