mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-30 23:08:00 +01:00
124 lines
2.5 KiB
Elixir
124 lines
2.5 KiB
Elixir
defmodule Philomena.DnpEntries do
|
|
@moduledoc """
|
|
The DnpEntries context.
|
|
"""
|
|
|
|
import Ecto.Query, warn: false
|
|
alias Philomena.Repo
|
|
|
|
alias Philomena.DnpEntries.DnpEntry
|
|
|
|
@doc """
|
|
Returns the list of dnp_entries.
|
|
|
|
## Examples
|
|
|
|
iex> list_dnp_entries()
|
|
[%DnpEntry{}, ...]
|
|
|
|
"""
|
|
def list_dnp_entries do
|
|
Repo.all(DnpEntry)
|
|
end
|
|
|
|
@doc """
|
|
Gets a single dnp_entry.
|
|
|
|
Raises `Ecto.NoResultsError` if the Dnp entry does not exist.
|
|
|
|
## Examples
|
|
|
|
iex> get_dnp_entry!(123)
|
|
%DnpEntry{}
|
|
|
|
iex> get_dnp_entry!(456)
|
|
** (Ecto.NoResultsError)
|
|
|
|
"""
|
|
def get_dnp_entry!(id), do: Repo.get!(DnpEntry, id)
|
|
|
|
@doc """
|
|
Creates a dnp_entry.
|
|
|
|
## Examples
|
|
|
|
iex> create_dnp_entry(%{field: value})
|
|
{:ok, %DnpEntry{}}
|
|
|
|
iex> create_dnp_entry(%{field: bad_value})
|
|
{:error, %Ecto.Changeset{}}
|
|
|
|
"""
|
|
def create_dnp_entry(user, tags, attrs \\ %{}) do
|
|
tag = Enum.find(tags, &to_string(&1.id) == attrs["tag_id"])
|
|
|
|
%DnpEntry{}
|
|
|> DnpEntry.creation_changeset(attrs, tag, user)
|
|
|> Repo.insert()
|
|
end
|
|
|
|
@doc """
|
|
Updates a dnp_entry.
|
|
|
|
## Examples
|
|
|
|
iex> update_dnp_entry(dnp_entry, %{field: new_value})
|
|
{:ok, %DnpEntry{}}
|
|
|
|
iex> update_dnp_entry(dnp_entry, %{field: bad_value})
|
|
{:error, %Ecto.Changeset{}}
|
|
|
|
"""
|
|
def update_dnp_entry(%DnpEntry{} = dnp_entry, tags, attrs) do
|
|
tag = Enum.find(tags, &to_string(&1.id) == attrs["tag_id"])
|
|
|
|
dnp_entry
|
|
|> DnpEntry.update_changeset(attrs, tag)
|
|
|> Repo.update()
|
|
end
|
|
|
|
def transition_dnp_entry(%DnpEntry{} = dnp_entry, user, new_state) do
|
|
dnp_entry
|
|
|> DnpEntry.transition_changeset(user, new_state)
|
|
|> Repo.update()
|
|
end
|
|
|
|
@doc """
|
|
Deletes a DnpEntry.
|
|
|
|
## Examples
|
|
|
|
iex> delete_dnp_entry(dnp_entry)
|
|
{:ok, %DnpEntry{}}
|
|
|
|
iex> delete_dnp_entry(dnp_entry)
|
|
{:error, %Ecto.Changeset{}}
|
|
|
|
"""
|
|
def delete_dnp_entry(%DnpEntry{} = dnp_entry) do
|
|
Repo.delete(dnp_entry)
|
|
end
|
|
|
|
@doc """
|
|
Returns an `%Ecto.Changeset{}` for tracking dnp_entry changes.
|
|
|
|
## Examples
|
|
|
|
iex> change_dnp_entry(dnp_entry)
|
|
%Ecto.Changeset{source: %DnpEntry{}}
|
|
|
|
"""
|
|
def change_dnp_entry(%DnpEntry{} = dnp_entry) do
|
|
DnpEntry.changeset(dnp_entry, %{})
|
|
end
|
|
|
|
def count_dnp_entries(user) do
|
|
if Canada.Can.can?(user, :index, DnpEntry) do
|
|
DnpEntry
|
|
|> where([dnp], dnp.aasm_state in ["requested", "claimed", "acknowledged"])
|
|
|> Repo.aggregate(:count, :id)
|
|
else
|
|
nil
|
|
end
|
|
end
|
|
end
|