Files
wish/lib/wish/wishlist.ex

137 lines
2.2 KiB
Elixir

defmodule Wish.Wishlist do
@moduledoc """
The Wishlist context.
"""
import Ecto.Query, warn: false
alias Wish.Repo
alias Wish.Wishlist.Item
@doc """
Returns the list of items.
## Examples
iex> list_items()
[%Item{}, ...]
"""
def list_items do
Repo.all(Item)
end
def list_visible_items do
Repo.all(from i in Item, where: i.visible)
end
@doc """
Returns the list of unreceived items.
## Examples
iex> list_available_items()
[%Item{}, ...]
"""
def list_available_items do
Repo.all(from i in Item, where: not i.received and i.visible)
end
@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(attrs \\ %{}) do
%Item{}
|> Item.changeset(attrs)
|> Repo.insert()
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
Repo.delete(item)
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking item changes.
## Examples
iex> change_item(item)
%Ecto.Changeset{data: %Item{}}
"""
def change_item(%Item{} = item, attrs \\ %{}) do
Item.changeset(item, attrs)
end
@doc """
Toggles the "received" state of an item.
## Examples
iex> toggle_received(item)
{:ok, %Item{}}
"""
def toggle_received(%Item{} = item) do
Item.toggle_received_changeset(item)
|> Repo.update()
end
end