このコミットが含まれているのは:
2026-10-04 17:57:58 +09:00
コミット 6cd1fd43ee
4個のファイルの変更、48行の追加、13行の削除
+1 -2
ファイルの表示
@@ -48,9 +48,8 @@ class TagDescriptionsController < ApplicationController
description = TagDescription.find_by(tag_id: params[:id], language_code: 'ja')
return head :not_found unless description
page = WikiPage.find(description.id)
TagDescriptionOperation.update!(
description:, page:, body:, updated_by_user: current_user)
tag: description.tag, body:, updated_by_user: current_user)
description.reload
render json: representation(description)
+13 -8
ファイルの表示
@@ -7,7 +7,7 @@ class TagDescriptionOperation
raise ActiveRecord::RecordNotUnique if TagDescription.exists?(
tag_id: tag.id, language_code: LANGUAGE_CODE)
page = Wiki::Commit.create_legacy_content!(
page = Wiki::CompatibilityWriter.create!(
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,
@@ -16,18 +16,23 @@ class TagDescriptionOperation
end
end
def self.update!(description:, page:, body:, updated_by_user:, message: nil,
def self.update!(tag:, body:, updated_by_user:, message: nil,
base_revision_id: nil)
ApplicationRecord.transaction do
tag.lock!
description = TagDescription.lock.find_by(
tag_id: tag.id, language_code: LANGUAGE_CODE)
description&.lock!
page.lock!
revision = Wiki::Commit.legacy_content!(
page:, body:, created_user: updated_by_user, message:,
tag_name = tag.tag_name(LANGUAGE_CODE)
page = WikiPage.lock.find_by!(tag_name:)
revision = Wiki::CompatibilityWriter.update!(
page:, body:, updated_by_user:, message:,
base_revision_id:)
record_version!(tag: page.tag_name.tag, revision:, body: revision.body,
next unless revision
record_version!(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)
revision
end
end
+1 -3
ファイルの表示
@@ -43,11 +43,9 @@ module Wiki
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,
tag:, body:, updated_by_user: created_user,
message:, base_revision_id:)
end
+33
ファイルの表示
@@ -0,0 +1,33 @@
module Wiki
class CompatibilityWriter
def self.create! tag_name:, body:, created_by_user:, message: nil
Commit.create_legacy_content!(
tag_name:, body:, created_by_user:, message:)
end
def self.update! page:, body:, updated_by_user:, message: nil,
base_revision_id: nil
normalised = Commit.normalise_body(body)
if normalised.blank?
return Commit.legacy_content!(
page:, body: normalised, created_user: updated_by_user, message:,
base_revision_id:)
end
if base_revision_id.present?
current_id = page.wiki_revisions.maximum(:id)
if current_id && current_id != base_revision_id.to_i
raise Commit::Conflict,
"競合が発生してゐます" +
"(現在の Id.:#{ current_id },ベース Id.:#{ base_revision_id })."
end
end
return if Commit.normalise_body(page.body) == normalised
Commit.legacy_content!(
page:, body: normalised, created_user: updated_by_user, message:,
base_revision_id:)
end
end
end