review: removed leftovers and ash use builtin validation functions
This commit is contained in:
parent
2ab3332941
commit
7f034740b0
2 changed files with 18 additions and 61 deletions
2
Justfile
2
Justfile
|
|
@ -9,7 +9,7 @@ migrate-database:
|
||||||
|
|
||||||
reset-database:
|
reset-database:
|
||||||
mix ash.reset
|
mix ash.reset
|
||||||
MIX_ENV=test mix ash.setup
|
MIX_ENV=test mix ash.reset
|
||||||
|
|
||||||
seed-database:
|
seed-database:
|
||||||
mix run priv/repo/seeds.exs
|
mix run priv/repo/seeds.exs
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ defmodule Mv.Membership.Member do
|
||||||
end
|
end
|
||||||
|
|
||||||
actions do
|
actions do
|
||||||
defaults [:read]
|
defaults [:read, :destroy]
|
||||||
|
|
||||||
create :create_member do
|
create :create_member do
|
||||||
primary? true
|
primary? true
|
||||||
|
|
@ -34,11 +34,6 @@ defmodule Mv.Membership.Member do
|
||||||
change manage_relationship(:properties, type: :create)
|
change manage_relationship(:properties, type: :create)
|
||||||
end
|
end
|
||||||
|
|
||||||
destroy :destroy do
|
|
||||||
primary? true
|
|
||||||
change Ash.Resource.Change.Builtins.cascade_destroy(:properties)
|
|
||||||
end
|
|
||||||
|
|
||||||
update :update_member do
|
update :update_member do
|
||||||
primary? true
|
primary? true
|
||||||
require_atomic? false
|
require_atomic? false
|
||||||
|
|
@ -73,71 +68,33 @@ defmodule Mv.Membership.Member do
|
||||||
validate present(:email)
|
validate present(:email)
|
||||||
|
|
||||||
# Birth date not in the future
|
# Birth date not in the future
|
||||||
validate fn changeset, _ ->
|
validate compare(:birth_date, less_than_or_equal_to: &Date.utc_today/0),
|
||||||
birth_date = Ash.Changeset.get_attribute(changeset, :birth_date)
|
where: [present(:birth_date)],
|
||||||
|
message: "cannot be in the future"
|
||||||
if birth_date && Date.compare(birth_date, Date.utc_today()) == :gt do
|
|
||||||
{:error, field: :birth_date, message: "cannot be in the future"}
|
|
||||||
else
|
|
||||||
:ok
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Join date not in the future
|
# Join date not in the future
|
||||||
validate fn changeset, _ ->
|
validate compare(:join_date, less_than_or_equal_to: &Date.utc_today/0),
|
||||||
join_date = Ash.Changeset.get_attribute(changeset, :join_date)
|
where: [present(:join_date)],
|
||||||
|
message: "cannot be in the future"
|
||||||
|
|
||||||
if join_date && Date.compare(join_date, Date.utc_today()) == :gt do
|
|
||||||
{:error, field: :join_date, message: "cannot be in the future"}
|
|
||||||
else
|
|
||||||
:ok
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Exit date not before join date
|
# Exit date not before join date
|
||||||
validate fn changeset, _ ->
|
validate compare(:exit_date, greater_than: :join_date),
|
||||||
join_date = Ash.Changeset.get_attribute(changeset, :join_date)
|
where: [present([:join_date, :exit_date])],
|
||||||
exit_date = Ash.Changeset.get_attribute(changeset, :exit_date)
|
message: "cannot be before join date"
|
||||||
|
|
||||||
if join_date && exit_date && Date.compare(exit_date, join_date) == :lt do
|
|
||||||
{:error, field: :exit_date, message: "cannot be before join date"}
|
|
||||||
else
|
|
||||||
:ok
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Phone number format (only if set)
|
# Phone number format (only if set)
|
||||||
validate fn changeset, _ ->
|
validate match(:phone_number, ~r/^\+?[0-9\- ]{6,20}$/),
|
||||||
phone = Ash.Changeset.get_attribute(changeset, :phone_number)
|
where: [present(:phone_number)],
|
||||||
|
message: "is not a valid phone number"
|
||||||
|
|
||||||
if phone && !Regex.match?(~r/^\+?[0-9\- ]{6,20}$/, phone) do
|
|
||||||
{:error, field: :phone_number, message: "is not a valid phone number"}
|
|
||||||
else
|
|
||||||
:ok
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Postal code format (only if set)
|
# Postal code format (only if set)
|
||||||
validate fn changeset, _ ->
|
validate match(:postal_code, ~r/^\d{5}$/),
|
||||||
postal_code = Ash.Changeset.get_attribute(changeset, :postal_code)
|
where: [present(:postal_code)],
|
||||||
|
message: "must consist of 5 digits"
|
||||||
|
|
||||||
if postal_code && !Regex.match?(~r/^\d{5}$/, postal_code) do
|
|
||||||
{:error, field: :postal_code, message: "must consist of 5 digits"}
|
|
||||||
else
|
|
||||||
:ok
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# paid must be boolean if set
|
|
||||||
validate fn changeset, _ ->
|
|
||||||
paid = Ash.Changeset.get_attribute(changeset, :paid)
|
|
||||||
|
|
||||||
if not is_nil(paid) and not is_boolean(paid) do
|
|
||||||
{:error, field: :paid, message: "must be true or false"}
|
|
||||||
else
|
|
||||||
:ok
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Email validation with EctoCommons.EmailValidator
|
# Email validation with EctoCommons.EmailValidator
|
||||||
validate fn changeset, _ ->
|
validate fn changeset, _ ->
|
||||||
|
|
@ -216,6 +173,6 @@ defmodule Mv.Membership.Member do
|
||||||
end
|
end
|
||||||
|
|
||||||
relationships do
|
relationships do
|
||||||
has_many :properties, Mv.Membership.Property, destination_attribute: :member_id
|
has_many :properties, Mv.Membership.Property
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue