This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
module MyDiscard
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included { include Discard::Model }
|
||||
included do
|
||||
include Discard::Model
|
||||
|
||||
default_scope -> { kept }
|
||||
end
|
||||
|
||||
class_methods do
|
||||
def find_undiscard_or_create_by! attrs, &block
|
||||
|
||||
@@ -1,29 +1,13 @@
|
||||
class PostVersion < ApplicationRecord
|
||||
before_update do
|
||||
raise ActiveRecord::ReadOnlyRecord, '版は更新できません.'
|
||||
end
|
||||
|
||||
before_destroy do
|
||||
raise ActiveRecord::ReadOnlyRecord, '版は削除できません.'
|
||||
end
|
||||
include VersionRecord
|
||||
|
||||
belongs_to :post
|
||||
belongs_to :parent, class_name: 'Post', optional: true
|
||||
belongs_to :created_by_user, class_name: 'User', optional: true
|
||||
|
||||
enum :event_type, { create: 'create',
|
||||
update: 'update',
|
||||
discard: 'discard',
|
||||
restore: 'restore' }, prefix: true, validate: true
|
||||
|
||||
validates :version_no, presence: true, numericality: { only_integer: true, greater_than: 0 }
|
||||
validates :event_type, presence: true, inclusion: { in: event_types.keys }
|
||||
validates :url, presence: true
|
||||
|
||||
validate :validate_original_created_range
|
||||
|
||||
scope :chronological, -> { order(:version_no, :id) }
|
||||
|
||||
private
|
||||
|
||||
def validate_original_created_range
|
||||
|
||||
@@ -8,8 +8,6 @@ class Tag < ApplicationRecord
|
||||
;
|
||||
end
|
||||
|
||||
default_scope -> { kept }
|
||||
|
||||
has_many :post_tags, inverse_of: :tag
|
||||
has_many :active_post_tags, -> { kept }, class_name: 'PostTag', inverse_of: :tag
|
||||
has_many :post_tags_with_discarded, -> { with_discarded }, class_name: 'PostTag'
|
||||
@@ -36,6 +34,9 @@ class Tag < ApplicationRecord
|
||||
has_many :deerjikists, dependent: :delete_all
|
||||
has_many :materials
|
||||
|
||||
has_many :tag_versions
|
||||
has_many :nico_tag_versions
|
||||
|
||||
belongs_to :tag_name
|
||||
delegate :wiki_page, to: :tag_name
|
||||
|
||||
@@ -152,10 +153,11 @@ class Tag < ApplicationRecord
|
||||
retry
|
||||
end
|
||||
|
||||
def self.merge_tags! target_tag, source_tags
|
||||
def self.merge_tags! target_tag, source_tags, created_by_user: nil
|
||||
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|
|
||||
@@ -166,7 +168,7 @@ class Tag < ApplicationRecord
|
||||
source_tag.post_tags.kept.find_each do |source_pt|
|
||||
post_id = source_pt.post_id
|
||||
affected_post_ids << post_id
|
||||
source_pt.discard_by!(nil)
|
||||
source_pt.discard_by!(created_by_user)
|
||||
unless PostTag.kept.exists?(post_id:, tag: target_tag)
|
||||
PostTag.create!(post_id:, tag: target_tag)
|
||||
end
|
||||
@@ -179,6 +181,7 @@ class Tag < ApplicationRecord
|
||||
end
|
||||
|
||||
source_tag.discard!
|
||||
record_tag_discard!(source_tag, current_by_user: nil)
|
||||
|
||||
if source_tag.nico?
|
||||
source_tag_name.discard!
|
||||
@@ -186,10 +189,12 @@ class Tag < ApplicationRecord
|
||||
source_tag_name.update_columns(canonical_id: target_tag.tag_name_id,
|
||||
updated_at: Time.current)
|
||||
end
|
||||
|
||||
record_tag_version!(target_tag, event_type: :update, created_by_user: nil)
|
||||
end
|
||||
|
||||
Post.where(id: affected_post_ids.to_a).find_each do |post|
|
||||
PostVersionRecorder.record!(post:, event_type: :update, created_by_user: nil)
|
||||
PostVersionRecorder.record!(post:, event_type: :update, created_by_user:)
|
||||
end
|
||||
|
||||
# 投稿件数を再集計
|
||||
@@ -199,6 +204,14 @@ class Tag < ApplicationRecord
|
||||
target_tag.reload
|
||||
end
|
||||
|
||||
def snapshot_aliases = tag_name.aliases.kept.order(:name).pluck(:name)
|
||||
|
||||
def snapshot_parent_tag_ids = parents.order('id').pluck('id')
|
||||
|
||||
def snapshot_linked_tags
|
||||
linked_tags.joins(:tag_name).order('tag_names.name').pluck('tag_names.name')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def nico_tag_name_must_start_with_nico
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
class TagVersion < ApplicationRecord
|
||||
include VersionRecord
|
||||
|
||||
belongs_to :tag
|
||||
|
||||
enum :category, { deerjikist: 'deerjikist',
|
||||
meme: 'meme',
|
||||
character: 'character',
|
||||
general: 'general',
|
||||
material: 'material',
|
||||
meta: 'meta',
|
||||
nico: 'nico' }, validate: true
|
||||
|
||||
validates :name, presence: true
|
||||
validates :category, presence: true
|
||||
end
|
||||
@@ -0,0 +1,19 @@
|
||||
module VersionRecord
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
def readonly? = persisted?
|
||||
|
||||
included do
|
||||
belongs_to :created_by_user, class_name: 'User', optional: true
|
||||
|
||||
enum :event_type, { create: 'create',
|
||||
update: 'update',
|
||||
discard: 'discard',
|
||||
restore: 'restore' }, prefix: true, validate: true
|
||||
|
||||
validates :version_no, presence: true, numericality: { only_integer: true, greater_than: 0 }
|
||||
validates :event_type, presence: true
|
||||
|
||||
scope :chronological, -> { order(:version_no, :id) }
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user