1// Copyright (C) 2019 Storj Labs, Inc.
2// See LICENSE for copying information.
3
4package consoleql
5
6import (
7	"github.com/graphql-go/graphql"
8	"go.uber.org/zap"
9
10	"storj.io/storj/satellite/console"
11	"storj.io/storj/satellite/mailservice"
12)
13
14// TypeCreator handles graphql type creation and error checking.
15type TypeCreator struct {
16	query    *graphql.Object
17	mutation *graphql.Object
18
19	user              *graphql.Object
20	reward            *graphql.Object
21	project           *graphql.Object
22	projectUsage      *graphql.Object
23	projectsPage      *graphql.Object
24	bucketUsage       *graphql.Object
25	bucketUsagePage   *graphql.Object
26	projectMember     *graphql.Object
27	projectMemberPage *graphql.Object
28	apiKeyPage        *graphql.Object
29	apiKeyInfo        *graphql.Object
30	createAPIKey      *graphql.Object
31
32	userInput            *graphql.InputObject
33	projectInput         *graphql.InputObject
34	projectLimit         *graphql.InputObject
35	projectsCursor       *graphql.InputObject
36	bucketUsageCursor    *graphql.InputObject
37	projectMembersCursor *graphql.InputObject
38	apiKeysCursor        *graphql.InputObject
39}
40
41// Create create types and check for error.
42func (c *TypeCreator) Create(log *zap.Logger, service *console.Service, mailService *mailservice.Service) error {
43	// inputs
44	c.userInput = graphqlUserInput()
45	if err := c.userInput.Error(); err != nil {
46		return err
47	}
48
49	c.projectInput = graphqlProjectInput()
50	if err := c.projectInput.Error(); err != nil {
51		return err
52	}
53
54	c.projectLimit = graphqlProjectLimit()
55	if err := c.projectLimit.Error(); err != nil {
56		return err
57	}
58
59	c.bucketUsageCursor = graphqlBucketUsageCursor()
60	if err := c.bucketUsageCursor.Error(); err != nil {
61		return err
62	}
63
64	c.projectMembersCursor = graphqlProjectMembersCursor()
65	if err := c.projectMembersCursor.Error(); err != nil {
66		return err
67	}
68
69	c.apiKeysCursor = graphqlAPIKeysCursor()
70	if err := c.apiKeysCursor.Error(); err != nil {
71		return err
72	}
73
74	// entities
75	c.user = graphqlUser()
76	if err := c.user.Error(); err != nil {
77		return err
78	}
79
80	c.reward = graphqlReward()
81	if err := c.reward.Error(); err != nil {
82		return err
83	}
84
85	c.projectUsage = graphqlProjectUsage()
86	if err := c.projectUsage.Error(); err != nil {
87		return err
88	}
89
90	c.bucketUsage = graphqlBucketUsage()
91	if err := c.bucketUsage.Error(); err != nil {
92		return err
93	}
94
95	c.bucketUsagePage = graphqlBucketUsagePage(c)
96	if err := c.bucketUsagePage.Error(); err != nil {
97		return err
98	}
99
100	c.apiKeyInfo = graphqlAPIKeyInfo()
101	if err := c.apiKeyInfo.Error(); err != nil {
102		return err
103	}
104
105	c.createAPIKey = graphqlCreateAPIKey(c)
106	if err := c.createAPIKey.Error(); err != nil {
107		return err
108	}
109
110	c.projectMember = graphqlProjectMember(service, c)
111	if err := c.projectMember.Error(); err != nil {
112		return err
113	}
114
115	c.projectMemberPage = graphqlProjectMembersPage(c)
116	if err := c.projectMemberPage.Error(); err != nil {
117		return err
118	}
119
120	c.apiKeyPage = graphqlAPIKeysPage(c)
121	if err := c.apiKeyPage.Error(); err != nil {
122		return err
123	}
124
125	c.project = graphqlProject(service, c)
126	if err := c.project.Error(); err != nil {
127		return err
128	}
129
130	c.projectsCursor = graphqlProjectsCursor()
131	if err := c.projectsCursor.Error(); err != nil {
132		return err
133	}
134
135	c.projectsPage = graphqlProjectsPage(c)
136	if err := c.projectsPage.Error(); err != nil {
137		return err
138	}
139
140	// root objects
141	c.query = rootQuery(service, mailService, c)
142	if err := c.query.Error(); err != nil {
143		return err
144	}
145
146	c.mutation = rootMutation(log, service, mailService, c)
147	if err := c.mutation.Error(); err != nil {
148		return err
149	}
150
151	return nil
152}
153
154// RootQuery returns instance of query *graphql.Object.
155func (c *TypeCreator) RootQuery() *graphql.Object {
156	return c.query
157}
158
159// RootMutation returns instance of mutation *graphql.Object.
160func (c *TypeCreator) RootMutation() *graphql.Object {
161	return c.mutation
162}
163