|
|
|
@@ -30,8 +30,20 @@ class PostsController < ApplicationController |
|
|
|
|
|
|
|
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 = |
|
|
|
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 }) |
|
|
|
.with_attached_thumbnail |
|
|
|
|
|
|
|
@@ -45,8 +57,12 @@ class PostsController < ApplicationController |
|
|
|
end |
|
|
|
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.updated_at >= ?', updated_between[0]) if updated_between[0] |
|
|
|
q = q.where('posts.updated_at <= ?', updated_between[1]) if updated_between[1] |
|
|
|
if updated_between[0] |
|
|
|
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 = |
|
|
|
if order[0] == 'original_created_at' |
|
|
|
@@ -57,12 +73,12 @@ class PostsController < ApplicationController |
|
|
|
else |
|
|
|
"posts.#{ order[0] } #{ order[1] }" |
|
|
|
end |
|
|
|
posts = q.select('posts.*') |
|
|
|
.order(Arel.sql("#{ sort_sql }")) |
|
|
|
.limit(limit).offset(offset).to_a |
|
|
|
posts = q.order(Arel.sql("#{ sort_sql }")).limit(limit).offset(offset).to_a |
|
|
|
|
|
|
|
q = q.except(:select, :order) |
|
|
|
|
|
|
|
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'] = |
|
|
|
if post.thumbnail.attached? |
|
|
|
rails_storage_proxy_url(post.thumbnail, only_path: false) |
|
|
|
|