This commit is contained in:
@@ -38,7 +38,7 @@ class NicoTagsController < ApplicationController
|
||||
return head :bad_request if linked_tags.any? { |t| t.nico? }
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
record_tag_snapshots!(linked_tags, created_by_user: current_user)
|
||||
TagVersioning.record_tag_snapshots!(linked_tags, created_by_user: current_user)
|
||||
|
||||
tag.linked_tags = linked_tags
|
||||
tag.save!
|
||||
@@ -48,13 +48,4 @@ class NicoTagsController < ApplicationController
|
||||
|
||||
render json: tag.linked_tags.map { |t| TagRepr.base(t) }, status: :ok
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def record_tag_snapshots! tags, created_by_user:
|
||||
tags.each do |tag|
|
||||
event_type = tag.tag_versions.exists? ? :update : :create
|
||||
TagVersionRecorder.record!(tag:, event_type:, created_by_user:)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -131,7 +131,7 @@ class PostsController < ApplicationController
|
||||
ApplicationRecord.transaction do
|
||||
post.save!
|
||||
tags = Tag.normalise_tags(tag_names)
|
||||
record_tag_snapshots!(tags, created_by_user: current_user)
|
||||
TagVersioning.record_tag_snapshots!(tags, created_by_user: current_user)
|
||||
|
||||
tags = Tag.expand_parent_tags(tags)
|
||||
sync_post_tags!(post, tags)
|
||||
@@ -175,10 +175,10 @@ class PostsController < ApplicationController
|
||||
ApplicationRecord.transaction do
|
||||
post.update!(title:, original_created_from:, original_created_before:)
|
||||
|
||||
normalised_tag = Tag.normalise_tags(tag_names, with_tagme: false)
|
||||
record_tag_snapshots(normalised_tags, create_by_user: current_user)
|
||||
normalised_tags = Tag.normalise_tags(tag_names, with_tagme: false)
|
||||
TagVersioning.record_tag_snapshots!(normalised_tags, created_by_user: current_user)
|
||||
|
||||
tags = post.tags.where(category: 'nico').to_a + normalised_tags
|
||||
tags = post.tags.nico.to_a + normalised_tags
|
||||
tags = Tag.expand_parent_tags(tags)
|
||||
sync_post_tags!(post, tags)
|
||||
PostVersionRecorder.record!(post:, event_type: :update, created_by_user: current_user)
|
||||
|
||||
@@ -218,21 +218,14 @@ class TagsController < ApplicationController
|
||||
|
||||
tag = Tag.find(params[:id])
|
||||
|
||||
if category.present? && tag.nico? != (category == 'nico')
|
||||
return render json: { error: 'ニコタグのカテゴリ変更はできません.' },
|
||||
status: :unprocessable_entity
|
||||
end
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
old_nico = tag.nico?
|
||||
|
||||
if category.present?
|
||||
new_nico = category == 'nico'
|
||||
|
||||
if old_nico != new_nico
|
||||
return render json: { error: 'ニコタグのカテゴリ変更はできません.' },
|
||||
status: :unprocessable_entity
|
||||
end
|
||||
end
|
||||
|
||||
tag.tag_name.update!(name:) if name.present?
|
||||
tag.update!(category:) if category.present?
|
||||
|
||||
record_tag_version!(tag, event_type: :update, created_by_user: current_user)
|
||||
end
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
class NicoTagVersion < ApplicationRecord
|
||||
include VersionRecord
|
||||
|
||||
belongs_to :tag
|
||||
|
||||
validates :name, presence: true
|
||||
end
|
||||
@@ -157,7 +157,6 @@ class Tag < ApplicationRecord
|
||||
target_tag => Tag
|
||||
|
||||
affected_post_ids = Set.new
|
||||
affected_tag_ids = Set.new
|
||||
|
||||
Tag.transaction do
|
||||
Array(source_tags).compact.uniq.each do |source_tag|
|
||||
@@ -181,7 +180,7 @@ class Tag < ApplicationRecord
|
||||
end
|
||||
|
||||
source_tag.discard!
|
||||
record_tag_discard!(source_tag, current_by_user: nil)
|
||||
TagVersioning.record!(source_tag, event_type: :discard, created_by_user:)
|
||||
|
||||
if source_tag.nico?
|
||||
source_tag_name.discard!
|
||||
@@ -190,7 +189,7 @@ class Tag < ApplicationRecord
|
||||
updated_at: Time.current)
|
||||
end
|
||||
|
||||
record_tag_version!(target_tag, event_type: :update, created_by_user: nil)
|
||||
TagVersioning.record!(target_tag, event_type: :update, created_by_user:)
|
||||
end
|
||||
|
||||
Post.where(id: affected_post_ids.to_a).find_each do |post|
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
class TagName < ApplicationRecord
|
||||
include MyDiscard
|
||||
|
||||
default_scope -> { kept }
|
||||
|
||||
has_one :tag
|
||||
has_one :wiki_page
|
||||
|
||||
|
||||
@@ -8,8 +8,7 @@ class TagVersion < ApplicationRecord
|
||||
character: 'character',
|
||||
general: 'general',
|
||||
material: 'material',
|
||||
meta: 'meta',
|
||||
nico: 'nico' }, validate: true
|
||||
meta: 'meta' }, validate: true
|
||||
|
||||
validates :name, presence: true
|
||||
validates :category, presence: true
|
||||
|
||||
@@ -12,5 +12,8 @@ class NicoTagVersionRecorder < VersionRecorder
|
||||
def version_class = NicoTagVersion
|
||||
def version_association = :nico_tag_versions
|
||||
def record_key = :tag
|
||||
def snapshot_attributes = { name: @tag.name, linked_tags: @tag.snapshot_linked_tags.join(' ') }
|
||||
|
||||
def snapshot_attributes
|
||||
{ name: @record.name, linked_tags: @record.snapshot_linked_tags.join(' ') }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
class PostVersionRecorder
|
||||
class PostVersionRecorder < VersionRecorder
|
||||
def self.record! post:, event_type:, created_by_user:
|
||||
new(post:, event_type:, created_by_user:).record!
|
||||
end
|
||||
@@ -14,12 +14,12 @@ class PostVersionRecorder
|
||||
def record_key = :post
|
||||
|
||||
def snapshot_attributes
|
||||
{ title: @post.title,
|
||||
url: @post.url,
|
||||
thumbnail_base: @post.thumbnail_base,
|
||||
tags: @post.snapshot_tag_names.join(' '),
|
||||
parent: @post.parent,
|
||||
original_created_from: @post.original_created_from,
|
||||
original_created_before: @post.original_created_before }
|
||||
{ title: @record.title,
|
||||
url: @record.url,
|
||||
thumbnail_base: @record.thumbnail_base,
|
||||
tags: @record.snapshot_tag_names.join(' '),
|
||||
parent: @record.parent,
|
||||
original_created_from: @record.original_created_from,
|
||||
original_created_before: @record.original_created_before }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -14,9 +14,9 @@ class TagVersionRecorder < VersionRecorder
|
||||
def record_key = :tag
|
||||
|
||||
def snapshot_attributes
|
||||
{ name: @tag.name,
|
||||
category: @tag.category,
|
||||
aliases: @tag.snapshot_aliases.join(' '),
|
||||
parent_tag_ids: @tag.snapshot_parent_tag_ids.join(' ') }
|
||||
{ name: @record.name,
|
||||
category: @record.category,
|
||||
aliases: @record.snapshot_aliases.join(' '),
|
||||
parent_tag_ids: @record.snapshot_parent_tag_ids.join(' ') }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
class TagVersioning
|
||||
def self.record! tag, event_type:, created_by_user:
|
||||
if tag.nico?
|
||||
NicoTagVersionRecorder.record!(tag:, event_type:, created_by_user:)
|
||||
else
|
||||
TagVersionRecorder.record!(tag:, event_type:, created_by_user:)
|
||||
end
|
||||
end
|
||||
|
||||
def self.record_tag_snapshot! tag, created_by_user:
|
||||
event_type =
|
||||
if tag.nico?
|
||||
tag.nico_tag_versions.exists? ? :update : :create
|
||||
else
|
||||
tag.tag_versions.exists? ? :update : :create
|
||||
end
|
||||
|
||||
record!(tag, event_type:, created_by_user:)
|
||||
end
|
||||
|
||||
def self.record_tag_snapshots! tags, created_by_user:
|
||||
tags.each do |tag|
|
||||
record_tag_snapshot!(tag, created_by_user:)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -9,7 +9,7 @@ class VersionRecorder
|
||||
validate_event_type!
|
||||
end
|
||||
|
||||
def record! record, event_type:, created_by_user:
|
||||
def record!
|
||||
@record.with_lock do
|
||||
latest = latest_version
|
||||
|
||||
|
||||
Reference in New Issue
Block a user