このコミットが含まれているのは:
@@ -0,0 +1,9 @@
|
||||
class Event < ApplicationRecord
|
||||
has_many :post_versions
|
||||
has_many :tag_versions
|
||||
has_many :material_versions
|
||||
has_many :tag_description_versions
|
||||
has_many :tag_group_versions
|
||||
|
||||
belongs_to :created_by_user, class_name: 'User', optional: true
|
||||
end
|
||||
@@ -11,7 +11,5 @@ class MaterialVersion < ApplicationRecord
|
||||
belongs_to :parent, class_name: 'Material', optional: true
|
||||
belongs_to :updated_by_user, class_name: 'User', optional: true
|
||||
|
||||
def export_paths_hash
|
||||
export_paths_json || {}
|
||||
end
|
||||
def export_paths_hash = export_paths_json || { }
|
||||
end
|
||||
|
||||
@@ -19,6 +19,8 @@ module VersionRecord
|
||||
|
||||
belongs_to :created_by_user, class_name: 'User', optional: true
|
||||
|
||||
belongs_to :event
|
||||
|
||||
enum :event_type, event_type_map, prefix: true, validate: true
|
||||
|
||||
validates :version_no, presence: true, numericality: { only_integer: true, greater_than: 0 }
|
||||
|
||||
@@ -1,20 +1,23 @@
|
||||
class MaterialVersionRecorder < VersionRecorder
|
||||
EVENT_TYPES = ['create', 'update', 'discard', 'restore'].freeze
|
||||
|
||||
def self.record! material:, event_type:, created_by_user:, file_snapshot: nil
|
||||
new(material:, event_type:, created_by_user:, file_snapshot:).record!
|
||||
def self.record! material:, event_type:, event:, created_by_user:, file_snapshot: nil
|
||||
new(material:, event_type:, event:, created_by_user:, file_snapshot:).record!
|
||||
end
|
||||
|
||||
def initialize material:, event_type:, created_by_user:, file_snapshot: nil
|
||||
def initialize material:, event_type:, event:, created_by_user:, file_snapshot: nil
|
||||
@file_snapshot = file_snapshot
|
||||
|
||||
super(record: material, event_type:, created_by_user:)
|
||||
super(record: material, event_type:, event:, created_by_user:)
|
||||
end
|
||||
|
||||
def self.ensure_snapshot! material, created_by_user:
|
||||
return if material.material_versions.exists?
|
||||
|
||||
record!(material:, event_type: :create,
|
||||
event = Event.create!(event_type: 'materials.create',
|
||||
created_by_user:,
|
||||
created_at: material.created_at)
|
||||
record!(material:, event_type: :create, event:,
|
||||
created_by_user: material.created_by_user || created_by_user)
|
||||
end
|
||||
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
class PostVersionRecorder < VersionRecorder
|
||||
def self.record! post:, event_type:, created_by_user:
|
||||
new(post:, event_type:, created_by_user:).record!
|
||||
def self.record! post:, event_type:, event:, created_by_user:
|
||||
new(post:, event_type:, event:, created_by_user:).record!
|
||||
end
|
||||
|
||||
def initialize post:, event_type:, created_by_user:
|
||||
super(record: post, event_type:, created_by_user:)
|
||||
def initialize post:, event_type:, event:, created_by_user:
|
||||
super(record: post, event_type:, event:, 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:)
|
||||
event = Event.create!(event_type: 'posts.create',
|
||||
created_by_user:,
|
||||
created_at: post.created_at)
|
||||
record!(post:, event_type: :create, event:, created_by_user:)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
class TagVersionRecorder < VersionRecorder
|
||||
def self.record! tag:, event_type:, created_by_user:, **_options
|
||||
def self.record! tag:, event_type:, event:, created_by_user:, **_options
|
||||
Tag.transaction do
|
||||
SharedResourceIdAllocator.lock_space!(Tag, 'tags')
|
||||
new(tag:, event_type:, created_by_user:).record!
|
||||
new(tag:, event_type:, event:, created_by_user:).record!
|
||||
end
|
||||
end
|
||||
|
||||
def initialize tag:, event_type:, created_by_user:
|
||||
super(record: tag, event_type:, created_by_user:)
|
||||
def initialize tag:, event_type:, event:, created_by_user:
|
||||
super(record: tag, event_type:, event:, created_by_user:)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
class VersionRecorder
|
||||
EVENT_TYPES = ['create', 'update', 'discard', 'restore'].freeze
|
||||
|
||||
def initialize record:, event_type:, created_by_user:
|
||||
def initialize record:, event_type:, event:, created_by_user:
|
||||
@record = record
|
||||
@event_type = event_type.to_s
|
||||
@event = event
|
||||
@created_by_user = created_by_user
|
||||
|
||||
validate_event_type!
|
||||
@@ -42,8 +43,9 @@ class VersionRecorder
|
||||
def base_attributes latest
|
||||
{ version_no: (latest&.version_no || 0) + 1,
|
||||
event_type: @event_type,
|
||||
created_at: Time.current,
|
||||
created_by_user: @created_by_user }
|
||||
event: @event,
|
||||
created_by_user: @created_by_user,
|
||||
created_at: Time.current }
|
||||
end
|
||||
|
||||
def update_record_version_no! version_no
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする