zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

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