このコミットが含まれているのは:
2026-11-03 15:17:10 +09:00
コミット 971b2632b0
7個のファイルの変更、37行の追加、20行の削除
+9
ファイルの表示
@@ -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
+1 -3
ファイルの表示
@@ -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
+2
ファイルの表示
@@ -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 }
+8 -5
ファイルの表示
@@ -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
+8 -5
ファイルの表示
@@ -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
+4 -4
ファイルの表示
@@ -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
+5 -3
ファイルの表示
@@ -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