2.3 KiB · text 5af55d9
defmodule GitGud.Repo.Migrations.CreateOrganizations do
use Ecto.Migration
def change do
create table(:organizations) do
add :handle, :string, null: false, size: 60
add :name, :string, size: 120
add :description, :string, size: 500
timestamps(type: :utc_datetime)
end
create unique_index(:organizations, [:handle])
create table(:organization_memberships) do
add :organization_id, references(:organizations, on_delete: :delete_all), null: false
add :user_id, references(:users, on_delete: :delete_all), null: false
# member | admin
add :role, :string, null: false, default: "member"
timestamps(type: :utc_datetime)
end
create unique_index(:organization_memberships, [:organization_id, :user_id])
create index(:organization_memberships, [:user_id])
create table(:teams) do
add :organization_id, references(:organizations, on_delete: :delete_all), null: false
add :name, :string, null: false, size: 60
add :description, :string, size: 500
timestamps(type: :utc_datetime)
end
create unique_index(:teams, [:organization_id, :name])
create table(:team_memberships) do
add :team_id, references(:teams, on_delete: :delete_all), null: false
add :user_id, references(:users, on_delete: :delete_all), null: false
# member | maintainer
add :role, :string, null: false, default: "member"
timestamps(type: :utc_datetime)
end
create unique_index(:team_memberships, [:team_id, :user_id])
create index(:team_memberships, [:user_id])
create table(:team_repositories) do
add :team_id, references(:teams, on_delete: :delete_all), null: false
add :repository_id, references(:repositories, on_delete: :delete_all), null: false
# read | triage | write | maintain | admin
add :permission, :string, null: false, default: "read"
timestamps(type: :utc_datetime)
end
create unique_index(:team_repositories, [:team_id, :repository_id])
create index(:team_repositories, [:repository_id])
# Allow repos to be owned by an org instead of a user.
alter table(:repositories) do
add :organization_id, references(:organizations, on_delete: :delete_all)
end
create index(:repositories, [:organization_id])
end
end