feat(membership-fees): add database schema and Ash domain structure

This commit is contained in:
Moritz 2025-12-11 16:27:06 +01:00 committed by moritz
parent e563d12be3
commit 4d1b33357e
14 changed files with 1405 additions and 7 deletions

View file

@ -79,7 +79,8 @@ defmodule Mv.Membership.Member do
# user_id is NOT in accept list to prevent direct foreign key manipulation
argument :user, :map, allow_nil?: true
accept @member_fields
# Accept member fields plus membership_fee_type_id (belongs_to FK)
accept @member_fields ++ [:membership_fee_type_id]
change manage_relationship(:custom_field_values, type: :create)
@ -112,7 +113,8 @@ defmodule Mv.Membership.Member do
# user_id is NOT in accept list to prevent direct foreign key manipulation
argument :user, :map, allow_nil?: true
accept @member_fields
# Accept member fields plus membership_fee_type_id (belongs_to FK)
accept @member_fields ++ [:membership_fee_type_id]
change manage_relationship(:custom_field_values, on_match: :update, on_no_match: :create)
@ -394,6 +396,15 @@ defmodule Mv.Membership.Member do
writable?: false,
public?: false,
select_by_default?: false
# Membership fee fields
# membership_fee_start_date: Date from which membership fees should be calculated
# If nil, calculated from join_date + global setting
attribute :membership_fee_start_date, :date do
allow_nil? true
public? true
description "Date from which membership fees should be calculated"
end
end
relationships do
@ -402,6 +413,16 @@ defmodule Mv.Membership.Member do
# This references the User's member_id attribute
# The relationship is optional (allow_nil? true by default)
has_one :user, Mv.Accounts.User
# Membership fee relationships
# belongs_to: The fee type assigned to this member
# Optional for MVP - can be nil if no fee type assigned yet
belongs_to :membership_fee_type, Mv.MembershipFees.MembershipFeeType do
allow_nil? true
end
# has_many: All fee cycles for this member
has_many :membership_fee_cycles, Mv.MembershipFees.MembershipFeeCycle
end
# Define identities for upsert operations