2017-04-26 14:47:36 -04:00
|
|
|
require_dependency 'column_dropper'
|
|
|
|
|
|
|
|
class CreateUserEmails < ActiveRecord::Migration
|
|
|
|
def up
|
|
|
|
create_table :user_emails do |t|
|
|
|
|
t.integer :user_id, null: false
|
|
|
|
t.string :email, limit: 513, null: false
|
|
|
|
t.boolean :primary, default: false, null: false
|
2017-08-07 11:48:36 -04:00
|
|
|
t.timestamps null: false
|
2017-04-26 14:47:36 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
add_index :user_emails, :user_id
|
|
|
|
add_index :user_emails, [:user_id, :primary], unique: true
|
|
|
|
|
|
|
|
execute "CREATE UNIQUE INDEX index_user_emails_on_email ON user_emails (lower(email));"
|
|
|
|
|
|
|
|
execute <<~SQL
|
|
|
|
INSERT INTO user_emails (
|
|
|
|
id,
|
|
|
|
user_id,
|
|
|
|
email,
|
|
|
|
"primary",
|
|
|
|
created_at,
|
|
|
|
updated_at
|
|
|
|
) SELECT
|
|
|
|
id,
|
|
|
|
id,
|
|
|
|
email,
|
|
|
|
'TRUE',
|
|
|
|
created_at,
|
|
|
|
updated_at
|
|
|
|
FROM users
|
|
|
|
SQL
|
|
|
|
|
|
|
|
change_column_null :users, :email, true
|
|
|
|
ColumnDropper.mark_readonly(:users, :email)
|
|
|
|
end
|
|
|
|
|
|
|
|
def down
|
|
|
|
raise ActiveRecord::IrreversibleMigration
|
|
|
|
end
|
|
|
|
end
|