proposed_intent.ex (1820B)
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.ProposedIntent do 19 @moduledoc """ 20 Represents many-to-many relationships between proposals and intents, 21 supporting including intents in multiple proposals, as well as a proposal 22 including multiple intents. 23 """ 24 25 use Zenflows.DB.Schema 26 27 alias Ecto.Changeset 28 alias Zenflows.DB.Schema 29 alias Zenflows.VF.{Intent, Proposal} 30 31 @type t() :: %__MODULE__{ 32 reciprocal: boolean(), 33 publishes: Intent.t(), 34 published_in: Proposal.t(), 35 } 36 37 schema "vf_proposed_intent" do 38 field :reciprocal, :boolean, default: false 39 belongs_to :publishes, Intent 40 belongs_to :published_in, Proposal 41 timestamps() 42 end 43 44 @reqr ~w[publishes_id published_in_id]a 45 @cast @reqr ++ [:reciprocal] 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 |> Changeset.assoc_constraint(:publishes) 54 |> Changeset.assoc_constraint(:published_in) 55 end 56 end