This commit is contained in:
@@ -18,7 +18,7 @@ class MaterialsController < ApplicationController
|
||||
count = q.count
|
||||
materials = q.order(created_at: :desc, id: :desc).limit(limit).offset(offset)
|
||||
|
||||
render json: { materials: MaterialRepr.many(materials), count: count }
|
||||
render json: { materials: MaterialRepr.many(materials, host: request.base_url), count: count }
|
||||
end
|
||||
|
||||
def show
|
||||
@@ -29,7 +29,9 @@ class MaterialsController < ApplicationController
|
||||
.find_by(id: params[:id])
|
||||
return head :not_found unless material
|
||||
|
||||
render json: MaterialRepr.base(material)
|
||||
wiki_page_body = material.tag.tag_name.wiki_page&.current_revision&.body
|
||||
|
||||
render json: MaterialRepr.base(material, host: request.base_url).merge(wiki_page_body:)
|
||||
end
|
||||
|
||||
def create
|
||||
@@ -50,7 +52,7 @@ class MaterialsController < ApplicationController
|
||||
material.file.attach(file)
|
||||
|
||||
if material.save
|
||||
render json: MaterialRepr.base(material), status: :created
|
||||
render json: MaterialRepr.base(material, host: request.base_url), status: :created
|
||||
else
|
||||
render json: { errors: material.errors.full_messages }, status: :unprocessable_entity
|
||||
end
|
||||
@@ -80,7 +82,7 @@ class MaterialsController < ApplicationController
|
||||
end
|
||||
|
||||
if material.save
|
||||
render json: MaterialRepr.base(material)
|
||||
render json: MaterialRepr.base(material, host: request.base_url)
|
||||
else
|
||||
render json: { errors: material.errors.full_messages }, status: :unprocessable_entity
|
||||
end
|
||||
|
||||
@@ -33,7 +33,7 @@ class TagsController < ApplicationController
|
||||
else
|
||||
Tag.joins(:tag_name)
|
||||
end
|
||||
.includes(:tag_name, tag_name: :wiki_page)
|
||||
.includes(:tag_name, tag_name: :wiki_page, :materials)
|
||||
q = q.where(posts: { id: post_id }) if post_id.present?
|
||||
|
||||
q = q.where('tag_names.name LIKE ?', "%#{ name }%") if name
|
||||
@@ -83,7 +83,7 @@ class TagsController < ApplicationController
|
||||
tags =
|
||||
Tag
|
||||
.joins(:tag_name)
|
||||
.includes(:tag_name, tag_name: :wiki_page)
|
||||
.includes(:tag_name, tag_name: :wiki_page, :materials)
|
||||
.where(category: [:meme, :character, :material])
|
||||
.where(id: tag_ids)
|
||||
.order('tag_names.name')
|
||||
@@ -128,7 +128,7 @@ class TagsController < ApplicationController
|
||||
end
|
||||
|
||||
base = Tag.joins(:tag_name)
|
||||
.includes(:tag_name, tag_name: :wiki_page)
|
||||
.includes(:tag_name, tag_name: :wiki_page, :materials)
|
||||
base = base.where('tags.post_count > 0') if present_only
|
||||
|
||||
canonical_hit =
|
||||
@@ -153,7 +153,7 @@ class TagsController < ApplicationController
|
||||
|
||||
def show
|
||||
tag = Tag.joins(:tag_name)
|
||||
.includes(:tag_name, tag_name: :wiki_page)
|
||||
.includes(:tag_name, tag_name: :wiki_page, :materials)
|
||||
.find_by(id: params[:id])
|
||||
if tag
|
||||
render json: TagRepr.base(tag)
|
||||
@@ -167,7 +167,7 @@ class TagsController < ApplicationController
|
||||
return head :bad_request if name.blank?
|
||||
|
||||
tag = Tag.joins(:tag_name)
|
||||
.includes(:tag_name, tag_name: :wiki_page)
|
||||
.includes(:tag_name, tag_name: :wiki_page, :materials)
|
||||
.find_by(tag_names: { name: })
|
||||
if tag
|
||||
render json: TagRepr.base(tag)
|
||||
|
||||
@@ -73,6 +73,8 @@ class Tag < ApplicationRecord
|
||||
|
||||
def has_wiki = wiki_page.present?
|
||||
|
||||
def material_id = materials.first&.id
|
||||
|
||||
def self.tagme
|
||||
@tagme ||= find_or_create_by_tag_name!('タグ希望', category: :meta)
|
||||
end
|
||||
|
||||
@@ -2,22 +2,23 @@
|
||||
|
||||
|
||||
module MaterialRepr
|
||||
BASE = { methods: [:content_type],
|
||||
include: { created_by_user: UserRepr::BASE,
|
||||
BASE = { only: [:id, :url, :created_at, :updated_at],
|
||||
methods: [:content_type],
|
||||
include: { tag: TagRepr::BASE,
|
||||
created_by_user: UserRepr::BASE,
|
||||
updated_by_user: UserRepr::BASE } }.freeze
|
||||
|
||||
module_function
|
||||
|
||||
def base(material)
|
||||
def base material, host:
|
||||
material.as_json(BASE).merge(
|
||||
file: if material.file.attached?
|
||||
Rails.application.routes.url_helpers.rails_storage_proxy_url(
|
||||
material.file, only_path: false)
|
||||
end,
|
||||
tag: TagRepr.base(material.tag))
|
||||
material.file, host:)
|
||||
end)
|
||||
end
|
||||
|
||||
def many(materials)
|
||||
materials.map { |m| base(m) }
|
||||
def many materials, host:
|
||||
materials.map { |m| base(m, host) }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
module TagRepr
|
||||
BASE = { only: [:id, :category, :post_count, :created_at, :updated_at],
|
||||
methods: [:name, :has_wiki] }.freeze
|
||||
methods: [:name, :has_wiki, :material_id] }.freeze
|
||||
|
||||
module_function
|
||||
|
||||
|
||||
Reference in New Issue
Block a user