-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathresolvers.ts
More file actions
139 lines (120 loc) · 4.97 KB
/
resolvers.ts
File metadata and controls
139 lines (120 loc) · 4.97 KB
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
import { neo4jgraphql } from "./executor";
import driver from "./server";
const resolvers = {
Query: {
getUser(object, args, ctx, resolveInfo) {
return neo4jgraphql(object, args, ctx, resolveInfo);
},
allUsers(object, args, ctx, resolveInfo) {
return neo4jgraphql(object, args, ctx, resolveInfo);
},
tagById(object, args, ctx, resolveInfo) {
let matcher = `id(tag) = ${args.id}`;
return neo4jgraphql(object, args, ctx, resolveInfo, matcher);
},
tagsByUsername(object, args, ctx, resolveInfo) {
return neo4jgraphql(object, args, ctx, resolveInfo);
},
tagsByLocation(object, args, ctx, resolveInfo) {
let minLat = args.lat - args.radius;
let maxLat = args.lat + args.radius;
let minLon = args.lon - args.radius;
let maxLon = args.lon + args.radius;
let matcher = `${minLat} < tag.lat AND tag.lat < ${maxLat}
AND ${minLon} < tag.lon AND tag.lon < ${maxLon}`;
return neo4jgraphql(object, args, ctx, resolveInfo, matcher);
}
},
Mutation: {
createUser(object, args, ctx, resolveInfo) {
console.log("Creating a user");
console.log(args.username);
return neo4jgraphql(object, args, ctx, resolveInfo).then(existingUser => {
if(!existingUser) {
console.log("The user did not exist");
let params = {
username: args.username,
name: (args.name ? args.name : args.username),
picture: (args.picture ? args.picture : "")
};
let query = `CREATE (user:User { username: $username, name: $name, picture: $picture }) RETURN user`;
return driver.session().run(query, params).then(result => {
return result.records[0].get('user').properties;
});
} else {
console.log("The user already exists in the system");
throw new Error("A user with that username already exists");
}
})
},
createTag(object, args, ctx, resolveInfo) {
console.log("Creating a tag");
console.log(args);
let query = `
CREATE (tag:Tag {
username: $username,
title: $title,
text: $text,
lat: $lat,
lon: $lon,
ele: $ele,
dtg: $dtg
})
WITH tag
MATCH (user:User) WHERE user.username = "${args.username}"
WITH tag, user
CREATE (user)-[:TAGGED]->(tag)
CREATE (tag)-[:TAGGED_BY]->(user)
RETURN tag
`;
if (!args.title) throw new Error("Missing Title");
if (!args.text) throw new Error("Missing Text");
if (!args.username) throw new Error("Missing Username");
return userExists(args.username).then(user => {
if(!user) throw new Error("User " + args.username + " does not exist");
return driver.session().run(query, args).then(result => {
return neo4jgraphql(object, args, ctx, resolveInfo, undefined);
});
});
},
removeTag(object, args, ctx, resolveInfo) {
console.log("Removing a tag");
console.log(args);
let query = `
MATCH (tag:Tag)
WHERE id(tag) = ${args.id}
DETACH DELETE tag
`;
return driver.session().run(query, args).then(result => {
let matcher = `id(tag) = ${args.id}`;
return neo4jgraphql(object, args, ctx, resolveInfo, matcher);
})
},
updateTag(object, args, ctx, resolveInfo) {
console.log("Updating a tag");
console.log(args);
let query = `
MATCH (tag:Tag)
WHERE id(tag) = $id
WITH tag
${args.title ? "SET tag.title = $title" : ""}
${args.text ? "SET tag.text = $text" : ""}
RETURN tag
`;
console.log("Update Query:", query);
return driver.session().run(query, args).then(result => {
let matcher = `id(tag) = ${args.id}`;
return neo4jgraphql(object, args, ctx, resolveInfo, matcher);
});
}
}
};
function userExists(username) {
let params = {username: username};
let query = `MATCH (user:User) WHERE user.username = $username RETURN user`;
return driver.session().run(query, params).then(result => {
console.log("User Exists?", result.records[0]);
return result.records[0];
});
}
export default resolvers;