discourse/db/migrate/20190111170824_migrate_reviewable_queued_posts.rb
Robin Ward 13c6bf54d0 FIX: Sometimes queued post would have a string for a category
In this case, don't migrate the old queued post category
2019-04-06 20:38:38 -04:00

105 lines
2.4 KiB
Ruby

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