Browse Source

#206

feature/206
みてるぞ 2 days ago
parent
commit
da45bc95eb
1 changed files with 22 additions and 6 deletions
  1. +22
    -6
      backend/app/controllers/posts_controller.rb

+ 22
- 6
backend/app/controllers/posts_controller.rb View File

@@ -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]
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 = 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.*')
.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| 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)


Loading…
Cancel
Save