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