-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
node.go
177 lines (133 loc) · 4.08 KB
/
node.go
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
package resolver
import (
"context"
"github.com/graph-gophers/graphql-go"
"github.com/smartcontractkit/chainlink/core/chains/evm/types"
"github.com/smartcontractkit/chainlink/core/web/loader"
)
// NodeResolver resolves the Node type.
type NodeResolver struct {
node types.Node
}
func NewNode(node types.Node) *NodeResolver {
return &NodeResolver{node: node}
}
func NewNodes(nodes []types.Node) []*NodeResolver {
var resolvers []*NodeResolver
for _, n := range nodes {
resolvers = append(resolvers, NewNode(n))
}
return resolvers
}
// ID resolves the node's unique identifier.
func (r *NodeResolver) ID() graphql.ID {
return int32GQLID(r.node.ID)
}
// Name resolves the node's name field.
func (r *NodeResolver) Name() string {
return r.node.Name
}
// WSURL resolves the node's websocket url field.
func (r *NodeResolver) WSURL() string {
return r.node.WSURL.String
}
// HTTPURL resolves the node's http url field.
func (r *NodeResolver) HTTPURL() string {
return r.node.HTTPURL.String
}
// State resolves the node state
func (r *NodeResolver) State() string {
return r.node.State
}
// Chain resolves the node's chain object field.
func (r *NodeResolver) Chain(ctx context.Context) (*ChainResolver, error) {
chain, err := loader.GetChainByID(ctx, r.node.EVMChainID.String())
if err != nil {
return nil, err
}
return NewChain(*chain), nil
}
// CreatedAt resolves the node's created at field.
func (r *NodeResolver) CreatedAt() graphql.Time {
return graphql.Time{Time: r.node.CreatedAt}
}
// UpdatedAt resolves the node's updated at field.
func (r *NodeResolver) UpdatedAt() graphql.Time {
return graphql.Time{Time: r.node.UpdatedAt}
}
// -- Node Query --
type NodePayloadResolver struct {
node *types.Node
NotFoundErrorUnionType
}
func NewNodePayloadResolver(node *types.Node, err error) *NodePayloadResolver {
e := NotFoundErrorUnionType{err: err, message: "node not found", isExpectedErrorFn: nil}
return &NodePayloadResolver{node: node, NotFoundErrorUnionType: e}
}
// ToNode resolves the Node object to be returned if it is found
func (r *NodePayloadResolver) ToNode() (*NodeResolver, bool) {
if r.node != nil {
return NewNode(*r.node), true
}
return nil, false
}
// -- Nodes Query --
type NodesPayloadResolver struct {
nodes []types.Node
total int32
}
func NewNodesPayload(nodes []types.Node, total int32) *NodesPayloadResolver {
return &NodesPayloadResolver{nodes: nodes, total: total}
}
func (r *NodesPayloadResolver) Results() []*NodeResolver {
return NewNodes(r.nodes)
}
func (r *NodesPayloadResolver) Metadata() *PaginationMetadataResolver {
return NewPaginationMetadata(r.total)
}
// -- CreateNode Mutation --
type CreateNodePayloadResolver struct {
node *types.Node
}
func NewCreateNodePayloadResolver(node *types.Node) *CreateNodePayloadResolver {
return &CreateNodePayloadResolver{node: node}
}
func (r *CreateNodePayloadResolver) ToCreateNodeSuccess() (*CreateNodeSuccessResolve, bool) {
if r.node != nil {
return NewCreateNodeSuccessResolve(*r.node), true
}
return nil, false
}
type CreateNodeSuccessResolve struct {
node types.Node
}
func NewCreateNodeSuccessResolve(node types.Node) *CreateNodeSuccessResolve {
return &CreateNodeSuccessResolve{node}
}
func (r *CreateNodeSuccessResolve) Node() *NodeResolver {
return NewNode(r.node)
}
// -- DeleteNode Mutation --
type DeleteNodePayloadResolver struct {
node *types.Node
NotFoundErrorUnionType
}
func NewDeleteNodePayloadResolver(node *types.Node, err error) *DeleteNodePayloadResolver {
e := NotFoundErrorUnionType{err: err, message: "node not found", isExpectedErrorFn: nil}
return &DeleteNodePayloadResolver{node: node, NotFoundErrorUnionType: e}
}
func (r *DeleteNodePayloadResolver) ToDeleteNodeSuccess() (*DeleteNodeSuccessResolver, bool) {
if r.node != nil {
return NewDeleteNodeSuccessResolver(r.node), true
}
return nil, false
}
type DeleteNodeSuccessResolver struct {
node *types.Node
}
func NewDeleteNodeSuccessResolver(node *types.Node) *DeleteNodeSuccessResolver {
return &DeleteNodeSuccessResolver{node: node}
}
func (r *DeleteNodeSuccessResolver) Node() *NodeResolver {
return NewNode(*r.node)
}