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