@@ -8,44 +8,46 @@ const {
8
8
GraphQLInt,
9
9
GraphQLList,
10
10
GraphQLScalarType,
11
- GraphQLEnumType
11
+ GraphQLEnumType,
12
+ GraphQLInputObjectType
12
13
} = require ( 'graphql' ) ;
13
14
14
15
const userProvider = require ( '../data-providers/user-provider.js' ) ;
16
+ const addressProvider = require ( '../data-providers/address-provider.js' ) ;
15
17
18
+ const AddressType = new GraphQLObjectType ( {
19
+ name : 'Address' ,
20
+ description : 'Address of the users.' ,
21
+ type : GraphQLObjectType ,
22
+ fields : ( ) => {
23
+ return {
24
+ id : { type : GraphQLID } ,
25
+ details : { type : GraphQLString } ,
26
+ city : { type : GraphQLString } ,
27
+ user : {
28
+ type : UserType ,
29
+ description : 'Owner of the Address' ,
30
+ resolve : ( args ) => userProvider . getUser ( args . userid )
31
+ }
32
+ }
33
+ }
34
+ } )
16
35
17
- // const schema = buildSchema(`
18
- // type User {
19
- // id: ID
20
- // name: String!
21
- // email: String!
22
- // password: String!
23
- // address: [Address]
24
- // }
25
-
26
- // type Address {
27
- // id: ID
28
- // detail: String!
29
- // city: String!
30
- // user: User!
31
- // }
32
-
33
- // type Query {
34
- // getUsers(id: String): [User]
35
- // getAddressByUser(userid: String!): [Address]
36
- // }
37
- // `);
38
-
39
- let UserType = new GraphQLObjectType ( {
36
+ const UserType = new GraphQLObjectType ( {
40
37
name : 'User' ,
41
- description : 'user api ' ,
38
+ description : 'Users of the application ' ,
42
39
type : GraphQLObjectType ,
43
40
fields : ( ) => {
44
41
return {
45
- id : { type : GraphQLString } ,
42
+ id : { type : GraphQLID } ,
46
43
name : { type : GraphQLString } ,
47
44
email : { type : GraphQLString } ,
48
- password : { type : GraphQLString }
45
+ password : { type : GraphQLString } ,
46
+ addresses : {
47
+ type : new GraphQLList ( AddressType ) ,
48
+ description : 'List of addresses of the user.' ,
49
+ resolve : ( args ) => addressProvider . getAddress ( args . id )
50
+ }
49
51
} ;
50
52
}
51
53
} ) ;
@@ -64,10 +66,24 @@ const FIELDS = {
64
66
args : {
65
67
id : {
66
68
description : 'User id' ,
67
- type : new GraphQLNonNull ( GraphQLString )
69
+ type : GraphQLString
68
70
} ,
69
71
} ,
70
- resolve : ( _ , { id, identity } ) => userProvider . getUsers ( id )
72
+ resolve : ( _ , { id } ) => userProvider . getUser ( id )
73
+ } ,
74
+ users : {
75
+ type : new GraphQLList ( UserType ) ,
76
+ resolve : ( _ ) => userProvider . getAllUsers ( )
77
+ } ,
78
+ addresses : {
79
+ type : new GraphQLList ( AddressType ) ,
80
+ args : {
81
+ userid : {
82
+ description : 'User id.' ,
83
+ type : new GraphQLNonNull ( GraphQLString )
84
+ }
85
+ } ,
86
+ resolve : ( _ , { userid } ) => addressProvider . getAddress ( userid )
71
87
}
72
88
} ;
73
89
@@ -77,4 +93,39 @@ const queryObjectType = new GraphQLObjectType({
77
93
fields : ( ) => FIELDS
78
94
} ) ;
79
95
80
- module . exports = { QueryObjectType : queryObjectType } ;
96
+ const MUTATION_FIELDS = {
97
+ createUser : {
98
+ type : UserType ,
99
+ args : {
100
+ userInput : {
101
+ type : UserType
102
+ } ,
103
+ addressInput : {
104
+ type : AddressType )
105
+ }
106
+ } ,
107
+ resolver : ( source , args ) => {
108
+ return userProvider . createUser ( args . name , args . email , args . password )
109
+ . then ( ( user ) => {
110
+ if ( args . address ) {
111
+ addressProvider . createAddress ( user . id , args . address . detail , args . address . city ) ;
112
+ }
113
+ return user ;
114
+ } ) ;
115
+ }
116
+ }
117
+ // , createAddress: {
118
+
119
+ // }
120
+ } ;
121
+
122
+ const mutationType = new GraphQLObjectType ( {
123
+ name : 'ApplicationMutationAPI' ,
124
+ description : 'APIs for users to mutation' ,
125
+ fields : ( ) => MUTATION_FIELDS
126
+ } ) ;
127
+
128
+ module . exports = {
129
+ QueryObjectType : queryObjectType ,
130
+ MutationsType : mutationType
131
+ } ;
0 commit comments