投稿に対する履歴(#264) (#307)
Merge branch 'main' into feature/264 #264 #264 #264 #264 Co-authored-by: miteruzo <miteruzo@naver.com> Reviewed-on: #307
This commit was merged in pull request #307.
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
class PostVersionRecorder
|
||||
def self.record! post:, event_type:, created_by_user:
|
||||
new(post:, event_type:, created_by_user:).record!
|
||||
end
|
||||
|
||||
def initialize post:, event_type:, created_by_user:
|
||||
@post = post
|
||||
@event_type = event_type
|
||||
@created_by_user = created_by_user
|
||||
end
|
||||
|
||||
def record!
|
||||
@post.with_lock do
|
||||
latest = @post.post_versions.order(version_no: :desc).first
|
||||
attrs = snapshot_attributes
|
||||
|
||||
return latest if @event_type == :update && latest && same_snapshot?(latest, attrs)
|
||||
|
||||
PostVersion.create!(
|
||||
post: @post,
|
||||
version_no: (latest&.version_no || 0) + 1,
|
||||
event_type: @event_type,
|
||||
title: attrs[:title],
|
||||
url: attrs[:url],
|
||||
thumbnail_base: attrs[:thumbnail_base],
|
||||
tags: attrs[:tags],
|
||||
parent: attrs[:parent],
|
||||
original_created_from: attrs[:original_created_from],
|
||||
original_created_before: attrs[:original_created_before],
|
||||
created_at: Time.current,
|
||||
created_by_user: @created_by_user)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def snapshot_attributes
|
||||
{ title: @post.title,
|
||||
url: @post.url,
|
||||
thumbnail_base: @post.thumbnail_base,
|
||||
tags: @post.snapshot_tag_names.join(' '),
|
||||
parent: @post.parent,
|
||||
original_created_from: @post.original_created_from,
|
||||
original_created_before: @post.original_created_before }
|
||||
end
|
||||
|
||||
def same_snapshot? version, attrs
|
||||
true &&
|
||||
version.title == attrs[:title] &&
|
||||
version.url == attrs[:url] &&
|
||||
version.thumbnail_base == attrs[:thumbnail_base] &&
|
||||
version.tags == attrs[:tags] &&
|
||||
version.parent_id == attrs[:parent]&.id &&
|
||||
version.original_created_from == attrs[:original_created_from] &&
|
||||
version.original_created_before == attrs[:original_created_before]
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user