This commit is contained in:
@@ -173,6 +173,8 @@ class PostsController < ApplicationController
|
||||
post = Post.find(params[:id].to_i)
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
PostVersionRecorder.ensure_snapshot!(post, created_by_user: current_user)
|
||||
|
||||
post.update!(title:, original_created_from:, original_created_before:)
|
||||
|
||||
normalised_tags = Tag.normalise_tags(tag_names, with_tagme: false)
|
||||
|
||||
@@ -12,6 +12,8 @@ class TagChildrenController < ApplicationController
|
||||
return head :bad_request if parent.nico? || child.nico?
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
TagVersioning.ensure_snapshot!(child, created_by_user: current_user)
|
||||
|
||||
TagImplication.find_or_create_by!(parent_tag: parent, tag: child)
|
||||
TagVersionRecorder.record!(tag: child, event_type: :update, created_by_user: current_user)
|
||||
end
|
||||
@@ -32,6 +34,8 @@ class TagChildrenController < ApplicationController
|
||||
return head :bad_request if parent.nico? || child.nico?
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
TagVersioning.ensure_snapshot!(child, created_by_user: current_user)
|
||||
|
||||
TagImplication.find_by(parent_tag: parent, tag: child)&.destroy!
|
||||
TagVersionRecorder.record!(tag: child, event_type: :update, created_by_user: current_user)
|
||||
end
|
||||
|
||||
@@ -224,8 +224,11 @@ class TagsController < ApplicationController
|
||||
end
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
TagVersioning.ensure_snapshot!(tag, created_by_user: current_user)
|
||||
|
||||
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
|
||||
|
||||
|
||||
+11
-20
@@ -79,25 +79,11 @@ class Tag < ApplicationRecord
|
||||
|
||||
def material_id = materials.first&.id
|
||||
|
||||
def self.tagme
|
||||
@tagme ||= find_or_create_by_tag_name!('タグ希望', category: :meta)
|
||||
end
|
||||
|
||||
def self.bot
|
||||
@bot ||= find_or_create_by_tag_name!('bot操作', category: :meta)
|
||||
end
|
||||
|
||||
def self.no_deerjikist
|
||||
@no_deerjikist ||= find_or_create_by_tag_name!('ニジラー情報不詳', category: :meta)
|
||||
end
|
||||
|
||||
def self.video
|
||||
@video ||= find_or_create_by_tag_name!('動画', category: :meta)
|
||||
end
|
||||
|
||||
def self.niconico
|
||||
@niconico ||= find_or_create_by_tag_name!('ニコニコ', category: :meta)
|
||||
end
|
||||
def self.tagme = find_or_create_by_tag_name!('タグ希望', category: :meta)
|
||||
def self.bot = find_or_create_by_tag_name!('bot操作', category: :meta)
|
||||
def self.no_deerjikist = find_or_create_by_tag_name!('ニジラー情報不詳', category: :meta)
|
||||
def self.video = find_or_create_by_tag_name!('動画', category: :meta)
|
||||
def self.niconico = find_or_create_by_tag_name!('ニコニコ', category: :meta)
|
||||
|
||||
def self.normalise_tags tag_names, with_tagme: true,
|
||||
with_no_deerjikist: true,
|
||||
@@ -159,11 +145,15 @@ class Tag < ApplicationRecord
|
||||
affected_post_ids = Set.new
|
||||
|
||||
Tag.transaction do
|
||||
TagVersioning.ensure_snapshot!(target_tag, created_by_user:)
|
||||
|
||||
Array(source_tags).compact.uniq.each do |source_tag|
|
||||
source_tag => Tag
|
||||
|
||||
next if source_tag == target_tag
|
||||
|
||||
TagVersioning.ensure_snapshot!(source_tag, created_by_user:)
|
||||
|
||||
source_tag.post_tags.kept.find_each do |source_pt|
|
||||
post_id = source_pt.post_id
|
||||
affected_post_ids << post_id
|
||||
@@ -179,6 +169,7 @@ class Tag < ApplicationRecord
|
||||
raise ActiveRecord::RecordInvalid.new(source_tag_name)
|
||||
end
|
||||
|
||||
TagVersioning.record!(source_tag, event_type: :discard, created_by_user:)
|
||||
source_tag.discard!
|
||||
|
||||
if source_tag.nico?
|
||||
@@ -188,11 +179,11 @@ class Tag < ApplicationRecord
|
||||
updated_at: Time.current)
|
||||
end
|
||||
|
||||
TagVersioning.record!(source_tag, event_type: :discard, created_by_user:)
|
||||
TagVersioning.record!(target_tag, event_type: :update, created_by_user:)
|
||||
end
|
||||
|
||||
Post.where(id: affected_post_ids.to_a).find_each do |post|
|
||||
PostVersionRecorder.ensure_snapshot!(post, created_by_user:)
|
||||
PostVersionRecorder.record!(post:, event_type: :update, created_by_user:)
|
||||
end
|
||||
|
||||
|
||||
@@ -7,6 +7,12 @@ class PostVersionRecorder < VersionRecorder
|
||||
super(record: post, event_type:, created_by_user:)
|
||||
end
|
||||
|
||||
def self.ensure_snapshot! post, created_by_user:
|
||||
return if post.post_versions.exists?
|
||||
|
||||
record!(post:, event_type: :create, created_by_user:)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def version_class = PostVersion
|
||||
|
||||
@@ -7,6 +7,18 @@ class TagVersioning
|
||||
end
|
||||
end
|
||||
|
||||
def self.ensure_snapshot! tag, created_by_user:
|
||||
if tag.nico?
|
||||
return if tag.nico_tag_versions.exists?
|
||||
|
||||
NicoTagVersionRecorder.record!(tag:, event_type: :create, created_by_user:)
|
||||
else
|
||||
return if tag.tag_versions.exists?
|
||||
|
||||
TagVersionRecorder.record!(tag:, event_type: :create, created_by_user:)
|
||||
end
|
||||
end
|
||||
|
||||
def self.record_tag_snapshot! tag, created_by_user:
|
||||
event_type =
|
||||
if tag.nico?
|
||||
|
||||
@@ -10,7 +10,10 @@ class VersionRecorder
|
||||
end
|
||||
|
||||
def record!
|
||||
@record.with_lock do
|
||||
raise "#{ record_class.name } must be persisted" unless @record.persisted?
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
@record = record_class.unscoped.lock.find(@record.id)
|
||||
latest = latest_version
|
||||
|
||||
if !(latest) && @event_type != 'create'
|
||||
@@ -54,4 +57,6 @@ class VersionRecorder
|
||||
def version_association = raise NotImplementedError
|
||||
def record_key = raise NotImplementedError
|
||||
def snapshot_attributes = raise NotImplementedError
|
||||
|
||||
def record_class = @record.class
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user