From 971b2632b0c858841ed0c116a7d6d1f0a90ba053 Mon Sep 17 00:00:00 2001 From: miteruzo Date: Tue, 3 Nov 2026 15:17:10 +0900 Subject: [PATCH] #414 --- backend/app/models/event.rb | 9 +++++++++ backend/app/models/material_version.rb | 4 +--- backend/app/models/version_record.rb | 2 ++ backend/app/services/material_version_recorder.rb | 13 ++++++++----- backend/app/services/post_version_recorder.rb | 13 ++++++++----- backend/app/services/tag_version_recorder.rb | 8 ++++---- backend/app/services/version_recorder.rb | 8 +++++--- 7 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 backend/app/models/event.rb diff --git a/backend/app/models/event.rb b/backend/app/models/event.rb new file mode 100644 index 0000000..ae6b4e9 --- /dev/null +++ b/backend/app/models/event.rb @@ -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 diff --git a/backend/app/models/material_version.rb b/backend/app/models/material_version.rb index 326a8f9..bcc181d 100644 --- a/backend/app/models/material_version.rb +++ b/backend/app/models/material_version.rb @@ -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 diff --git a/backend/app/models/version_record.rb b/backend/app/models/version_record.rb index 15db840..88816ac 100644 --- a/backend/app/models/version_record.rb +++ b/backend/app/models/version_record.rb @@ -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 } diff --git a/backend/app/services/material_version_recorder.rb b/backend/app/services/material_version_recorder.rb index 08d5ad1..bbc8b03 100644 --- a/backend/app/services/material_version_recorder.rb +++ b/backend/app/services/material_version_recorder.rb @@ -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 diff --git a/backend/app/services/post_version_recorder.rb b/backend/app/services/post_version_recorder.rb index 873770b..ba9df20 100644 --- a/backend/app/services/post_version_recorder.rb +++ b/backend/app/services/post_version_recorder.rb @@ -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 diff --git a/backend/app/services/tag_version_recorder.rb b/backend/app/services/tag_version_recorder.rb index c0f1bb6..385fe69 100644 --- a/backend/app/services/tag_version_recorder.rb +++ b/backend/app/services/tag_version_recorder.rb @@ -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 diff --git a/backend/app/services/version_recorder.rb b/backend/app/services/version_recorder.rb index 395963c..8855a40 100644 --- a/backend/app/services/version_recorder.rb +++ b/backend/app/services/version_recorder.rb @@ -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