1
+ schema
2
+ @link (url : " https://specs.apollo.dev/link/v1.0" )
3
+ @link (url : " https://specs.apollo.dev/join/v0.3" , for : EXECUTION )
4
+ {
5
+ query : Query
6
+ }
7
+
8
+ directive @join__enumValue (graph : join__Graph ! ) repeatable on ENUM_VALUE
9
+
10
+ directive @join__field (graph : join__Graph , requires : join__FieldSet , provides : join__FieldSet , type : String , external : Boolean , override : String , usedOverridden : Boolean ) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION
11
+
12
+ directive @join__graph (name : String ! , url : String ! ) on ENUM_VALUE
13
+
14
+ directive @join__implements (graph : join__Graph ! , interface : String ! ) repeatable on OBJECT | INTERFACE
15
+
16
+ directive @join__type (graph : join__Graph ! , key : join__FieldSet , extension : Boolean ! = false , resolvable : Boolean ! = true , isInterfaceObject : Boolean ! = false ) repeatable on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT | SCALAR
17
+
18
+ directive @join__unionMember (graph : join__Graph ! , member : String ! ) repeatable on UNION
19
+
20
+ directive @link (url : String , as : String , for : link__Purpose , import : [link__Import ]) repeatable on SCHEMA
21
+
22
+ scalar join__FieldSet
23
+
24
+ enum join__Graph {
25
+ ACCOUNTS @join__graph (name : " accounts" , url : " http://accounts:4001/graphql" )
26
+ INVENTORY @join__graph (name : " inventory" , url : " http://inventory:4002/graphql" )
27
+ PRODUCTS @join__graph (name : " products" , url : " http://products:4003/graphql" )
28
+ REVIEWS @join__graph (name : " reviews" , url : " http://reviews:4004/graphql" )
29
+ }
30
+
31
+ scalar link__Import
32
+
33
+ enum link__Purpose {
34
+ """
35
+ `SECURITY` features provide metadata necessary to securely resolve fields.
36
+ """
37
+ SECURITY
38
+
39
+ """
40
+ `EXECUTION` features provide metadata necessary for operation execution.
41
+ """
42
+ EXECUTION
43
+ }
44
+
45
+ type Product
46
+ @join__type (graph : INVENTORY , key : " upc" )
47
+ @join__type (graph : PRODUCTS , key : " upc" )
48
+ @join__type (graph : REVIEWS , key : " upc" )
49
+ {
50
+ upc : String !
51
+ weight : Int @join__field (graph : INVENTORY , external : true ) @join__field (graph : PRODUCTS )
52
+ price : Int @join__field (graph : INVENTORY , external : true ) @join__field (graph : PRODUCTS )
53
+ inStock : Boolean @join__field (graph : INVENTORY )
54
+ shippingEstimate : Int @join__field (graph : INVENTORY , requires : " price weight" )
55
+ name : String @join__field (graph : PRODUCTS )
56
+ reviews : [Review ] @join__field (graph : REVIEWS )
57
+ }
58
+
59
+ type Query
60
+ @join__type (graph : ACCOUNTS )
61
+ @join__type (graph : INVENTORY )
62
+ @join__type (graph : PRODUCTS )
63
+ @join__type (graph : REVIEWS )
64
+ {
65
+ me : User @join__field (graph : ACCOUNTS )
66
+ user (id : ID ! ): User @join__field (graph : ACCOUNTS )
67
+ users : [User ] @join__field (graph : ACCOUNTS )
68
+ topProducts (first : Int = 5 ): [Product ] @join__field (graph : PRODUCTS )
69
+ }
70
+
71
+ type Review
72
+ @join__type (graph : REVIEWS , key : " id" )
73
+ {
74
+ id : ID !
75
+ body : String
76
+ product : Product
77
+ author : User @join__field (graph : REVIEWS , provides : " username" )
78
+ }
79
+
80
+ type User
81
+ @join__type (graph : ACCOUNTS , key : " id" )
82
+ @join__type (graph : REVIEWS , key : " id" )
83
+ {
84
+ id : ID !
85
+ name : String @join__field (graph : ACCOUNTS )
86
+ username : String @join__field (graph : ACCOUNTS ) @join__field (graph : REVIEWS , external : true )
87
+ birthday : Int @join__field (graph : ACCOUNTS )
88
+ reviews : [Review ] @join__field (graph : REVIEWS )
89
+ }
0 commit comments