このコミットが含まれているのは:
@@ -34,6 +34,34 @@ class WikiPagesController < ApplicationController
|
||||
render json:
|
||||
end
|
||||
|
||||
def autolink_candidates
|
||||
locale = resolve_locale!
|
||||
language = params.fetch(:language, locale.language_code)
|
||||
return head :not_found unless language.is_a?(String)
|
||||
target_locale =
|
||||
if language == 'und'
|
||||
locale
|
||||
else
|
||||
Locale.where(language_code: language, deprecated_at: nil,
|
||||
code: Locale.codes.values).order(:code).first
|
||||
end
|
||||
return head :not_found unless target_locale
|
||||
|
||||
candidates = []
|
||||
unless language == 'und'
|
||||
names = TagDescription.joins(tag: :tag_names)
|
||||
.where(language_code: language, tag_names: { language_code: language })
|
||||
.pluck('tag_descriptions.tag_id', 'tag_descriptions.id', 'tag_names.name')
|
||||
candidates = names.map do |tag_id, description_id, name|
|
||||
WikiPageRepr.autolink_tag(target_locale, tag_id:, description_id:, name:)
|
||||
end
|
||||
end
|
||||
candidates.concat(TagGroup.order(:id).pluck(:id, :name).map do |id, name|
|
||||
WikiPageRepr.autolink_group(target_locale, id:, name:, language:)
|
||||
end)
|
||||
render json: candidates
|
||||
end
|
||||
|
||||
def show
|
||||
locale = resolve_locale!
|
||||
tag_description = TagDescription.find_by(id: params[:id], language_code: locale.language_code)
|
||||
|
||||
@@ -9,6 +9,8 @@ module WikiPageRepr
|
||||
|
||||
{ 'id' => description.id,
|
||||
'resource_type' => 'tag_description',
|
||||
'tag_id' => tag.id,
|
||||
'language_code' => description.language_code,
|
||||
'tag_name_id' => tag.tag_name(locale.language_code)&.id,
|
||||
'body' => description.body,
|
||||
'created_user_id' => description.created_by_user_id,
|
||||
@@ -24,4 +26,24 @@ module WikiPageRepr
|
||||
def tag_group tag_group
|
||||
TagGroupRepr.tag_group(tag_group).merge('resource_type' => 'tag_group')
|
||||
end
|
||||
|
||||
def autolink_tag locale, tag_id:, description_id:, name:
|
||||
{ resource_type: 'tag_description',
|
||||
resource_id: description_id,
|
||||
tag_id:,
|
||||
tag_description_id: description_id,
|
||||
name:,
|
||||
language_code: locale.language_code,
|
||||
locale_code: locale.code_before_type_cast }
|
||||
end
|
||||
|
||||
def autolink_group locale, id:, name:, language:
|
||||
{ resource_type: 'tag_group',
|
||||
resource_id: id,
|
||||
tag_id: nil,
|
||||
tag_description_id: nil,
|
||||
name: "#{ TagGroupRepr::PREFIX }#{ name }",
|
||||
language_code: language,
|
||||
locale_code: locale.code_before_type_cast }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -45,6 +45,7 @@ Rails.application.routes.draw do
|
||||
collection do
|
||||
get :search, action: :index
|
||||
get :changes
|
||||
get :autolink_candidates
|
||||
|
||||
scope :title do
|
||||
get ':title/exists', action: :exists_by_title
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする