Current section

Files

Jump to
blossom lib blossom migrations postgres v01.ex
Raw

lib/blossom/migrations/postgres/v01.ex

defmodule Blossom.Migrations.Postgres.V01 do
use Ecto.Migration
def up(_opts) do
execute("CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";")
create_if_not_exists table(:users, primary_key: false) do
add(:id, :uuid,
primary_key: true,
default: fragment("uuid_generate_v4()")
)
add(:blocked, :boolean, null: false, default: false)
add(:email, :string, null: false)
add(:email_verified, :boolean)
add(:password, :string, null: false)
add(:username, :string)
add(:inserted_at, :naive_datetime,
null: false,
default: fragment("now()")
)
add(:updated_at, :naive_datetime, null: false, default: fragment("now()"))
end
create(unique_index(:users, [:email]))
create(unique_index(:users, [:username]))
create_if_not_exists table(:organizations, primary_key: false) do
add(:id, :uuid,
primary_key: true,
default: fragment("uuid_generate_v4()")
)
add(:enabled, :boolean)
add(:name, :string)
add(:slug, :string)
add(:inserted_at, :naive_datetime,
null: false,
default: fragment("now()")
)
add(:updated_at, :naive_datetime, null: false, default: fragment("now()"))
end
create(unique_index(:organizations, [:slug]))
create_if_not_exists table(:organizations_roles, primary_key: false) do
add(:id, :uuid,
primary_key: true,
default: fragment("uuid_generate_v4()")
)
add(
:organization,
references(:organizations, type: :uuid, on_delete: :delete_all),
null: false
)
add(
:user,
references(:users, type: :uuid, on_delete: :delete_all),
null: false
)
add(:role, :string, null: false)
add(:inserted_at, :naive_datetime,
null: false,
default: fragment("now()")
)
add(:updated_at, :naive_datetime, null: false, default: fragment("now()"))
end
create(unique_index(:organizations_roles, [:organization, :user, :role]))
create_if_not_exists table(:verification_codes, primary_key: false) do
add(:id, :uuid,
primary_key: true,
default: fragment("uuid_generate_v4()")
)
add(:code, :string, null: false)
add(:kind, :string, null: false)
add(:expiration, :integer, null: false)
add(:user, references(:users, type: :uuid, on_delete: :delete_all),
null: false
)
add(:inserted_at, :naive_datetime,
null: false,
default: fragment("now()")
)
add(:updated_at, :naive_datetime, null: false, default: fragment("now()"))
end
create(unique_index(:verification_codes, [:code]))
end
def down(_opts) do
drop_if_exists(table(:verification_codes))
drop_if_exists(table(:organizations_roles))
drop_if_exists(table(:organizations))
drop_if_exists(table(:users))
execute("DROP EXTENSION IF EXISTS \"uuid-ossp\";")
end
end