schema.ex (6352B)
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.GQL.Schema do 19 @moduledoc "Absinthe schema." 20 21 use Absinthe.Schema 22 23 alias Zenflows.GQL.MW 24 alias Zenflows.VF 25 26 import_types Absinthe.Type.Custom 27 import_types Zenflows.GQL.Type 28 import_types Zenflows.File.Type 29 import_types Zenflows.SWPass.Type 30 import_types Zenflows.Keypairoom.Type 31 import_types Zenflows.InstVars.Type 32 33 import_types VF.TimeUnit.Type 34 import_types VF.Action.Type 35 import_types VF.Duration.Type 36 import_types VF.Unit.Type 37 import_types VF.Measure.Type 38 import_types VF.SpatialThing.Type 39 import_types VF.ProcessSpecification.Type 40 import_types VF.ResourceSpecification.Type 41 import_types VF.RecipeResource.Type 42 import_types VF.RecipeProcess.Type 43 import_types VF.RecipeExchange.Type 44 import_types VF.RecipeFlow.Type 45 import_types VF.Person.Type 46 import_types VF.Organization.Type 47 #import_types VF.AccountingScope.Type 48 import_types VF.Agent.Type 49 import_types VF.RoleBehavior.Type 50 import_types VF.AgentRelationshipRole.Type 51 import_types VF.AgentRelationship.Type 52 import_types VF.Agreement.Type 53 import_types VF.ScenarioDefinition.Type 54 import_types VF.Scenario.Type 55 import_types VF.Plan.Type 56 import_types VF.Process.Type 57 import_types VF.ProductBatch.Type 58 import_types VF.EconomicResource.Type 59 import_types VF.EconomicEvent.Type 60 #import_types VF.Appreciation.Type 61 import_types VF.Intent.Type 62 #import_types VF.Commitment.Type 63 #import_types VF.Fulfillment.Type 64 #import_types VF.EventOrCommitment.Type 65 import_types VF.Satisfaction.Type 66 #import_types VF.Claim.Type 67 #import_types VF.Settlement.Type 68 import_types VF.Proposal.Type 69 import_types VF.ProposedIntent.Type 70 #import_types VF.ProposedTo.Type 71 72 query do 73 @desc "For testing. Temporary" 74 field :echo, non_null(:string) do 75 arg :arg, non_null(:string) 76 resolve fn %{arg: arg}, _ -> 77 {:ok, arg} 78 end 79 end 80 81 import_fields :query_sw_pass 82 import_fields :query_inst_vars 83 84 import_fields :query_unit 85 import_fields :query_spatial_thing 86 import_fields :query_process_specification 87 import_fields :query_resource_specification 88 import_fields :query_recipe_resource 89 import_fields :query_recipe_process 90 import_fields :query_recipe_exchange 91 import_fields :query_recipe_flow 92 import_fields :query_person 93 import_fields :query_organization 94 #import_fields :query_accounting_scope 95 import_fields :query_agent 96 import_fields :query_role_behavior 97 import_fields :query_agent_relationship_role 98 import_fields :query_agent_relationship 99 import_fields :query_agreement 100 import_fields :query_scenario_definition 101 import_fields :query_scenario 102 import_fields :query_plan 103 import_fields :query_process 104 import_fields :query_product_batch 105 import_fields :query_economic_resource 106 import_fields :query_economic_event 107 #import_fields :query_appreciation 108 import_fields :query_intent 109 #import_fields :query_commitment 110 #import_fields :query_fulfillment 111 import_fields :query_satisfaction 112 #import_fields :query_claim 113 #import_fields :query_settlement 114 import_fields :query_proposal 115 #import_fields :query_proposed_to 116 end 117 118 mutation do 119 @desc "For testing. Temporary" 120 field :echo, non_null(:string) do 121 arg :arg, non_null(:string) 122 resolve fn %{arg: arg}, _ -> 123 {:ok, arg} 124 end 125 end 126 127 import_fields :mutation_sw_pass 128 import_fields :mutation_keypairoom 129 130 import_fields :mutation_unit 131 import_fields :mutation_spatial_thing 132 import_fields :mutation_process_specification 133 import_fields :mutation_resource_specification 134 import_fields :mutation_recipe_resource 135 import_fields :mutation_recipe_process 136 import_fields :mutation_recipe_exchange 137 import_fields :mutation_recipe_flow 138 import_fields :mutation_person 139 import_fields :mutation_organization 140 #import_fields :mutation_accounting_scope 141 #import_fields :mutation_agent 142 import_fields :mutation_role_behavior 143 import_fields :mutation_agent_relationship_role 144 import_fields :mutation_agent_relationship 145 import_fields :mutation_agreement 146 import_fields :mutation_scenario_definition 147 import_fields :mutation_scenario 148 import_fields :mutation_plan 149 import_fields :mutation_process 150 import_fields :mutation_product_batch 151 import_fields :mutation_economic_resource 152 import_fields :mutation_economic_event 153 #import_fields :mutation_appreciation 154 import_fields :mutation_intent 155 #import_fields :mutation_commitment 156 #import_fields :mutation_fulfillment 157 import_fields :mutation_satisfaction 158 #import_fields :mutation_claim 159 #import_fields :mutation_settlement 160 import_fields :mutation_proposal 161 import_fields :mutation_proposed_intent 162 #import_fields :mutation_proposed_to 163 end 164 165 @impl true 166 def middleware(mw, field, %{identifier: id}) 167 when id in ~w[query mutation subscription]a do 168 alias Absinthe.Type 169 170 mw = cond do 171 # require nothing to be provided 172 Type.meta(field, :only_guest?) -> 173 mw 174 175 # require the admin key to be provided 176 Type.meta(field, :only_admin?) -> 177 [MW.Admin | mw] 178 179 # require every call to be signed 180 true -> 181 [MW.Sign | mw] 182 end 183 [MW.Debug | mw] ++ [MW.Errors] 184 185 end 186 def middleware(mw, _, _), do: mw 187 188 @impl true 189 #def hydrate(%Absinthe.Blueprint.Schema.ScalarTypeDefinition{identifier: :id}, %{identifier: :action}) do 190 # [ 191 # parse: &Zenflows.VF.Action.ID.cast/1, 192 # description: 193 # "'produce', 'use', 'consum', etc.", 194 # ] 195 #end 196 def hydrate(%Absinthe.Blueprint.Schema.ScalarTypeDefinition{identifier: :id}, _) do 197 [ 198 # The main intention here is to override parsing, thus 199 # adding validation to the default ID type. 200 parse: &Zenflows.GQL.Type.id_parse/1, 201 description: 202 "A URL-safe Base64-encoded, 22 characters-long String identifier.", 203 ] 204 end 205 206 def hydrate(_, _) do 207 [] 208 end 209 end