defmodule Mobilizon.Repo.Migrations.MoveMemberRoleToEnum do use Ecto.Migration alias Mobilizon.Actors.MemberRole def up do MemberRole.create_type() alter table(:members) do add(:role_tmp, MemberRole.type(), default: "member") end execute("UPDATE members set role_tmp = 'member' where role = 0") execute("UPDATE members set role_tmp = 'moderator' where role = 1") execute("UPDATE members set role_tmp = 'creator' where role = 2") execute("UPDATE members set role_tmp = 'not_approved' where approved is false") alter table(:members) do remove(:role) remove(:approved) end rename(table(:members), :role_tmp, to: :role) end def down do alter table(:members) do add(:role_tmp, :integer, default: 0) add(:approved, :boolean, default: true) end execute("UPDATE members set approved = false where role = 'not_approved'") execute("UPDATE members set role_tmp = 0 where role = 'member' or role = 'not_approved'") execute("UPDATE members set role_tmp = 1 where role = 'moderator'") execute("UPDATE members set role_tmp = 2 where role = 'administrator' or role = 'creator'") alter table(:members) do remove(:role) end MemberRole.drop_type() rename(table(:members), :role_tmp, to: :role) end end