defmodule Mv.Membership.Property do use Ash.Resource, domain: Mv.Membership, data_layer: AshPostgres.DataLayer postgres do table "properties" repo Mv.Repo end actions do defaults [:create, :read, :update, :destroy] default_accept [:value, :member_id, :property_type_id] end attributes do uuid_primary_key :id attribute :value, :union, constraints: [ storage: :type_and_value, types: [ boolean: [type: :boolean], date: [type: :date], integer: [type: :integer], string: [type: :string], email: [type: Mv.Membership.Email] ] ] end relationships do belongs_to :member, Mv.Membership.Member belongs_to :property_type, Mv.Membership.PropertyType end calculations do calculate :value_to_string, :string, expr(value[:value] <> "") end end