appreciation.ex (1874B)
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.Appreciation do 19 @moduledoc """ 20 A way to tie an economic event that is given in loose fulfilment for 21 another economic event, without commitments or expectations. Supports the 22 gift economy. 23 """ 24 25 use Zenflows.DB.Schema 26 27 alias Ecto.Changeset 28 alias Zenflows.DB.{Schema, Validate} 29 alias Zenflows.VF.EconomicEvent 30 31 @type t() :: %__MODULE__{ 32 appreciation_of: EconomicEvent.t(), 33 appreciation_with: EconomicEvent.t(), 34 note: String.t() | nil, 35 } 36 37 schema "vf_appreciation" do 38 belongs_to :appreciation_of, EconomicEvent 39 belongs_to :appreciation_with, EconomicEvent 40 field :note, :string 41 timestamps() 42 end 43 44 @reqr ~w[appreciation_of_id appreciation_with_id]a 45 @cast @reqr ++ [:note] 46 47 @doc false 48 @spec changeset(Schema.t(), Schema.params()) :: Changeset.t() 49 def changeset(schema \\ %__MODULE__{}, params) do 50 schema 51 |> Changeset.cast(params, @cast) 52 |> Changeset.validate_required(@reqr) 53 |> Validate.note(:note) 54 |> Changeset.assoc_constraint(:appreciation_of) 55 |> Changeset.assoc_constraint(:appreciation_with) 56 end 57 end