- harden ammo context

- add user_id to ammo types
This commit is contained in:
2022-02-10 00:57:56 -05:00
parent 3b0850852e
commit e9ef44eb53
13 changed files with 325 additions and 242 deletions

View File

@ -44,10 +44,11 @@ defmodule Cannery.Ammo.AmmoGroup do
@type id :: UUID.t()
@doc false
@spec changeset(t() | new_ammo_group(), attrs :: map()) :: Changeset.t(t() | new_ammo_group())
def changeset(ammo_group, attrs) do
@spec create_changeset(t() | new_ammo_group(), attrs :: map()) ::
Changeset.t(t() | new_ammo_group())
def create_changeset(ammo_group, attrs) do
ammo_group
|> cast(attrs, [:count, :price_paid, :notes, :tag_id, :ammo_type_id, :container_id, :user_id])
|> cast(attrs, [:count, :price_paid, :notes, :ammo_type_id, :container_id, :user_id])
|> validate_required([
:count,
:ammo_type_id,
@ -55,4 +56,17 @@ defmodule Cannery.Ammo.AmmoGroup do
:user_id
])
end
@doc false
@spec update_changeset(t() | new_ammo_group(), attrs :: map()) ::
Changeset.t(t() | new_ammo_group())
def update_changeset(ammo_group, attrs) do
ammo_group
|> cast(attrs, [:count, :price_paid, :notes, :ammo_type_id, :container_id, :user_id])
|> validate_required([
:count,
:ammo_type_id,
:container_id
])
end
end

View File

@ -7,6 +7,7 @@ defmodule Cannery.Ammo.AmmoType do
use Ecto.Schema
import Ecto.Changeset
alias Cannery.Accounts.User
alias Cannery.Ammo.{AmmoGroup, AmmoType}
alias Ecto.{Changeset, UUID}
@ -34,6 +35,8 @@ defmodule Cannery.Ammo.AmmoType do
field :manufacturer, :string
field :sku, :string
belongs_to :user, User
has_many :ammo_groups, AmmoGroup
timestamps()
@ -58,6 +61,8 @@ defmodule Cannery.Ammo.AmmoType do
corrosive: boolean(),
manufacturer: String.t() | nil,
sku: String.t() | nil,
user_id: User.id(),
user: User.t() | nil,
ammo_groups: [AmmoGroup.t()] | nil,
inserted_at: NaiveDateTime.t(),
updated_at: NaiveDateTime.t()
@ -65,11 +70,9 @@ defmodule Cannery.Ammo.AmmoType do
@type new_ammo_type :: %AmmoType{}
@type id :: UUID.t()
@doc false
@spec changeset(t() | new_ammo_type(), attrs :: map()) :: Changeset.t(t() | new_ammo_type())
def changeset(ammo_type, attrs) do
ammo_type
|> cast(attrs, [
@spec changeset_fields() :: [atom()]
defp changeset_fields,
do: [
:name,
:desc,
:bullet_type,
@ -87,7 +90,23 @@ defmodule Cannery.Ammo.AmmoType do
:corrosive,
:manufacturer,
:sku
])
|> validate_required([:name])
]
@doc false
@spec create_changeset(t() | new_ammo_type(), attrs :: map()) ::
Changeset.t(t() | new_ammo_type())
def create_changeset(ammo_type, attrs) do
ammo_type
|> cast(attrs, [:user_id | changeset_fields()])
|> validate_required([:name, :user_id])
end
@doc false
@spec update_changeset(t() | new_ammo_type(), attrs :: map()) ::
Changeset.t(t() | new_ammo_type())
def update_changeset(ammo_type, attrs) do
ammo_type
|> cast(attrs, changeset_fields())
|> validate_required([:name, :user_id])
end
end