discourse/db/migrate/20201109170951_migrate_gith...

46 lines
1.2 KiB
Ruby

# frozen_string_literal: true
class MigrateGithubUserInfos < ActiveRecord::Migration[6.0]
def up
# If the user_associated_accounts table is currently empty,
# maintain the primary key from github_user_infos
# This is useful for people that are using data explorer to access the data
maintain_ids = DB.query_single("SELECT count(*) FROM user_associated_accounts")[0] == 0
execute <<~SQL
INSERT INTO user_associated_accounts (
provider_name,
provider_uid,
user_id,
info,
last_used,
created_at,
updated_at
#{", id" if maintain_ids}
) SELECT
'github',
github_user_id,
user_id,
json_build_object('nickname', screen_name),
updated_at,
created_at,
updated_at
#{", id" if maintain_ids}
FROM github_user_infos
SQL
if maintain_ids
execute <<~SQL
SELECT setval(
pg_get_serial_sequence('user_associated_accounts', 'id'),
(select greatest(max(id), 1) from user_associated_accounts)
);
SQL
end
end
def down
raise ActiveRecord::IrreversibleMigration
end
end