initial shift template migration & schema working with user field/assoc for default shift template
This commit is contained in:
parent
61db634c36
commit
a151bfcee7
16 changed files with 665 additions and 4 deletions
lib/shift73k
|
@ -3,6 +3,8 @@ defmodule Shift73k.Accounts.User do
|
|||
import Ecto.Changeset
|
||||
import EctoEnum
|
||||
|
||||
alias Shift73k.ShiftTemplates.ShiftTemplate
|
||||
|
||||
@roles [
|
||||
user: "Basic user level",
|
||||
manager: "Can create users, update user emails & passwords",
|
||||
|
@ -25,6 +27,11 @@ defmodule Shift73k.Accounts.User do
|
|||
field(:confirmed_at, :naive_datetime)
|
||||
|
||||
field(:role, RolesEnum, default: :user)
|
||||
|
||||
has_many(:shift_templates, ShiftTemplate)
|
||||
# has_one(:default_shift_template, ShiftTemplate, references: :default_shift_template_id)
|
||||
belongs_to(:default_shift_template, ShiftTemplate)
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
||||
|
|
104
lib/shift73k/shift_templates.ex
Normal file
104
lib/shift73k/shift_templates.ex
Normal file
|
@ -0,0 +1,104 @@
|
|||
defmodule Shift73k.ShiftTemplates do
|
||||
@moduledoc """
|
||||
The ShiftTemplates context.
|
||||
"""
|
||||
|
||||
import Ecto.Query, warn: false
|
||||
alias Shift73k.Repo
|
||||
|
||||
alias Shift73k.ShiftTemplates.ShiftTemplate
|
||||
|
||||
@doc """
|
||||
Returns the list of shift_templates.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> list_shift_templates()
|
||||
[%ShiftTemplate{}, ...]
|
||||
|
||||
"""
|
||||
def list_shift_templates do
|
||||
Repo.all(ShiftTemplate)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a single shift_template.
|
||||
|
||||
Raises `Ecto.NoResultsError` if the Shift template does not exist.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> get_shift_template!(123)
|
||||
%ShiftTemplate{}
|
||||
|
||||
iex> get_shift_template!(456)
|
||||
** (Ecto.NoResultsError)
|
||||
|
||||
"""
|
||||
def get_shift_template!(id), do: Repo.get!(ShiftTemplate, id)
|
||||
|
||||
@doc """
|
||||
Creates a shift_template.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> create_shift_template(%{field: value})
|
||||
{:ok, %ShiftTemplate{}}
|
||||
|
||||
iex> create_shift_template(%{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def create_shift_template(attrs \\ %{}) do
|
||||
%ShiftTemplate{}
|
||||
|> ShiftTemplate.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Updates a shift_template.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> update_shift_template(shift_template, %{field: new_value})
|
||||
{:ok, %ShiftTemplate{}}
|
||||
|
||||
iex> update_shift_template(shift_template, %{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def update_shift_template(%ShiftTemplate{} = shift_template, attrs) do
|
||||
shift_template
|
||||
|> ShiftTemplate.changeset(attrs)
|
||||
|> Repo.update()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deletes a shift_template.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> delete_shift_template(shift_template)
|
||||
{:ok, %ShiftTemplate{}}
|
||||
|
||||
iex> delete_shift_template(shift_template)
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def delete_shift_template(%ShiftTemplate{} = shift_template) do
|
||||
Repo.delete(shift_template)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns an `%Ecto.Changeset{}` for tracking shift_template changes.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> change_shift_template(shift_template)
|
||||
%Ecto.Changeset{data: %ShiftTemplate{}}
|
||||
|
||||
"""
|
||||
def change_shift_template(%ShiftTemplate{} = shift_template, attrs \\ %{}) do
|
||||
ShiftTemplate.changeset(shift_template, attrs)
|
||||
end
|
||||
end
|
46
lib/shift73k/shift_templates/shift_template.ex
Normal file
46
lib/shift73k/shift_templates/shift_template.ex
Normal file
|
@ -0,0 +1,46 @@
|
|||
defmodule Shift73k.ShiftTemplates.ShiftTemplate do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "shift_templates" do
|
||||
field :label, :string
|
||||
field :subject, :string
|
||||
field :description, :string
|
||||
field :location, :string
|
||||
field :timezone, :string
|
||||
field :start_time, :time
|
||||
field :length_hours, :integer
|
||||
field :length_minutes, :integer
|
||||
|
||||
belongs_to(:user, Shift73k.Accounts.User)
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
||||
@doc false
|
||||
def changeset(shift_template, attrs) do
|
||||
shift_template
|
||||
|> cast(attrs, [
|
||||
:label,
|
||||
:subject,
|
||||
:description,
|
||||
:location,
|
||||
:timezone,
|
||||
:start_time,
|
||||
:length_hours,
|
||||
:length_minutes,
|
||||
:user_id
|
||||
])
|
||||
|> validate_required([
|
||||
:subject,
|
||||
:timezone,
|
||||
:start_time,
|
||||
:length_hours
|
||||
])
|
||||
|> validate_number(:length_hours, greater_than_or_equal_to: 0, less_than_or_equal_to: 24)
|
||||
|> validate_number(:length_minutes, greater_than_or_equal_to: 0, less_than: 60)
|
||||
|> validate_inclusion(:timezone, Tzdata.zone_list())
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue