0ff7fdf78a
#317 #317 #317 #317 #317 #317 Co-authored-by: miteruzo <miteruzo@naver.com> Reviewed-on: #333
92 lines
2.5 KiB
Ruby
92 lines
2.5 KiB
Ruby
class CreateWikiVersions < ActiveRecord::Migration[8.0]
|
|
class WikiPage < ActiveRecord::Base
|
|
self.table_name = 'wiki_pages'
|
|
end
|
|
|
|
class WikiRevision < ActiveRecord::Base
|
|
self.table_name = 'wiki_revisions'
|
|
end
|
|
|
|
class WikiRevisionLine < ActiveRecord::Base
|
|
self.table_name = 'wiki_revision_lines'
|
|
end
|
|
|
|
class WikiLine < ActiveRecord::Base
|
|
self.table_name = 'wiki_lines'
|
|
end
|
|
|
|
class WikiVersion < ActiveRecord::Base
|
|
self.table_name = 'wiki_versions'
|
|
end
|
|
|
|
class TagName < ActiveRecord::Base
|
|
self.table_name = 'tag_names'
|
|
end
|
|
|
|
def up
|
|
add_column :wiki_pages, :body, :text, after: :tag_name_id
|
|
|
|
create_table :wiki_versions do |t|
|
|
t.references :wiki_page, null: false, foreign_key: true
|
|
t.integer :version_no, null: false
|
|
t.string :event_type, null: false
|
|
t.string :title, null: false
|
|
t.text :body, null: false
|
|
t.text :reason
|
|
t.datetime :created_at, null: false
|
|
t.references :created_by_user, foreign_key: { to_table: :users }
|
|
|
|
t.index [:wiki_page_id, :version_no], unique: true
|
|
t.check_constraint 'version_no > 0',
|
|
name: 'wiki_versions_version_no_positive'
|
|
t.check_constraint "event_type IN ('create', 'update', 'discard', 'restore')",
|
|
name: 'wiki_versions_event_type_valid'
|
|
end
|
|
|
|
WikiPage.reset_column_information
|
|
WikiVersion.reset_column_information
|
|
|
|
say_with_time 'Backfilling wiki_versions' do
|
|
WikiPage.find_each do |page|
|
|
base_revision_id = nil
|
|
version_no = 1
|
|
title = TagName.find(page.tag_name_id).name
|
|
body = nil
|
|
loop do
|
|
rev = WikiRevision.where(wiki_page_id: page.id).find_by(base_revision_id:)
|
|
break unless rev
|
|
|
|
body = WikiRevisionLine.where(wiki_revision_id: rev.id).order(:position).map { |wrl|
|
|
WikiLine.find(wrl.wiki_line_id).body
|
|
}.join("\n")
|
|
|
|
WikiVersion.create!(
|
|
wiki_page_id: page.id,
|
|
version_no:,
|
|
event_type: version_no == 1 ? 'create' : 'update',
|
|
title:,
|
|
body:,
|
|
reason: rev.message,
|
|
created_at: rev.created_at,
|
|
created_by_user_id: rev.created_user_id)
|
|
|
|
version_no += 1
|
|
base_revision_id = rev.id
|
|
end
|
|
if body
|
|
page.update!(body:)
|
|
else
|
|
page.destroy!
|
|
end
|
|
end
|
|
end
|
|
|
|
change_column_null :wiki_pages, :body, false
|
|
end
|
|
|
|
def down
|
|
drop_table :wiki_versions
|
|
remove_column :wiki_pages, :body
|
|
end
|
|
end
|