このコミットが含まれているのは:
2026-10-04 17:23:44 +09:00
コミット 6f2f56b7b4
4個のファイルの変更、156行の追加、22行の削除
+51
ファイルの表示
@@ -0,0 +1,51 @@
class TagDescriptionOperation
LANGUAGE_CODE = 'ja'
def self.create!(tag:, body:, created_by_user:, message: nil)
ApplicationRecord.transaction do
tag.lock!
raise ActiveRecord::RecordNotUnique if TagDescription.exists?(
tag_id: tag.id, language_code: LANGUAGE_CODE)
page = Wiki::Commit.create_legacy_content!(
tag_name: tag.tag_name(LANGUAGE_CODE), body:, created_by_user:, message:)
revision = page.wiki_revisions.order(id: :desc).first
record_version!(tag:, revision:, body:, user: created_by_user,
description: nil)
page
end
end
def self.update!(description:, page:, body:, updated_by_user:, message: nil,
base_revision_id: nil)
ApplicationRecord.transaction do
description&.lock!
page.lock!
revision = Wiki::Commit.legacy_content!(
page:, body:, created_user: updated_by_user, message:,
base_revision_id:)
record_version!(tag: page.tag_name.tag, revision:, body: revision.body,
user: updated_by_user, description:)
description || TagDescription.find_by!(
tag_id: page.tag_name.tag_id, language_code: LANGUAGE_CODE)
end
end
def self.record_version! tag:, revision:, body:, user:, description:
version_no = description ? description.version_no + 1 : 1
TagDescriptionVersion.create!(
id: revision.id, tag_id: tag.id, language_code: LANGUAGE_CODE,
version_no:, event_type: description ? 'update' : 'create', body:,
created_by_user_id: user.id, created_at: revision.created_at)
if description
description.update!(body:, version_no:, updated_by_user_id: user.id)
else
TagDescription.create!(
id: revision.wiki_page_id, tag_id: tag.id,
language_code: LANGUAGE_CODE, version_no:, body:,
created_by_user_id: user.id, updated_by_user_id: user.id)
end
end
private_class_method :record_version!
end
+23 -22
ファイルの表示
@@ -8,6 +8,15 @@ module Wiki
end
def self.create_content! tag_name:, body:, created_by_user:, message: nil
if tag_name.tag && tag_name.language_code == 'ja'
return TagDescriptionOperation.create!(
tag: tag_name.tag, body:, created_by_user:, message:)
end
create_legacy_content!(tag_name:, body:, created_by_user:, message:)
end
def self.create_legacy_content! tag_name:, body:, created_by_user:, message: nil
normalised = normalise_body(body)
page = WikiPage.new(tag_name:,
@@ -33,6 +42,20 @@ module Wiki
end
def self.content! page:, body:, created_user:, message: nil, base_revision_id: nil
tag = page.tag_name.tag
description = tag && page.tag_name.language_code == 'ja' &&
TagDescription.find_by(tag_id: tag.id, language_code: 'ja')
if tag && page.tag_name.language_code == 'ja'
return TagDescriptionOperation.update!(
description:, page:, body:, updated_by_user: created_user,
message:, base_revision_id:)
end
legacy_content!(page:, body:, created_user:, message:, base_revision_id:)
end
def self.legacy_content! page:, body:, created_user:, message: nil,
base_revision_id: nil
new(page:, created_user:).content!(body:, message:, base_revision_id:)
end
@@ -93,8 +116,6 @@ module Wiki
{ wiki_revision_id: rev.id, wiki_line_id: line_id, position: pos }
end
WikiRevisionLine.insert_all!(rows) if rows.any?
record_description!(rev, normalised)
rev
end
end
@@ -110,26 +131,6 @@ module Wiki
private
def record_description! revision, body
tag = @page.tag_name.tag
return unless tag && @page.tag_name.language_code == 'ja'
tag.lock!
description = TagDescription.lock.find_by(tag_id: tag.id, language_code: 'ja')
version_no = description ? description.version_no + 1 : 1
TagDescriptionVersion.create!(
id: revision.id, tag_id: tag.id, language_code: 'ja', version_no:,
event_type: description ? 'update' : 'create', body:,
created_by_user_id: @created_user.id, created_at: revision.created_at)
if description
description.update!(body:, version_no:, updated_by_user_id: @created_user.id)
else
TagDescription.create!(
id: @page.id, tag_id: tag.id, language_code: 'ja', version_no:, body:,
created_by_user_id: @created_user.id, updated_by_user_id: @created_user.id)
end
end
def split_lines(body) = body.split("\n")
def upsert_lines! lines, line_shas