1.0 KiB · text 5af55d9
defmodule GitGud.Organizations.TeamRepository do
use Ecto.Schema
import Ecto.Changeset
alias GitGud.Organizations.Team
alias GitGud.Repositories.Repository
@valid_permissions ~w(read triage write maintain admin)
schema "team_repositories" do
field :permission, :string, default: "read"
belongs_to :team, Team
belongs_to :repository, Repository
timestamps(type: :utc_datetime)
end
def changeset(tr, attrs) do
tr
|> cast(attrs, [:team_id, :repository_id, :permission])
|> validate_required([:team_id, :repository_id, :permission])
|> validate_inclusion(:permission, @valid_permissions)
|> unique_constraint(:repository_id,
name: :team_repositories_team_id_repository_id_index
)
end
def valid_permissions, do: @valid_permissions
@doc "Permission rank for comparison. Higher = more privileged."
def rank("read"), do: 1
def rank("triage"), do: 2
def rank("write"), do: 3
def rank("maintain"), do: 4
def rank("admin"), do: 5
def rank(_), do: 0
end