defmodule Auth.Permission do
@moduledoc """
Defines permissions schema and CRUD functions
"""
use Ecto.Schema
import Ecto.Changeset
import Ecto.Query, warn: false
alias Auth.Repo
# alias the Struct so we can use it below
alias Auth.Permission
schema "permissions" do
field :desc, :string
field :name, :string
field :person_id, :id
timestamps()
end
@doc false
def changeset(permission, attrs) do
permission
|> cast(attrs, [:name, :desc])
|> validate_required([:name, :desc])
end
@doc """
Returns the list of permissions.
## Examples
iex> list_permissions()
[%Permission{}, ...]
"""
def list_permissions do
Repo.all(__MODULE__)
end
@doc """
Gets a single permission.
Raises `Ecto.NoResultsError` if the Permission does not exist.
## Examples
iex> get_permission!(123)
%Permission{}
iex> get_permission!(456)
** (Ecto.NoResultsError)
"""
def get_permission!(id), do: Repo.get!(__MODULE__, id)
@doc """
Creates a permission.
## Examples
iex> create_permission(%{field: value})
{:ok, %Permission{}}
iex> create_permission(%{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def create_permission(attrs \\ %{}) do
%Permission{}
|> Permission.changeset(attrs)
|> Repo.insert()
end
@doc """
Updates a permission.
## Examples
iex> update_permission(permission, %{field: new_value})
{:ok, %Permission{}}
iex> update_permission(permission, %{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def update_permission(%Permission{} = permission, attrs) do
permission
|> Permission.changeset(attrs)
|> Repo.update()
end
@doc """
Deletes a permission.
## Examples
iex> delete_permission(permission)
{:ok, %Permission{}}
iex> delete_permission(permission)
{:error, %Ecto.Changeset{}}
"""
def delete_permission(%Permission{} = permission) do
Repo.delete(permission)
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking permission changes.
## Examples
iex> change_permission(permission)
%Ecto.Changeset{data: %Permission{}}
"""
def change_permission(%Permission{} = permission, attrs \\ %{}) do
Permission.changeset(permission, attrs)
end
end