forked from shibao/cannery
		
	add types to ecto changeset specs
This commit is contained in:
		@@ -9,7 +9,7 @@ contributing to Cannery (hopefully) as great of an experience as you found it!
 | 
				
			|||||||
  inline `do:` blocks for short functions and make your aliases as short as
 | 
					  inline `do:` blocks for short functions and make your aliases as short as
 | 
				
			||||||
  possible without introducing ambiguity.
 | 
					  possible without introducing ambiguity.
 | 
				
			||||||
  - I.e. since there's only one `Changeset` in the app, please alias
 | 
					  - I.e. since there's only one `Changeset` in the app, please alias
 | 
				
			||||||
    `Changeset.t()` instead of using `Ecto.Changeset.t()`
 | 
					    `Changeset.t(Type.t())` instead of using `Ecto.Changeset.t(Long.Type.t())`
 | 
				
			||||||
- Use pipelines when possible. If a function only calls a single method, a
 | 
					- Use pipelines when possible. If a function only calls a single method, a
 | 
				
			||||||
  pipeline isn't strictly necessary but still encouraged for future
 | 
					  pipeline isn't strictly necessary but still encouraged for future
 | 
				
			||||||
  modification.
 | 
					  modification.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -89,7 +89,7 @@ defmodule Cannery.Accounts do
 | 
				
			|||||||
      {:error, %Changeset{}}
 | 
					      {:error, %Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec register_user(map()) :: {:ok, User.t()} | {:error, Changeset.t()}
 | 
					  @spec register_user(map()) :: {:ok, User.t()} | {:error, Changeset.t(User.new_user())}
 | 
				
			||||||
  def register_user(attrs) do
 | 
					  def register_user(attrs) do
 | 
				
			||||||
    # if no registered users, make first user an admin
 | 
					    # if no registered users, make first user an admin
 | 
				
			||||||
    attrs =
 | 
					    attrs =
 | 
				
			||||||
@@ -109,8 +109,10 @@ defmodule Cannery.Accounts do
 | 
				
			|||||||
      %Changeset{data: %User{}}
 | 
					      %Changeset{data: %User{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec change_user_registration(User.t() | User.new_user()) :: Changeset.t()
 | 
					  @spec change_user_registration(User.t() | User.new_user()) ::
 | 
				
			||||||
  @spec change_user_registration(User.t() | User.new_user(), map()) :: Changeset.t()
 | 
					          Changeset.t(User.t() | User.new_user())
 | 
				
			||||||
 | 
					  @spec change_user_registration(User.t() | User.new_user(), map()) ::
 | 
				
			||||||
 | 
					          Changeset.t(User.t() | User.new_user())
 | 
				
			||||||
  def change_user_registration(user, attrs \\ %{}),
 | 
					  def change_user_registration(user, attrs \\ %{}),
 | 
				
			||||||
    do: User.registration_changeset(user, attrs, hash_password: false)
 | 
					    do: User.registration_changeset(user, attrs, hash_password: false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -125,7 +127,7 @@ defmodule Cannery.Accounts do
 | 
				
			|||||||
      %Changeset{data: %User{}}
 | 
					      %Changeset{data: %User{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec change_user_email(User.t(), map()) :: Changeset.t()
 | 
					  @spec change_user_email(User.t(), map()) :: Changeset.t(User.t())
 | 
				
			||||||
  def change_user_email(user, attrs \\ %{}), do: User.email_changeset(user, attrs)
 | 
					  def change_user_email(user, attrs \\ %{}), do: User.email_changeset(user, attrs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
@@ -137,7 +139,7 @@ defmodule Cannery.Accounts do
 | 
				
			|||||||
      %Changeset{data: %User{}}
 | 
					      %Changeset{data: %User{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec change_user_role(User.t(), atom()) :: Changeset.t()
 | 
					  @spec change_user_role(User.t(), atom()) :: Changeset.t(User.t())
 | 
				
			||||||
  def change_user_role(user, role), do: User.role_changeset(user, role)
 | 
					  def change_user_role(user, role), do: User.role_changeset(user, role)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
@@ -154,7 +156,7 @@ defmodule Cannery.Accounts do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec apply_user_email(User.t(), String.t(), map()) ::
 | 
					  @spec apply_user_email(User.t(), String.t(), map()) ::
 | 
				
			||||||
          {:ok, User.t()} | {:error, Changeset.t()}
 | 
					          {:ok, User.t()} | {:error, Changeset.t(User.t())}
 | 
				
			||||||
  def apply_user_email(user, password, attrs) do
 | 
					  def apply_user_email(user, password, attrs) do
 | 
				
			||||||
    user
 | 
					    user
 | 
				
			||||||
    |> User.email_changeset(attrs)
 | 
					    |> User.email_changeset(attrs)
 | 
				
			||||||
@@ -218,7 +220,7 @@ defmodule Cannery.Accounts do
 | 
				
			|||||||
      %Changeset{data: %User{}}
 | 
					      %Changeset{data: %User{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec change_user_password(User.t(), map()) :: Changeset.t()
 | 
					  @spec change_user_password(User.t(), map()) :: Changeset.t(User.t())
 | 
				
			||||||
  def change_user_password(user, attrs \\ %{}),
 | 
					  def change_user_password(user, attrs \\ %{}),
 | 
				
			||||||
    do: User.password_changeset(user, attrs, hash_password: false)
 | 
					    do: User.password_changeset(user, attrs, hash_password: false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -235,7 +237,7 @@ defmodule Cannery.Accounts do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec update_user_password(User.t(), String.t(), map()) ::
 | 
					  @spec update_user_password(User.t(), String.t(), map()) ::
 | 
				
			||||||
          {:ok, User.t()} | {:error, Changeset.t()}
 | 
					          {:ok, User.t()} | {:error, Changeset.t(User.t())}
 | 
				
			||||||
  def update_user_password(user, password, attrs) do
 | 
					  def update_user_password(user, password, attrs) do
 | 
				
			||||||
    changeset =
 | 
					    changeset =
 | 
				
			||||||
      user
 | 
					      user
 | 
				
			||||||
@@ -399,7 +401,7 @@ defmodule Cannery.Accounts do
 | 
				
			|||||||
      {:error, %Changeset{}}
 | 
					      {:error, %Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec reset_user_password(User.t(), map()) :: {:ok, User.t()} | {:error, Changeset.t()}
 | 
					  @spec reset_user_password(User.t(), map()) :: {:ok, User.t()} | {:error, Changeset.t(User.t())}
 | 
				
			||||||
  def reset_user_password(user, attrs) do
 | 
					  def reset_user_password(user, attrs) do
 | 
				
			||||||
    Multi.new()
 | 
					    Multi.new()
 | 
				
			||||||
    |> Multi.update(:user, User.password_changeset(user, attrs))
 | 
					    |> Multi.update(:user, User.password_changeset(user, attrs))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,9 +54,9 @@ defmodule Cannery.Accounts.User do
 | 
				
			|||||||
      validations on a LiveView form), this option can be set to `false`.
 | 
					      validations on a LiveView form), this option can be set to `false`.
 | 
				
			||||||
      Defaults to `true`.
 | 
					      Defaults to `true`.
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec registration_changeset(t() | new_user(), attrs :: map()) :: Changeset.t()
 | 
					  @spec registration_changeset(t() | new_user(), attrs :: map()) :: Changeset.t(t() | new_user())
 | 
				
			||||||
  @spec registration_changeset(t() | new_user(), attrs :: map(), opts :: keyword()) ::
 | 
					  @spec registration_changeset(t() | new_user(), attrs :: map(), opts :: keyword()) ::
 | 
				
			||||||
          Changeset.t()
 | 
					          Changeset.t(t() | new_user())
 | 
				
			||||||
  def registration_changeset(user, attrs, opts \\ []) do
 | 
					  def registration_changeset(user, attrs, opts \\ []) do
 | 
				
			||||||
    user
 | 
					    user
 | 
				
			||||||
    |> cast(attrs, [:email, :password, :role])
 | 
					    |> cast(attrs, [:email, :password, :role])
 | 
				
			||||||
@@ -68,12 +68,12 @@ defmodule Cannery.Accounts.User do
 | 
				
			|||||||
  A user changeset for role.
 | 
					  A user changeset for role.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec role_changeset(t(), role :: atom()) :: Changeset.t()
 | 
					  @spec role_changeset(t(), role :: atom()) :: Changeset.t(t())
 | 
				
			||||||
  def role_changeset(user, role) do
 | 
					  def role_changeset(user, role) do
 | 
				
			||||||
    user |> cast(%{"role" => role}, [:role])
 | 
					    user |> cast(%{"role" => role}, [:role])
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @spec validate_email(Changeset.t()) :: Changeset.t()
 | 
					  @spec validate_email(Changeset.t(t() | new_user())) :: Changeset.t(t() | new_user())
 | 
				
			||||||
  defp validate_email(changeset) do
 | 
					  defp validate_email(changeset) do
 | 
				
			||||||
    changeset
 | 
					    changeset
 | 
				
			||||||
    |> validate_required([:email])
 | 
					    |> validate_required([:email])
 | 
				
			||||||
@@ -83,7 +83,8 @@ defmodule Cannery.Accounts.User do
 | 
				
			|||||||
    |> unique_constraint(:email)
 | 
					    |> unique_constraint(:email)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @spec validate_password(Changeset.t(), opts :: keyword()) :: Changeset.t()
 | 
					  @spec validate_password(Changeset.t(t() | new_user()), opts :: keyword()) ::
 | 
				
			||||||
 | 
					          Changeset.t(t() | new_user())
 | 
				
			||||||
  defp validate_password(changeset, opts) do
 | 
					  defp validate_password(changeset, opts) do
 | 
				
			||||||
    changeset
 | 
					    changeset
 | 
				
			||||||
    |> validate_required([:password])
 | 
					    |> validate_required([:password])
 | 
				
			||||||
@@ -94,7 +95,8 @@ defmodule Cannery.Accounts.User do
 | 
				
			|||||||
    |> maybe_hash_password(opts)
 | 
					    |> maybe_hash_password(opts)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @spec maybe_hash_password(Changeset.t(), opts :: keyword()) :: Changeset.t()
 | 
					  @spec maybe_hash_password(Changeset.t(t() | new_user()), opts :: keyword()) ::
 | 
				
			||||||
 | 
					          Changeset.t(t() | new_user())
 | 
				
			||||||
  defp maybe_hash_password(changeset, opts) do
 | 
					  defp maybe_hash_password(changeset, opts) do
 | 
				
			||||||
    hash_password? = Keyword.get(opts, :hash_password, true)
 | 
					    hash_password? = Keyword.get(opts, :hash_password, true)
 | 
				
			||||||
    password = get_change(changeset, :password)
 | 
					    password = get_change(changeset, :password)
 | 
				
			||||||
@@ -113,7 +115,7 @@ defmodule Cannery.Accounts.User do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  It requires the email to change otherwise an error is added.
 | 
					  It requires the email to change otherwise an error is added.
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec email_changeset(t(), attrs :: map()) :: Changeset.t()
 | 
					  @spec email_changeset(t(), attrs :: map()) :: Changeset.t(t())
 | 
				
			||||||
  def email_changeset(user, attrs) do
 | 
					  def email_changeset(user, attrs) do
 | 
				
			||||||
    user
 | 
					    user
 | 
				
			||||||
    |> cast(attrs, [:email])
 | 
					    |> cast(attrs, [:email])
 | 
				
			||||||
@@ -136,8 +138,8 @@ defmodule Cannery.Accounts.User do
 | 
				
			|||||||
      validations on a LiveView form), this option can be set to `false`.
 | 
					      validations on a LiveView form), this option can be set to `false`.
 | 
				
			||||||
      Defaults to `true`.
 | 
					      Defaults to `true`.
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec password_changeset(t(), attrs :: map()) :: Changeset.t()
 | 
					  @spec password_changeset(t(), attrs :: map()) :: Changeset.t(t())
 | 
				
			||||||
  @spec password_changeset(t(), attrs :: map(), opts :: keyword()) :: Changeset.t()
 | 
					  @spec password_changeset(t(), attrs :: map(), opts :: keyword()) :: Changeset.t(t())
 | 
				
			||||||
  def password_changeset(user, attrs, opts \\ []) do
 | 
					  def password_changeset(user, attrs, opts \\ []) do
 | 
				
			||||||
    user
 | 
					    user
 | 
				
			||||||
    |> cast(attrs, [:password])
 | 
					    |> cast(attrs, [:password])
 | 
				
			||||||
@@ -148,7 +150,7 @@ defmodule Cannery.Accounts.User do
 | 
				
			|||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
  Confirms the account by setting `confirmed_at`.
 | 
					  Confirms the account by setting `confirmed_at`.
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec confirm_changeset(t() | Changeset.t()) :: Changeset.t()
 | 
					  @spec confirm_changeset(t() | Changeset.t(t())) :: Changeset.t(t())
 | 
				
			||||||
  def confirm_changeset(user_or_changeset) do
 | 
					  def confirm_changeset(user_or_changeset) do
 | 
				
			||||||
    now = NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second)
 | 
					    now = NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second)
 | 
				
			||||||
    user_or_changeset |> change(confirmed_at: now)
 | 
					    user_or_changeset |> change(confirmed_at: now)
 | 
				
			||||||
@@ -174,7 +176,7 @@ defmodule Cannery.Accounts.User do
 | 
				
			|||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
  Validates the current password otherwise adds an error to the changeset.
 | 
					  Validates the current password otherwise adds an error to the changeset.
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec validate_current_password(Changeset.t(), String.t()) :: Changeset.t()
 | 
					  @spec validate_current_password(Changeset.t(t()), String.t()) :: Changeset.t(t())
 | 
				
			||||||
  def validate_current_password(changeset, password) do
 | 
					  def validate_current_password(changeset, password) do
 | 
				
			||||||
    if valid_password?(changeset.data, password),
 | 
					    if valid_password?(changeset.data, password),
 | 
				
			||||||
      do: changeset,
 | 
					      do: changeset,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,7 +49,8 @@ defmodule Cannery.Ammo do
 | 
				
			|||||||
      {:error, %Ecto.Changeset{}}
 | 
					      {:error, %Ecto.Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec create_ammo_type(attrs :: map()) :: {:ok, AmmoType.t()} | {:error, Changeset.t()}
 | 
					  @spec create_ammo_type(attrs :: map()) ::
 | 
				
			||||||
 | 
					          {:ok, AmmoType.t()} | {:error, Changeset.t(AmmoType.new_ammo_type())}
 | 
				
			||||||
  def create_ammo_type(attrs \\ %{}),
 | 
					  def create_ammo_type(attrs \\ %{}),
 | 
				
			||||||
    do: %AmmoType{} |> AmmoType.changeset(attrs) |> Repo.insert()
 | 
					    do: %AmmoType{} |> AmmoType.changeset(attrs) |> Repo.insert()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -66,7 +67,7 @@ defmodule Cannery.Ammo do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec update_ammo_type(AmmoType.t(), attrs :: map()) ::
 | 
					  @spec update_ammo_type(AmmoType.t(), attrs :: map()) ::
 | 
				
			||||||
          {:ok, AmmoType.t()} | {:error, Changeset.t()}
 | 
					          {:ok, AmmoType.t()} | {:error, Changeset.t(AmmoType.t())}
 | 
				
			||||||
  def update_ammo_type(%AmmoType{} = ammo_type, attrs),
 | 
					  def update_ammo_type(%AmmoType{} = ammo_type, attrs),
 | 
				
			||||||
    do: ammo_type |> AmmoType.changeset(attrs) |> Repo.update()
 | 
					    do: ammo_type |> AmmoType.changeset(attrs) |> Repo.update()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -82,7 +83,8 @@ defmodule Cannery.Ammo do
 | 
				
			|||||||
      {:error, %Ecto.Changeset{}}
 | 
					      {:error, %Ecto.Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec delete_ammo_type(AmmoType.t()) :: {:ok, AmmoType.t()} | {:error, Changeset.t()}
 | 
					  @spec delete_ammo_type(AmmoType.t()) ::
 | 
				
			||||||
 | 
					          {:ok, AmmoType.t()} | {:error, Changeset.t(AmmoType.t())}
 | 
				
			||||||
  def delete_ammo_type(%AmmoType{} = ammo_type), do: ammo_type |> Repo.delete()
 | 
					  def delete_ammo_type(%AmmoType{} = ammo_type), do: ammo_type |> Repo.delete()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
@@ -106,8 +108,10 @@ defmodule Cannery.Ammo do
 | 
				
			|||||||
      %Ecto.Changeset{data: %AmmoType{}}
 | 
					      %Ecto.Changeset{data: %AmmoType{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec change_ammo_type(AmmoType.t() | AmmoType.new_ammo_type()) :: Changeset.t()
 | 
					  @spec change_ammo_type(AmmoType.t() | AmmoType.new_ammo_type()) ::
 | 
				
			||||||
  @spec change_ammo_type(AmmoType.t() | AmmoType.new_ammo_type(), attrs :: map()) :: Changeset.t()
 | 
					          Changeset.t(AmmoType.t() | AmmoType.new_ammo_type())
 | 
				
			||||||
 | 
					  @spec change_ammo_type(AmmoType.t() | AmmoType.new_ammo_type(), attrs :: map()) ::
 | 
				
			||||||
 | 
					          Changeset.t(AmmoType.t() | AmmoType.new_ammo_type())
 | 
				
			||||||
  def change_ammo_type(%AmmoType{} = ammo_type, attrs \\ %{}),
 | 
					  def change_ammo_type(%AmmoType{} = ammo_type, attrs \\ %{}),
 | 
				
			||||||
    do: AmmoType.changeset(ammo_type, attrs)
 | 
					    do: AmmoType.changeset(ammo_type, attrs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -159,7 +163,8 @@ defmodule Cannery.Ammo do
 | 
				
			|||||||
      {:error, %Ecto.Changeset{}}
 | 
					      {:error, %Ecto.Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec create_ammo_group(attrs :: map()) :: {:ok, AmmoGroup.t()} | {:error, Changeset.t()}
 | 
					  @spec create_ammo_group(attrs :: map()) ::
 | 
				
			||||||
 | 
					          {:ok, AmmoGroup.t()} | {:error, Changeset.t(AmmoGroup.new_ammo_group())}
 | 
				
			||||||
  def create_ammo_group(attrs \\ %{}),
 | 
					  def create_ammo_group(attrs \\ %{}),
 | 
				
			||||||
    do: %AmmoGroup{} |> AmmoGroup.changeset(attrs) |> Repo.insert()
 | 
					    do: %AmmoGroup{} |> AmmoGroup.changeset(attrs) |> Repo.insert()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -176,7 +181,7 @@ defmodule Cannery.Ammo do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec update_ammo_group(AmmoGroup.t(), attrs :: map()) ::
 | 
					  @spec update_ammo_group(AmmoGroup.t(), attrs :: map()) ::
 | 
				
			||||||
          {:ok, AmmoGroup.t()} | {:error, Changeset.t()}
 | 
					          {:ok, AmmoGroup.t()} | {:error, Changeset.t(AmmoGroup.t())}
 | 
				
			||||||
  def update_ammo_group(%AmmoGroup{} = ammo_group, attrs),
 | 
					  def update_ammo_group(%AmmoGroup{} = ammo_group, attrs),
 | 
				
			||||||
    do: ammo_group |> AmmoGroup.changeset(attrs) |> Repo.update()
 | 
					    do: ammo_group |> AmmoGroup.changeset(attrs) |> Repo.update()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -192,7 +197,8 @@ defmodule Cannery.Ammo do
 | 
				
			|||||||
      {:error, %Ecto.Changeset{}}
 | 
					      {:error, %Ecto.Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec delete_ammo_group(AmmoGroup.t()) :: {:ok, AmmoGroup.t()} | {:error, Changeset.t()}
 | 
					  @spec delete_ammo_group(AmmoGroup.t()) ::
 | 
				
			||||||
 | 
					          {:ok, AmmoGroup.t()} | {:error, Changeset.t(AmmoGroup.t())}
 | 
				
			||||||
  def delete_ammo_group(%AmmoGroup{} = ammo_group), do: ammo_group |> Repo.delete()
 | 
					  def delete_ammo_group(%AmmoGroup{} = ammo_group), do: ammo_group |> Repo.delete()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,7 +47,7 @@ defmodule Cannery.Ammo.AmmoGroup do
 | 
				
			|||||||
  @type id :: UUID.t()
 | 
					  @type id :: UUID.t()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc false
 | 
					  @doc false
 | 
				
			||||||
  @spec changeset(t() | new_ammo_group(), attrs :: map()) :: Changeset.t()
 | 
					  @spec changeset(t() | new_ammo_group(), attrs :: map()) :: Changeset.t(t() | new_ammo_group())
 | 
				
			||||||
  def changeset(ammo_group, attrs) do
 | 
					  def changeset(ammo_group, attrs) do
 | 
				
			||||||
    ammo_group
 | 
					    ammo_group
 | 
				
			||||||
    |> cast(attrs, [:count, :price_paid, :notes, :tag_id, :ammo_type_id, :container_id, :user_id])
 | 
					    |> cast(attrs, [:count, :price_paid, :notes, :tag_id, :ammo_type_id, :container_id, :user_id])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,7 @@ defmodule Cannery.Ammo.AmmoType do
 | 
				
			|||||||
  @type id :: UUID.t()
 | 
					  @type id :: UUID.t()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc false
 | 
					  @doc false
 | 
				
			||||||
  @spec changeset(t() | new_ammo_type(), attrs :: map()) :: Changeset.t()
 | 
					  @spec changeset(t() | new_ammo_type(), attrs :: map()) :: Changeset.t(t() | new_ammo_type())
 | 
				
			||||||
  def changeset(ammo_type, attrs) do
 | 
					  def changeset(ammo_type, attrs) do
 | 
				
			||||||
    ammo_type
 | 
					    ammo_type
 | 
				
			||||||
    |> cast(attrs, [:name, :desc, :case_material, :bullet_type, :grain, :manufacturer])
 | 
					    |> cast(attrs, [:name, :desc, :case_material, :bullet_type, :grain, :manufacturer])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,7 +50,8 @@ defmodule Cannery.Containers do
 | 
				
			|||||||
      {:error, %Ecto.Changeset{}}
 | 
					      {:error, %Ecto.Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec create_container(attrs :: map()) :: {:ok, Container.t()} | {:error, Changeset.t()}
 | 
					  @spec create_container(attrs :: map()) ::
 | 
				
			||||||
 | 
					          {:ok, Container.t()} | {:error, Changeset.t(Container.new_container())}
 | 
				
			||||||
  def create_container(attrs) do
 | 
					  def create_container(attrs) do
 | 
				
			||||||
    %Container{} |> Container.changeset(attrs) |> Repo.insert()
 | 
					    %Container{} |> Container.changeset(attrs) |> Repo.insert()
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
@@ -67,8 +68,8 @@ defmodule Cannery.Containers do
 | 
				
			|||||||
      {:error, %Ecto.Changeset{}}
 | 
					      {:error, %Ecto.Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec update_container(Container.t() | Ecto.Changeset.t(), attrs :: map()) ::
 | 
					  @spec update_container(Container.t(), attrs :: map()) ::
 | 
				
			||||||
          {:ok, Container.t()} | {:error, Ecto.Changeset.t()}
 | 
					          {:ok, Container.t()} | {:error, Changeset.t(Container.t())}
 | 
				
			||||||
  def update_container(container, attrs) do
 | 
					  def update_container(container, attrs) do
 | 
				
			||||||
    container |> Container.changeset(attrs) |> Repo.update()
 | 
					    container |> Container.changeset(attrs) |> Repo.update()
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
@@ -85,8 +86,8 @@ defmodule Cannery.Containers do
 | 
				
			|||||||
      {:error, %Ecto.Changeset{}}
 | 
					      {:error, %Ecto.Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec delete_container(Container.t() | Ecto.Changeset.t()) ::
 | 
					  @spec delete_container(Container.t()) ::
 | 
				
			||||||
          {:ok, Container.t()} | {:error, Ecto.Changeset.t()}
 | 
					          {:ok, Container.t()} | {:error, Changeset.t(Container.t())}
 | 
				
			||||||
  def delete_container(container), do: container |> Repo.delete()
 | 
					  def delete_container(container), do: container |> Repo.delete()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
@@ -98,7 +99,7 @@ defmodule Cannery.Containers do
 | 
				
			|||||||
      %Container{}
 | 
					      %Container{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec delete_container!(Container.t() | Ecto.Changeset.t()) :: Container.t()
 | 
					  @spec delete_container!(Container.t()) :: Container.t()
 | 
				
			||||||
  def delete_container!(container), do: container |> Repo.delete!()
 | 
					  def delete_container!(container), do: container |> Repo.delete!()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
@@ -113,9 +114,10 @@ defmodule Cannery.Containers do
 | 
				
			|||||||
      %Ecto.Changeset{data: %Container{}}
 | 
					      %Ecto.Changeset{data: %Container{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec change_container(Container.t() | Container.new_container()) :: Changeset.t()
 | 
					  @spec change_container(Container.t() | Container.new_container()) ::
 | 
				
			||||||
 | 
					          Changeset.t(Container.t() | Container.new_container())
 | 
				
			||||||
  @spec change_container(Container.t() | Container.new_container(), attrs :: map()) ::
 | 
					  @spec change_container(Container.t() | Container.new_container(), attrs :: map()) ::
 | 
				
			||||||
          Changeset.t()
 | 
					          Changeset.t(Container.t() | Container.new_container())
 | 
				
			||||||
  def change_container(container, attrs \\ %{}), do: container |> Container.changeset(attrs)
 | 
					  def change_container(container, attrs \\ %{}), do: container |> Container.changeset(attrs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,7 +36,7 @@ defmodule Cannery.Containers.Container do
 | 
				
			|||||||
  @type id :: UUID.t()
 | 
					  @type id :: UUID.t()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc false
 | 
					  @doc false
 | 
				
			||||||
  @spec changeset(t() | new_container(), attrs :: map()) :: Changeset.t()
 | 
					  @spec changeset(t() | new_container(), attrs :: map()) :: Changeset.t(t() | new_container())
 | 
				
			||||||
  def changeset(container, attrs) do
 | 
					  def changeset(container, attrs) do
 | 
				
			||||||
    container
 | 
					    container
 | 
				
			||||||
    |> cast(attrs, [:name, :desc, :type, :location, :user_id])
 | 
					    |> cast(attrs, [:name, :desc, :type, :location, :user_id])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,8 @@ defmodule Cannery.Containers.ContainerTag do
 | 
				
			|||||||
  @type id :: UUID.t()
 | 
					  @type id :: UUID.t()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc false
 | 
					  @doc false
 | 
				
			||||||
  @spec changeset(t() | new_container_tag(), attrs :: map()) :: Changeset.t()
 | 
					  @spec changeset(t() | new_container_tag(), attrs :: map()) ::
 | 
				
			||||||
 | 
					          Changeset.t(t() | new_container_tag())
 | 
				
			||||||
  def changeset(container_tag, attrs) do
 | 
					  def changeset(container_tag, attrs) do
 | 
				
			||||||
    container_tag
 | 
					    container_tag
 | 
				
			||||||
    |> cast(attrs, [:tag_id, :container_id])
 | 
					    |> cast(attrs, [:tag_id, :container_id])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,11 +93,11 @@ defmodule Cannery.Invites do
 | 
				
			|||||||
      {:ok, %Invite{}}
 | 
					      {:ok, %Invite{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      iex> create_invite(%User{id: "1"}, %{field: bad_value})
 | 
					      iex> create_invite(%User{id: "1"}, %{field: bad_value})
 | 
				
			||||||
      {:error, %Ecto.Changeset{}}
 | 
					      {:error, %Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec create_invite(User.t() | User.id(), attrs :: map()) ::
 | 
					  @spec create_invite(User.t() | User.id(), attrs :: map()) ::
 | 
				
			||||||
          {:ok, Invite.t()} | {:error, Changeset.t()}
 | 
					          {:ok, Invite.t()} | {:error, Changeset.t(Invite.new_invite())}
 | 
				
			||||||
  def create_invite(%{id: user_id}, attrs), do: create_invite(user_id, attrs)
 | 
					  def create_invite(%{id: user_id}, attrs), do: create_invite(user_id, attrs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def create_invite(user_id, attrs) when not (user_id |> is_nil()) do
 | 
					  def create_invite(user_id, attrs) when not (user_id |> is_nil()) do
 | 
				
			||||||
@@ -120,11 +120,11 @@ defmodule Cannery.Invites do
 | 
				
			|||||||
      {:ok, %Invite{}}
 | 
					      {:ok, %Invite{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      iex> update_invite(invite, %{field: bad_value})
 | 
					      iex> update_invite(invite, %{field: bad_value})
 | 
				
			||||||
      {:error, %Ecto.Changeset{}}
 | 
					      {:error, %Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec update_invite(Invite.t(), attrs :: map()) ::
 | 
					  @spec update_invite(Invite.t(), attrs :: map()) ::
 | 
				
			||||||
          {:ok, Invite.t()} | {:error, Ecto.Changeset.t()}
 | 
					          {:ok, Invite.t()} | {:error, Changeset.t(Invite.t())}
 | 
				
			||||||
  def update_invite(invite, attrs), do: invite |> Invite.changeset(attrs) |> Repo.update()
 | 
					  def update_invite(invite, attrs), do: invite |> Invite.changeset(attrs) |> Repo.update()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
@@ -136,10 +136,10 @@ defmodule Cannery.Invites do
 | 
				
			|||||||
      {:ok, %Invite{}}
 | 
					      {:ok, %Invite{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      iex> delete_invite(invite)
 | 
					      iex> delete_invite(invite)
 | 
				
			||||||
      {:error, %Ecto.Changeset{}}
 | 
					      {:error, %Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec delete_invite(Invite.t()) :: {:ok, Invite.t()} | {:error, Ecto.Changeset.t()}
 | 
					  @spec delete_invite(Invite.t()) :: {:ok, Invite.t()} | {:error, Changeset.t(Invite.t())}
 | 
				
			||||||
  def delete_invite(invite), do: invite |> Repo.delete()
 | 
					  def delete_invite(invite), do: invite |> Repo.delete()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
@@ -155,15 +155,17 @@ defmodule Cannery.Invites do
 | 
				
			|||||||
  def delete_invite!(invite), do: invite |> Repo.delete!()
 | 
					  def delete_invite!(invite), do: invite |> Repo.delete!()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
  Returns an `%Ecto.Changeset{}` for tracking invite changes.
 | 
					  Returns an `%Changeset{}` for tracking invite changes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ## Examples
 | 
					  ## Examples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      iex> change_invite(invite)
 | 
					      iex> change_invite(invite)
 | 
				
			||||||
      %Ecto.Changeset{data: %Invite{}}
 | 
					      %Changeset{data: %Invite{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec change_invite(Invite.t() | Invite.new_invite()) :: Ecto.Changeset.t()
 | 
					  @spec change_invite(Invite.t() | Invite.new_invite()) ::
 | 
				
			||||||
  @spec change_invite(Invite.t() | Invite.new_invite(), attrs :: map()) :: Ecto.Changeset.t()
 | 
					          Changeset.t(Invite.t() | Invite.new_invite())
 | 
				
			||||||
 | 
					  @spec change_invite(Invite.t() | Invite.new_invite(), attrs :: map()) ::
 | 
				
			||||||
 | 
					          Changeset.t(Invite.t() | Invite.new_invite())
 | 
				
			||||||
  def change_invite(invite, attrs \\ %{}), do: invite |> Invite.changeset(attrs)
 | 
					  def change_invite(invite, attrs \\ %{}), do: invite |> Invite.changeset(attrs)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,7 @@ defmodule Cannery.Invites.Invite do
 | 
				
			|||||||
  @type id :: UUID.t()
 | 
					  @type id :: UUID.t()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc false
 | 
					  @doc false
 | 
				
			||||||
  @spec changeset(t() | new_invite(), attrs :: map()) :: Changeset.t()
 | 
					  @spec changeset(t() | new_invite(), attrs :: map()) :: Changeset.t(t() | new_invite())
 | 
				
			||||||
  def changeset(invite, attrs) do
 | 
					  def changeset(invite, attrs) do
 | 
				
			||||||
    invite
 | 
					    invite
 | 
				
			||||||
    |> cast(attrs, [:name, :token, :uses_left, :disabled_at, :user_id])
 | 
					    |> cast(attrs, [:name, :token, :uses_left, :disabled_at, :user_id])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,7 +49,7 @@ defmodule Cannery.Tags do
 | 
				
			|||||||
      {:error, %Changeset{}}
 | 
					      {:error, %Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec create_tag(attrs :: map()) :: {:ok, Tag.t()} | {:error, Changeset.t()}
 | 
					  @spec create_tag(attrs :: map()) :: {:ok, Tag.t()} | {:error, Changeset.t(Tag.new_tag())}
 | 
				
			||||||
  def create_tag(attrs), do: %Tag{} |> Tag.changeset(attrs) |> Repo.insert()
 | 
					  def create_tag(attrs), do: %Tag{} |> Tag.changeset(attrs) |> Repo.insert()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
@@ -64,7 +64,7 @@ defmodule Cannery.Tags do
 | 
				
			|||||||
      {:error, %Changeset{}}
 | 
					      {:error, %Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec update_tag(Tag.t(), attrs :: map()) :: {:ok, Tag.t()} | {:error, Changeset.t()}
 | 
					  @spec update_tag(Tag.t(), attrs :: map()) :: {:ok, Tag.t()} | {:error, Changeset.t(Tag.t())}
 | 
				
			||||||
  def update_tag(tag, attrs), do: tag |> Tag.changeset(attrs) |> Repo.update()
 | 
					  def update_tag(tag, attrs), do: tag |> Tag.changeset(attrs) |> Repo.update()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
@@ -79,7 +79,7 @@ defmodule Cannery.Tags do
 | 
				
			|||||||
      {:error, %Changeset{}}
 | 
					      {:error, %Changeset{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec delete_tag(Tag.t()) :: {:ok, Tag.t()} | {:error, Changeset.t()}
 | 
					  @spec delete_tag(Tag.t()) :: {:ok, Tag.t()} | {:error, Changeset.t(Tag.t())}
 | 
				
			||||||
  def delete_tag(tag), do: tag |> Repo.delete()
 | 
					  def delete_tag(tag), do: tag |> Repo.delete()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
@@ -103,8 +103,9 @@ defmodule Cannery.Tags do
 | 
				
			|||||||
      %Changeset{data: %Tag{}}
 | 
					      %Changeset{data: %Tag{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  """
 | 
					  """
 | 
				
			||||||
  @spec change_tag(Tag.t() | Tag.new_tag()) :: Changeset.t()
 | 
					  @spec change_tag(Tag.t() | Tag.new_tag()) :: Changeset.t(Tag.t() | Tag.new_tag())
 | 
				
			||||||
  @spec change_tag(Tag.t() | Tag.new_tag(), attrs :: map()) :: Changeset.t()
 | 
					  @spec change_tag(Tag.t() | Tag.new_tag(), attrs :: map()) ::
 | 
				
			||||||
 | 
					          Changeset.t(Tag.t() | Tag.new_tag())
 | 
				
			||||||
  def change_tag(tag, attrs \\ %{}), do: Tag.changeset(tag, attrs)
 | 
					  def change_tag(tag, attrs \\ %{}), do: Tag.changeset(tag, attrs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc """
 | 
					  @doc """
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,7 @@ defmodule Cannery.Tags.Tag do
 | 
				
			|||||||
  @type id() :: UUID.t()
 | 
					  @type id() :: UUID.t()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @doc false
 | 
					  @doc false
 | 
				
			||||||
  @spec changeset(t() | new_tag(), attrs :: map()) :: Changeset.t()
 | 
					  @spec changeset(t() | new_tag(), attrs :: map()) :: Changeset.t(t() | new_tag())
 | 
				
			||||||
  def changeset(tag, attrs) do
 | 
					  def changeset(tag, attrs) do
 | 
				
			||||||
    tag
 | 
					    tag
 | 
				
			||||||
    |> cast(attrs, [:name, :bg_color, :text_color, :user_id])
 | 
					    |> cast(attrs, [:name, :bg_color, :text_color, :user_id])
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user