defmodule Mobilizon.Repo.Migrations.MoveParticipantRoleToEnum do use Ecto.Migration alias Mobilizon.Events.ParticipantRoleEnum def up do ParticipantRoleEnum.create_type() alter table(:participants) do add(:role_tmp, ParticipantRoleEnum.type(), default: "participant") end execute "UPDATE participants set role_tmp = 'not_approved' where role = 0" execute "UPDATE participants set role_tmp = 'participant' where role = 1" execute "UPDATE participants set role_tmp = 'moderator' where role = 2" execute "UPDATE participants set role_tmp = 'administrator' where role = 3" execute "UPDATE participants set role_tmp = 'creator' where role = 4" alter table(:participants) do remove(:role) end rename table(:participants), :role_tmp, to: :role end def down do alter table(:participants) do add(:role_tmp, :integer, default: 1) end execute "UPDATE participants set role_tmp = 0 where role = 'not_approved'" execute "UPDATE participants set role_tmp = 1 where role = 'participant'" execute "UPDATE participants set role_tmp = 2 where role = 'moderator'" execute "UPDATE participants set role_tmp = 3 where role = 'administrator'" execute "UPDATE participants set role_tmp = 4 where role = 'creator'" alter table(:participants) do remove(:role) end ParticipantRoleEnum.drop_type() rename table(:participants), :role_tmp, to: :role end end