This commit is contained in:
2026-03-15 15:23:07 +09:00
parent 5581d6e1cc
commit be14ae3ee4
10 changed files with 199 additions and 150 deletions
+4 -11
View File
@@ -100,23 +100,16 @@ class PostsController < ApplicationController
.first
return head :not_found unless post
viewed = current_user&.viewed?(post) || false
render json: PostRepr.base(post).merge(viewed:)
render json: PostRepr.base(post, current_user)
end
def show
post = Post.includes(tags: { tag_name: :wiki_page }).find_by(id: params[:id])
return head :not_found unless post
viewed = current_user&.viewed?(post) || false
json = post.as_json
json['tags'] = build_tag_tree_for(post.tags)
json['related'] = post.related(limit: 20)
json['viewed'] = viewed
render json:
render json: PostRepr.base(post, current_user)
.merge(tags: build_tag_tree_for(post.tags),
related: post.related(limit: 20))
end
def create
+9 -5
View File
@@ -2,15 +2,19 @@
module PostRepr
BASE = { include: { tags: TagRepr::BASE } }.freeze
BASE = { include: { tags: TagRepr::BASE, uploaded_user: UserRepr::BASE } }.freeze
module_function
def base post
post.as_json(BASE)
def base post, current_user = nil
json = post.as_json(BASE)
return json unless current_user
viewed = current_user.viewed?(post)
json.merge(viewed:)
end
def many posts
posts.map { |p| base(p) }
def many posts, current_user = nil
posts.map { |p| base(p, current_user) }
end
end
+16
View File
@@ -0,0 +1,16 @@
# frozen_string_literal: true
module UserRepr
BASE = { only: [:id, :name] }.freeze
module_function
def base user
user.as_json(BASE)
end
def many users
users.map { |u| base(u) }
end
end