feat: implement full CRUD for membership fee types with settings UI

- Add interval immutability and deletion prevention validations
- Add settings validation for default_membership_fee_type_id
- Create MembershipFeeSettingsLive for admin UI with form handling
- Add comprehensive test coverage (unit, integration, settings)
This commit is contained in:
Moritz 2025-12-12 17:52:52 +01:00
parent 82897d5cd3
commit da1fd3da73
7 changed files with 754 additions and 2 deletions

View file

@ -141,6 +141,21 @@ defmodule Mv.Membership.Setting do
end
end,
on: [:create, :update]
# Validate default_membership_fee_type_id exists if set
validate fn changeset, _context ->
fee_type_id = Ash.Changeset.get_attribute(changeset, :default_membership_fee_type_id)
if fee_type_id do
case Ash.get(Mv.MembershipFees.MembershipFeeType, fee_type_id) do
{:ok, _} -> :ok
{:error, _} ->
{:error, field: :default_membership_fee_type_id, message: "Membership fee type not found"}
end
else
:ok # Optional, can be nil
end
end, on: [:create, :update]
end
attributes do