mirror of
https://github.com/ash-project/ash_postgres.git
synced 2024-09-21 05:53:18 +12:00
eb2bd267cb
chore: rebuild test migrations
262 lines
7 KiB
Elixir
262 lines
7 KiB
Elixir
defmodule AshPostgres.TestRepo.Migrations.MigrateResources1 do
|
|
@moduledoc """
|
|
Updates resources based on their most recent snapshots.
|
|
|
|
This file was autogenerated with `mix ash_postgres.generate_migrations`
|
|
"""
|
|
|
|
use Ecto.Migration
|
|
|
|
def up do
|
|
execute("""
|
|
CREATE TYPE status AS ENUM ('open', 'closed');
|
|
"""
|
|
)
|
|
|
|
execute "CREATE SCHEMA profiles"
|
|
|
|
create table(:users, primary_key: false) do
|
|
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
|
add :name, :text
|
|
add :org_id, :uuid
|
|
end
|
|
|
|
create table(:profile, primary_key: false, prefix: "profiles") do
|
|
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
|
add :description, :text
|
|
add :author_id, :uuid
|
|
end
|
|
|
|
create table(:posts, primary_key: false) do
|
|
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
|
add :title, :text
|
|
add :score, :bigint
|
|
add :public, :boolean
|
|
add :category, :citext
|
|
add :type, :text, default: "sponsored"
|
|
add :price, :bigint
|
|
add :decimal, :decimal, default: "0"
|
|
add :status, :text
|
|
add :status_enum, :status
|
|
add :point, {:array, :float}
|
|
add :uniq_one, :text
|
|
add :uniq_two, :text
|
|
add :created_at, :utc_datetime_usec, null: false, default: fragment("now()")
|
|
add :updated_at, :utc_datetime_usec, null: false, default: fragment("now()")
|
|
add :author_id, :uuid
|
|
end
|
|
|
|
create table(:post_ratings, primary_key: false) do
|
|
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
|
add :score, :bigint
|
|
|
|
add :resource_id,
|
|
references(:posts, column: :id, name: "post_ratings_resource_id_fkey", type: :uuid)
|
|
end
|
|
|
|
create table(:post_links, primary_key: false) do
|
|
add :source_post_id,
|
|
references(:posts,
|
|
column: :id,
|
|
name: "post_links_source_post_id_fkey",
|
|
type: :uuid,
|
|
prefix: "public"
|
|
),
|
|
primary_key: true,
|
|
null: false
|
|
|
|
add :destination_post_id,
|
|
references(:posts,
|
|
column: :id,
|
|
name: "post_links_destination_post_id_fkey",
|
|
type: :uuid,
|
|
prefix: "public"
|
|
),
|
|
primary_key: true,
|
|
null: false
|
|
end
|
|
|
|
create table(:multitenant_orgs, primary_key: false) do
|
|
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
|
end
|
|
|
|
alter table(:users) do
|
|
modify :org_id,
|
|
references(:multitenant_orgs,
|
|
column: :id,
|
|
name: "users_org_id_fkey",
|
|
type: :uuid,
|
|
prefix: "public"
|
|
)
|
|
end
|
|
|
|
alter table(:multitenant_orgs) do
|
|
add :name, :text
|
|
end
|
|
|
|
create unique_index(:multitenant_orgs, [:id, :name],
|
|
name: "multitenant_orgs_unique_by_name_index"
|
|
)
|
|
|
|
create table(:integer_posts, primary_key: false) do
|
|
add :id, :bigserial, null: false, primary_key: true
|
|
add :title, :text
|
|
end
|
|
|
|
create table(:comments, primary_key: false) do
|
|
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
|
add :title, :text
|
|
add :likes, :bigint
|
|
add :arbitrary_timestamp, :utc_datetime_usec
|
|
add :created_at, :utc_datetime_usec, null: false, default: fragment("now()")
|
|
|
|
add :post_id,
|
|
references(:posts,
|
|
column: :id,
|
|
name: "special_name_fkey",
|
|
type: :uuid,
|
|
prefix: "public",
|
|
on_delete: :delete_all,
|
|
on_update: :update_all
|
|
)
|
|
|
|
add :author_id, :uuid
|
|
end
|
|
|
|
create table(:comment_ratings, primary_key: false) do
|
|
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
|
add :score, :bigint
|
|
|
|
add :resource_id,
|
|
references(:comments, column: :id, name: "comment_ratings_resource_id_fkey", type: :uuid)
|
|
end
|
|
|
|
create table(:authors, primary_key: false) do
|
|
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
|
|
end
|
|
|
|
alter table(:profile, prefix: "profiles") do
|
|
modify :author_id,
|
|
references(:authors,
|
|
column: :id,
|
|
prefix: "public",
|
|
name: "profile_author_id_fkey",
|
|
type: :uuid
|
|
)
|
|
end
|
|
|
|
alter table(:posts) do
|
|
modify :author_id,
|
|
references(:authors,
|
|
column: :id,
|
|
prefix: "public",
|
|
name: "posts_author_id_fkey",
|
|
type: :uuid
|
|
)
|
|
end
|
|
|
|
create unique_index(:posts, [:uniq_one, :uniq_two],
|
|
where: "type = 'sponsored'",
|
|
name: "posts_uniq_one_and_two_index"
|
|
)
|
|
|
|
alter table(:comments) do
|
|
modify :author_id,
|
|
references(:authors,
|
|
column: :id,
|
|
prefix: "public",
|
|
name: "comments_author_id_fkey",
|
|
type: :uuid
|
|
)
|
|
end
|
|
|
|
alter table(:authors) do
|
|
add :first_name, :text
|
|
add :last_name, :text
|
|
add :bio, :map
|
|
end
|
|
|
|
create constraint(:posts, :price_must_be_positive, check: "type = 'sponsored' AND price > 0")
|
|
end
|
|
|
|
def down do
|
|
drop_if_exists constraint(:posts, :price_must_be_positive)
|
|
|
|
alter table(:authors) do
|
|
remove :bio
|
|
remove :last_name
|
|
remove :first_name
|
|
end
|
|
|
|
drop constraint(:comments, "comments_author_id_fkey")
|
|
|
|
alter table(:comments) do
|
|
modify :author_id, :uuid
|
|
end
|
|
|
|
drop_if_exists unique_index(:posts, [:uniq_one, :uniq_two],
|
|
name: "posts_uniq_one_and_two_index"
|
|
)
|
|
|
|
drop constraint(:posts, "posts_author_id_fkey")
|
|
|
|
alter table(:posts) do
|
|
modify :author_id, :uuid
|
|
end
|
|
|
|
drop constraint(:profile, "profile_author_id_fkey", prefix: "profiles")
|
|
|
|
alter table(:profile, prefix: "profiles") do
|
|
modify :author_id, :uuid
|
|
end
|
|
|
|
drop table(:authors)
|
|
|
|
drop constraint(:comment_ratings, "comment_ratings_resource_id_fkey")
|
|
|
|
drop table(:comment_ratings)
|
|
|
|
drop constraint(:comments, "special_name_fkey")
|
|
|
|
drop table(:comments)
|
|
|
|
drop table(:integer_posts)
|
|
|
|
drop_if_exists unique_index(:multitenant_orgs, [:id, :name],
|
|
name: "multitenant_orgs_unique_by_name_index"
|
|
)
|
|
|
|
alter table(:multitenant_orgs) do
|
|
remove :name
|
|
end
|
|
|
|
drop constraint(:users, "users_org_id_fkey")
|
|
|
|
alter table(:users) do
|
|
modify :org_id, :uuid
|
|
end
|
|
|
|
drop table(:multitenant_orgs)
|
|
|
|
drop constraint(:post_links, "post_links_destination_post_id_fkey")
|
|
|
|
drop constraint(:post_links, "post_links_source_post_id_fkey")
|
|
|
|
drop table(:post_links)
|
|
|
|
drop constraint(:post_ratings, "post_ratings_resource_id_fkey")
|
|
|
|
drop table(:post_ratings)
|
|
|
|
drop table(:posts)
|
|
|
|
drop table(:profile, prefix: "profiles")
|
|
|
|
drop table(:users)
|
|
execute("""
|
|
DROP TYPE status;
|
|
""")
|
|
|
|
execute "DROP SCHEMA profiles"
|
|
end
|
|
end
|