discourse/db/migrate/20190315174428_migrate_flag_history.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

134 lines
3.1 KiB
Ruby

# frozen_string_literal: true
class MigrateFlagHistory < ActiveRecord::Migration[5.2]
def up
# 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,
r.created_by_id,
r.created_at,
r.created_at
FROM reviewables AS r
WHERE r.type = 'ReviewableFlaggedPost'
AND (
NOT EXISTS(
SELECT 1
FROM reviewable_histories AS rh
WHERE rh.reviewable_id = r.id
AND rh.reviewable_history_type = 0
)
)
SQL
# Approved
execute(<<~SQL)
INSERT INTO reviewable_histories (
reviewable_id,
reviewable_history_type,
status,
created_by_id,
created_at,
updated_at
)
SELECT r.id,
1,
1,
pa.agreed_by_id,
pa.agreed_at,
pa.agreed_at
FROM reviewables AS r
INNER JOIN post_actions AS pa ON pa.post_id = r.target_id
WHERE r.type = 'ReviewableFlaggedPost'
AND pa.agreed_at IS NOT NULL
AND pa.agreed_by_id IS NOT NULL
SQL
# Rejected
execute(<<~SQL)
INSERT INTO reviewable_histories (
reviewable_id,
reviewable_history_type,
status,
created_by_id,
created_at,
updated_at
)
SELECT r.id,
1,
2,
pa.disagreed_by_id,
pa.disagreed_at,
pa.disagreed_at
FROM reviewables AS r
INNER JOIN post_actions AS pa ON pa.post_id = r.target_id
WHERE r.type = 'ReviewableFlaggedPost'
AND pa.disagreed_at IS NOT NULL
AND pa.disagreed_by_id IS NOT NULL
SQL
# Ignored
execute(<<~SQL)
INSERT INTO reviewable_histories (
reviewable_id,
reviewable_history_type,
status,
created_by_id,
created_at,
updated_at
)
SELECT r.id,
1,
3,
pa.deferred_by_id,
pa.deferred_at,
pa.deferred_at
FROM reviewables AS r
INNER JOIN post_actions AS pa ON pa.post_id = r.target_id
WHERE r.type = 'ReviewableFlaggedPost'
AND pa.deferred_at IS NOT NULL
AND pa.deferred_by_id IS NOT NULL
SQL
# Deleted
execute(<<~SQL)
INSERT INTO reviewable_histories (
reviewable_id,
reviewable_history_type,
status,
created_by_id,
created_at,
updated_at
)
SELECT r.id,
1,
4,
pa.deleted_by_id,
pa.deleted_at,
pa.deleted_at
FROM reviewables AS r
INNER JOIN post_actions AS pa ON pa.post_id = r.target_id
WHERE r.type = 'ReviewableFlaggedPost'
AND pa.deleted_at IS NOT NULL
AND pa.deleted_by_id IS NOT NULL
SQL
end
def down
execute(<<~SQL)
DELETE FROM reviewable_histories
WHERE reviewable_id IN (SELECT id FROM reviewables WHERE type = 'ReviewableFlaggedPost')
SQL
end
end