-
Notifications
You must be signed in to change notification settings - Fork 89
/
Copy pathMutation.java
48 lines (38 loc) · 1.64 KB
/
Mutation.java
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
package com.howtographql.hackernews;
import com.coxautodev.graphql.tools.GraphQLRootResolver;
import java.time.Instant;
import java.time.ZoneOffset;
import graphql.GraphQLException;
import graphql.schema.DataFetchingEnvironment;
/**
* Mutation root
*/
public class Mutation implements GraphQLRootResolver {
private final LinkRepository linkRepository;
private final UserRepository userRepository;
private final VoteRepository voteRepository;
public Mutation(LinkRepository linkRepository, UserRepository userRepository, VoteRepository voteRepository) {
this.linkRepository = linkRepository;
this.userRepository = userRepository;
this.voteRepository = voteRepository;
}
public Link createLink(String url, String description, DataFetchingEnvironment env) {
AuthContext context = env.getContext();
Link newLink = new Link(url, description, context.getUser().getId());
return linkRepository.saveLink(newLink);
}
public User createUser(String name, AuthData auth) {
User newUser = new User(name, auth.getEmail(), auth.getPassword());
return userRepository.saveUser(newUser);
}
public SigninPayload signinUser(AuthData auth) {
User user = userRepository.findByEmail(auth.getEmail());
if (user.getPassword().equals(auth.getPassword())) {
return new SigninPayload(user.getId(), user);
}
throw new GraphQLException("Invalid credentials");
}
public Vote createVote(String linkId, String userId) {
return voteRepository.saveVote(new Vote(Instant.now().atZone(ZoneOffset.UTC), userId, linkId));
}
}