44 行
1.4 KiB
Ruby
44 行
1.4 KiB
Ruby
module Wiki
|
||
class CompatibilityWriter
|
||
def self.create! tag_name:, body:, created_by_user:, message: nil
|
||
ApplicationRecord.transaction do
|
||
tag_name.lock!
|
||
page = WikiPage.lock.find_by(tag_name_id: tag_name.id)
|
||
if page
|
||
update!(page:, body:, updated_by_user: created_by_user, message:)
|
||
page
|
||
else
|
||
Commit.create_legacy_content!(tag_name:, body:, created_by_user:, message:)
|
||
end
|
||
end
|
||
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
|
||
|
||
if Commit.normalise_body(page.body) == normalised && page.wiki_revisions.exists?
|
||
return
|
||
end
|
||
|
||
Commit.legacy_content!(
|
||
page:, body: normalised, created_user: updated_by_user, message:,
|
||
base_revision_id:)
|
||
end
|
||
end
|
||
end
|