agent_relationship_role.ex (1904B)
1 # Zenflows is designed to implement the Valueflows vocabulary, 2 # written and maintained by srfsh <info@dyne.org>. 3 # Copyright (C) 2021-2023 Dyne.org foundation <foundation@dyne.org>. 4 # 5 # This program is free software: you can redistribute it and/or modify 6 # it under the terms of the GNU Affero General Public License as published by 7 # the Free Software Foundation, either version 3 of the License, or 8 # (at your option) any later version. 9 # 10 # This program is distributed in the hope that it will be useful, 11 # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 # GNU Affero General Public License for more details. 14 # 15 # You should have received a copy of the GNU Affero General Public License 16 # along with this program. If not, see <https://www.gnu.org/licenses/>. 17 18 defmodule Zenflows.VF.AgentRelationshipRole do 19 @moduledoc """ 20 The role of an economic relationship that exists between two agents, 21 such as member, trading partner. 22 """ 23 24 use Zenflows.DB.Schema 25 26 alias Ecto.Changeset 27 alias Zenflows.DB.{Schema, Validate} 28 alias Zenflows.VF.RoleBehavior 29 30 @type t() :: %__MODULE__{ 31 role_behavior: RoleBehavior.t() | nil, 32 role_label: String.t(), 33 inverse_role_label: String.t() | nil, 34 note: String.t() | nil, 35 } 36 37 schema "vf_agent_relationship_role" do 38 belongs_to :role_behavior, RoleBehavior 39 field :role_label, :string 40 field :inverse_role_label, :string 41 field :note, :string 42 timestamps() 43 end 44 45 @reqr [:role_label] 46 @cast @reqr ++ ~w[role_behavior_id inverse_role_label note]a 47 48 @doc false 49 @spec changeset(Schema.t(), Schema.params()) :: Changeset.t() 50 def changeset(schema \\ %__MODULE__{}, params) do 51 schema 52 |> Changeset.cast(params, @cast) 53 |> Changeset.validate_required(@reqr) 54 |> Validate.name(:role_label) 55 |> Validate.name(:inverse_role_label) 56 |> Validate.note(:note) 57 |> Changeset.assoc_constraint(:role_behavior) 58 end 59 end