|
@@ -8,8 +8,11 @@ class PostsController < ApplicationController |
|
|
limit = params[:limit].presence&.to_i |
|
|
limit = params[:limit].presence&.to_i |
|
|
cursor = params[:cursor].presence |
|
|
cursor = params[:cursor].presence |
|
|
|
|
|
|
|
|
q = filtered_posts.order(created_at: :desc) |
|
|
|
|
|
q = q.where('posts.created_at < ?', Time.iso8601(cursor)) if cursor |
|
|
|
|
|
|
|
|
created_at = ('COALESCE(posts.original_created_before - INTERVAL 1 SECOND,' + |
|
|
|
|
|
'posts.original_created_from,' + |
|
|
|
|
|
'posts.created_at)') |
|
|
|
|
|
q = filtered_posts.order(Arel.sql("#{ created_at } DESC")) |
|
|
|
|
|
q = q.where("#{ created_at } < ?", Time.iso8601(cursor)) if cursor |
|
|
|
|
|
|
|
|
posts = limit ? q.limit(limit + 1) : q |
|
|
posts = limit ? q.limit(limit + 1) : q |
|
|
|
|
|
|
|
@@ -20,14 +23,14 @@ class PostsController < ApplicationController |
|
|
end |
|
|
end |
|
|
|
|
|
|
|
|
render json: { posts: posts.map { |post| |
|
|
render json: { posts: posts.map { |post| |
|
|
post.as_json(include: { tags: { only: [:id, :name, :category, :post_count] } }).tap { |json| |
|
|
|
|
|
|
|
|
post.as_json(include: { tags: { only: [:id, :name, :category, :post_count] } }).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) |
|
|
else |
|
|
else |
|
|
nil |
|
|
nil |
|
|
end |
|
|
end |
|
|
} |
|
|
|
|
|
|
|
|
end |
|
|
}, next_cursor: } |
|
|
}, next_cursor: } |
|
|
end |
|
|
end |
|
|
|
|
|
|
|
@@ -39,7 +42,7 @@ class PostsController < ApplicationController |
|
|
|
|
|
|
|
|
render json: (post |
|
|
render json: (post |
|
|
.as_json(include: { tags: { only: [:id, :name, :category, :post_count] } }) |
|
|
.as_json(include: { tags: { only: [:id, :name, :category, :post_count] } }) |
|
|
.merge(viewed: viewed)) |
|
|
|
|
|
|
|
|
.merge(viewed:)) |
|
|
end |
|
|
end |
|
|
|
|
|
|
|
|
# GET /posts/1 |
|
|
# GET /posts/1 |
|
@@ -60,7 +63,7 @@ class PostsController < ApplicationController |
|
|
return head :forbidden unless current_user.member? |
|
|
return head :forbidden unless current_user.member? |
|
|
|
|
|
|
|
|
# TODO: URL が正規のものがチェック,不正ならエラー |
|
|
# TODO: URL が正規のものがチェック,不正ならエラー |
|
|
# TODO: title、URL は必須にする. |
|
|
|
|
|
|
|
|
# TODO: URL は必須にする(タイトルは省略可). |
|
|
# TODO: サイトに応じて thumbnail_base 設定 |
|
|
# TODO: サイトに応じて thumbnail_base 設定 |
|
|
title = params[:title] |
|
|
title = params[:title] |
|
|
url = params[:url] |
|
|
url = params[:url] |
|
|