-
Notifications
You must be signed in to change notification settings - Fork 0
/
UserSchema.ts
125 lines (121 loc) · 3.11 KB
/
UserSchema.ts
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
import {
GraphQLFieldConfigMap,
GraphQLID,
GraphQLInputObjectType,
GraphQLList,
GraphQLNonNull,
GraphQLObjectType,
GraphQLString
} from 'graphql';
import {GenderType} from './GenderType';
import {UserDAO} from '../neo4j/UserDAO';
/* Defining graphql User objectType, written in graphQL as:
type User {
id: ID!
username: String
email: String
gender: GenderType
firstName: String
lastName: String
}
*/
export const User: GraphQLObjectType = new GraphQLObjectType({
name : 'User',
fields: {
id : {
type : GraphQLNonNull(GraphQLID),
description: 'user identifier.'
},
username : {
type : GraphQLString,
description: 'name of user.'
},
email : {
type : GraphQLString,
description: "email of user."
},
gender : {
type : GenderType,
description: 'gender of user.'
},
firstName: {
type : GraphQLString,
description: 'firstName of user.'
},
lastName : {
type : GraphQLString,
description: 'lastName of user.'
},
}
});
// GraphQLInputObjectType used in mutations
export const UserInput: GraphQLInputObjectType = new GraphQLInputObjectType({
name : 'UserInput',
fields: {
username : {type: GraphQLString},
email : {type: GraphQLString},
gender : {type: GenderType},
firstName: {type: GraphQLString},
lastName : {type: GraphQLString}
}
});
// GraphQL queries: user(id), users
export const UserQueries: GraphQLFieldConfigMap<string, string> = {
user : {
type : User,
args : {
id: {type: GraphQLID}
},
resolve: async (root, args) =>
{
const {id} = args;
return await UserDAO.get(id);
}
},
users: {
type : new GraphQLList(User),
resolve: async () =>
{
return await UserDAO.getAll();
}
}
};
// GraphQL mutations: createUser(props), updateUser(id, props), deleteUser(id)
export const UserMutation: GraphQLFieldConfigMap<string, string> = {
createUser: {
type : User,
args : {
props: {type: UserInput}
},
resolve: async (root, args) =>
{
const {props} = args;
return await UserDAO.create(props);
}
},
updateUser: {
type : User,
args : {
id : {type: GraphQLID},
props: {type: UserInput}
},
resolve: async (root, args) =>
{
const {id} = args;
const {props} = args;
return await UserDAO.update(id, props);
}
},
deleteUser: {
type : GraphQLString,
args : {
id: {type: GraphQLID}
},
resolve: async (root, args) =>
{
const {id} = args;
await UserDAO.delete(id);
return `Success message for delete procedure with id: ${id}`;
}
}
};