discourse/db/migrate/20190111170824_migrate_reviewable_queued_posts.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

107 lines
2.4 KiB
Ruby

# frozen_string_literal: true
class MigrateReviewableQueuedPosts < ActiveRecord::Migration[5.2]
def up
execute(<<~SQL)
INSERT INTO reviewables (
type,
status,
created_by_id,
reviewable_by_moderator,
topic_id,
category_id,
payload,
created_at,
updated_at
)
SELECT 'ReviewableQueuedPost',
state - 1,
user_id,
true,
topic_id,
NULLIF(REGEXP_REPLACE(post_options->>'category', '[^0-9]+', '', 'g'), '')::int,
json_build_object(
'old_queued_post_id', id,
'raw', raw
)::jsonb || post_options::jsonb,
created_at,
updated_at
FROM queued_posts
SQL
# Migrate Created History
execute(<<~SQL)
INSERT INTO reviewable_histories (
reviewable_id,
reviewable_history_type,
status,
created_by_id,
created_at,
updated_at
)
SELECT r.id,
0,
0,
qp.user_id,
qp.created_at,
qp.created_at
FROM reviewables AS r
INNER JOIN queued_posts AS qp ON qp.id = (payload->>'old_queued_post_id')::int
SQL
# Migrate Approved History
execute(<<~SQL)
INSERT INTO reviewable_histories (
reviewable_id,
reviewable_history_type,
status,
created_by_id,
created_at,
updated_at
)
SELECT r.id,
1,
1,
qp.approved_by_id,
qp.approved_at,
qp.approved_at
FROM reviewables AS r
INNER JOIN queued_posts AS qp ON qp.id = (payload->>'old_queued_post_id')::int
WHERE qp.state = 2
SQL
# Migrate Rejected History
execute(<<~SQL)
INSERT INTO reviewable_histories (
reviewable_id,
reviewable_history_type,
status,
created_by_id,
created_at,
updated_at
)
SELECT r.id,
1,
2,
qp.rejected_by_id,
qp.rejected_at,
qp.rejected_at
FROM reviewables AS r
INNER JOIN queued_posts AS qp ON qp.id = (payload->>'old_queued_post_id')::int
WHERE qp.state = 3
SQL
end
def down
execute(<<~SQL)
DELETE FROM reviewable_histories
WHERE reviewable_id IN (SELECT id FROM reviewables WHERE type = 'ReviewableQueuedPost')
SQL
execute(<<~SQL)
DELETE FROM reviewables
WHERE type = 'ReviewableQueuedPost'
SQL
end
end