shift73k/lib/shift73k/shifts.ex
2021-03-19 16:38:52 -04:00

133 lines
2.5 KiB
Elixir

defmodule Shift73k.Shifts do
@moduledoc """
The Shifts context.
"""
import Ecto.Query, warn: false
alias Shift73k.Repo
alias Shift73k.Shifts.Shift
@doc """
Returns the list of shifts.
## Examples
iex> list_shifts()
[%Shift{}, ...]
"""
def list_shifts do
Repo.all(Shift)
end
def list_shifts_by_user_between_dates(user_id, start_date, end_date) do
from(s in Shift)
|> select([s], %{
date: s.date,
subject: s.subject,
time_start: s.time_start,
time_end: s.time_end
})
|> where([s], s.user_id == ^user_id and s.date >= ^start_date and s.date <= ^end_date)
|> order_by([s], [s.date, s.time_start])
|> Repo.all()
end
defp query_shifts_by_user_on_list_of_dates(user_id, date_list) do
from(s in Shift)
|> where([s], s.user_id == ^user_id and s.date in ^date_list)
end
def list_shifts_by_user_on_list_of_dates(user_id, date_list) do
query_shifts_by_user_on_list_of_dates(user_id, date_list)
|> Repo.all()
end
@doc """
Gets a single shift.
Raises `Ecto.NoResultsError` if the Shift does not exist.
## Examples
iex> get_shift!(123)
%Shift{}
iex> get_shift!(456)
** (Ecto.NoResultsError)
"""
def get_shift!(id), do: Repo.get!(Shift, id)
@doc """
Creates a shift.
## Examples
iex> create_shift(%{field: value})
{:ok, %Shift{}}
iex> create_shift(%{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def create_shift(attrs \\ %{}) do
%Shift{}
|> Shift.changeset(attrs)
|> Repo.insert()
end
@doc """
Updates a shift.
## Examples
iex> update_shift(shift, %{field: new_value})
{:ok, %Shift{}}
iex> update_shift(shift, %{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def update_shift(%Shift{} = shift, attrs) do
shift
|> Shift.changeset(attrs)
|> Repo.update()
end
@doc """
Deletes a shift.
## Examples
iex> delete_shift(shift)
{:ok, %Shift{}}
iex> delete_shift(shift)
{:error, %Ecto.Changeset{}}
"""
def delete_shift(%Shift{} = shift) do
Repo.delete(shift)
end
def delete_shifts_by_user_on_list_of_dates(user_id, date_list) do
query_shifts_by_user_on_list_of_dates(user_id, date_list)
|> Repo.delete_all()
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking shift changes.
## Examples
iex> change_shift(shift)
%Ecto.Changeset{data: %Shift{}}
"""
def change_shift(%Shift{} = shift, attrs \\ %{}) do
Shift.changeset(shift, attrs)
end
end