forked from a8m/ent-graphql-example
-
Notifications
You must be signed in to change notification settings - Fork 0
/
todo.graphql
121 lines (104 loc) · 2.28 KB
/
todo.graphql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
interface Node {
id: ID!
}
"""Maps a Time GraphQL scalar to a Go time.Time struct."""
scalar Time
"""
Define a Relay Cursor type:
https://relay.dev/graphql/connections.htm#sec-Cursor
"""
scalar Cursor
"""
Define an enumeration type and map it later to Ent enum (Go type).
https://graphql.org/learn/schema/#enumeration-types
"""
enum Status {
IN_PROGRESS
COMPLETED
}
type PageInfo {
hasNextPage: Boolean!
hasPreviousPage: Boolean!
startCursor: Cursor
endCursor: Cursor
}
type TodoConnection {
totalCount: Int!
pageInfo: PageInfo!
edges: [TodoEdge]
}
type TodoEdge {
node: Todo
cursor: Cursor!
}
"""The following enums are matched the entgql annotations in the ent/schema."""
enum TodoOrderField {
CREATED_AT
PRIORITY
STATUS
TEXT
}
enum OrderDirection {
ASC
DESC
}
input TodoOrder {
direction: OrderDirection!
field: TodoOrderField
}
"""
Define an object type and map it later to the generated Ent model.
https://graphql.org/learn/schema/#object-types-and-fields
"""
type Todo implements Node {
id: ID!
createdAt: Time
status: Status!
priority: Int!
text: String!
parent: Todo
children: [Todo!]
}
"""
Define an input type for the mutation below.
https://graphql.org/learn/schema/#input-types
Note that, this type is mapped to the generated
input type in mutation_input.go.
"""
input CreateTodoInput {
status: Status! = IN_PROGRESS
priority: Int
text: String
parent: ID
children: [ID!]
}
"""
Define an input type for the mutation below.
https://graphql.org/learn/schema/#input-types
Note that, this type is mapped to the generated
input type in mutation_input.go.
"""
input UpdateTodoInput {
status: Status
priority: Int
text: String
parent: ID
clearParent: Boolean
addChildIDs: [ID!]
removeChildIDs: [ID!]
}
"""
Define a mutation for creating todos.
https://graphql.org/learn/queries/#mutations
"""
type Mutation {
createTodo(input: CreateTodoInput!): Todo!
updateTodo(id: ID!, input: UpdateTodoInput!): Todo!
updateTodos(ids: [ID!]!, input: UpdateTodoInput!): [Todo!]!
}
"""Define a query for getting all todos and support the Node interface."""
type Query {
todos(after: Cursor, first: Int, before: Cursor, last: Int, orderBy: TodoOrder, where: TodoWhereInput): TodoConnection
node(id: ID!): Node
nodes(ids: [ID!]!): [Node]!
}