mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-12-03 08:08:00 +01:00
200 lines
3.8 KiB
Elixir
200 lines
3.8 KiB
Elixir
defmodule Philomena.Commissions do
|
|
@moduledoc """
|
|
The Commissions context.
|
|
"""
|
|
|
|
import Ecto.Query, warn: false
|
|
alias Ecto.Multi
|
|
alias Philomena.Repo
|
|
|
|
alias Philomena.Commissions.Commission
|
|
|
|
@doc """
|
|
Gets a single commission.
|
|
|
|
Raises `Ecto.NoResultsError` if the Commission does not exist.
|
|
|
|
## Examples
|
|
|
|
iex> get_commission!(123)
|
|
%Commission{}
|
|
|
|
iex> get_commission!(456)
|
|
** (Ecto.NoResultsError)
|
|
|
|
"""
|
|
def get_commission!(id), do: Repo.get!(Commission, id)
|
|
|
|
@doc """
|
|
Creates a commission.
|
|
|
|
## Examples
|
|
|
|
iex> create_commission(%{field: value})
|
|
{:ok, %Commission{}}
|
|
|
|
iex> create_commission(%{field: bad_value})
|
|
{:error, %Ecto.Changeset{}}
|
|
|
|
"""
|
|
def create_commission(user, attrs \\ %{}) do
|
|
Ecto.build_assoc(user, :commission)
|
|
|> Commission.changeset(attrs)
|
|
|> Repo.insert()
|
|
end
|
|
|
|
@doc """
|
|
Updates a commission.
|
|
|
|
## Examples
|
|
|
|
iex> update_commission(commission, %{field: new_value})
|
|
{:ok, %Commission{}}
|
|
|
|
iex> update_commission(commission, %{field: bad_value})
|
|
{:error, %Ecto.Changeset{}}
|
|
|
|
"""
|
|
def update_commission(%Commission{} = commission, attrs) do
|
|
commission
|
|
|> Commission.changeset(attrs)
|
|
|> Repo.update()
|
|
end
|
|
|
|
@doc """
|
|
Deletes a Commission.
|
|
|
|
## Examples
|
|
|
|
iex> delete_commission(commission)
|
|
{:ok, %Commission{}}
|
|
|
|
iex> delete_commission(commission)
|
|
{:error, %Ecto.Changeset{}}
|
|
|
|
"""
|
|
def delete_commission(%Commission{} = commission) do
|
|
Repo.delete(commission)
|
|
end
|
|
|
|
@doc """
|
|
Returns an `%Ecto.Changeset{}` for tracking commission changes.
|
|
|
|
## Examples
|
|
|
|
iex> change_commission(commission)
|
|
%Ecto.Changeset{source: %Commission{}}
|
|
|
|
"""
|
|
def change_commission(%Commission{} = commission) do
|
|
Commission.changeset(commission, %{})
|
|
end
|
|
|
|
alias Philomena.Commissions.Item
|
|
|
|
@doc """
|
|
Gets a single item.
|
|
|
|
Raises `Ecto.NoResultsError` if the Item does not exist.
|
|
|
|
## Examples
|
|
|
|
iex> get_item!(123)
|
|
%Item{}
|
|
|
|
iex> get_item!(456)
|
|
** (Ecto.NoResultsError)
|
|
|
|
"""
|
|
def get_item!(id), do: Repo.get!(Item, id)
|
|
|
|
@doc """
|
|
Creates a item.
|
|
|
|
## Examples
|
|
|
|
iex> create_item(%{field: value})
|
|
{:ok, %Item{}}
|
|
|
|
iex> create_item(%{field: bad_value})
|
|
{:error, %Ecto.Changeset{}}
|
|
|
|
"""
|
|
def create_item(commission, attrs \\ %{}) do
|
|
changeset =
|
|
Ecto.build_assoc(commission, :items)
|
|
|> Item.changeset(attrs)
|
|
|
|
update =
|
|
Commission
|
|
|> where(id: ^commission.id)
|
|
|> update(inc: [commission_items_count: 1])
|
|
|
|
Multi.new()
|
|
|> Multi.insert(:item, changeset)
|
|
|> Multi.update_all(:commission, update, [])
|
|
|> Repo.transaction()
|
|
|> case do
|
|
{:error, :item, changeset, _} ->
|
|
{:error, changeset}
|
|
|
|
result ->
|
|
result
|
|
end
|
|
end
|
|
|
|
@doc """
|
|
Updates a item.
|
|
|
|
## Examples
|
|
|
|
iex> update_item(item, %{field: new_value})
|
|
{:ok, %Item{}}
|
|
|
|
iex> update_item(item, %{field: bad_value})
|
|
{:error, %Ecto.Changeset{}}
|
|
|
|
"""
|
|
def update_item(%Item{} = item, attrs) do
|
|
item
|
|
|> Item.changeset(attrs)
|
|
|> Repo.update()
|
|
end
|
|
|
|
@doc """
|
|
Deletes a Item.
|
|
|
|
## Examples
|
|
|
|
iex> delete_item(item)
|
|
{:ok, %Item{}}
|
|
|
|
iex> delete_item(item)
|
|
{:error, %Ecto.Changeset{}}
|
|
|
|
"""
|
|
def delete_item(%Item{} = item) do
|
|
update =
|
|
Commission
|
|
|> where(id: ^item.commission_id)
|
|
|> update(inc: [commission_items_count: -1])
|
|
|
|
Multi.new()
|
|
|> Multi.delete(:item, item)
|
|
|> Multi.update_all(:commission, update, [])
|
|
|> Repo.transaction()
|
|
end
|
|
|
|
@doc """
|
|
Returns an `%Ecto.Changeset{}` for tracking item changes.
|
|
|
|
## Examples
|
|
|
|
iex> change_item(item)
|
|
%Ecto.Changeset{source: %Item{}}
|
|
|
|
"""
|
|
def change_item(%Item{} = item) do
|
|
Item.changeset(item, %{})
|
|
end
|
|
end
|