defmodule Mobilizon.Repo.Migrations.SplitEventVisibilityAndJoinOptions do use Ecto.Migration alias Mobilizon.Events.EventVisibilityEnum alias Mobilizon.Events.JoinOptionsEnum @doc """ EventVisibilityEnum has dropped some possible values, so we need to recreate it Visibility allowed nullable values previously """ def up do execute "ALTER TABLE events ALTER COLUMN visibility TYPE VARCHAR USING visibility::text" EventVisibilityEnum.drop_type EventVisibilityEnum.create_type execute "ALTER TABLE events ALTER COLUMN visibility TYPE event_visibility_type USING visibility::event_visibility_type" JoinOptionsEnum.create_type alter table(:events) do add(:join_options, JoinOptionsEnum.type(), null: false, default: "free") end execute "UPDATE events SET visibility = 'public' WHERE visibility IS NULL" alter table(:events) do modify(:visibility, EventVisibilityEnum.type(), null: false, default: "public") end end def down do alter table(:events) do remove(:join_options) end JoinOptionsEnum.drop_type execute "ALTER TABLE events ALTER COLUMN visibility TYPE VARCHAR USING visibility::text" EventVisibilityEnum.drop_type EventVisibilityEnum.create_type execute "ALTER TABLE events ALTER COLUMN visibility TYPE event_visibility_type USING visibility::event_visibility_type" end end