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
|
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const { forwardTo } = require('prisma-binding');
const { getUserId, Context } = require('../utils');
const mutations = {
// Signup Mutations
async signup(parent, args, ctx, info) {
const password = await bcrypt.hash(args.password, 10);
const user = await ctx.db.mutation.createUser({
data: { ...args, password },
});
return {
token: jwt.sign({ userId: user.id }, process.env.APP_SECRET),
user,
};
},
async login(parent, { email, password }, ctx, info) {
const user = await ctx.db.query.user({ where: { email } });
if (!user) {
throw new Error(`No such user found for email: ${email}`);
}
const valid = await bcrypt.compare(password, user.password);
if (!valid) {
throw new Error('Invalid password');
}
return {
token: jwt.sign({ userId: user.id }, process.env.APP_SECRET),
user,
};
},
// Creation of Post Mutations
async createItem(parent, args, ctx, info) {
return ctx.db.mutation.createItem({ data: { ...args } }, info);
},
async deleteItem(parent, args, ctx, info) {
console.log('gonna delete one');
console.log(args);
return ctx.db.mutation.deleteItem(
{
where: {
id: args.id,
},
},
info
);
},
async updateItem(parent, args, ctx, info) {
console.log('Updating an item');
const updates = { ...args };
delete updates.id;
return ctx.db.mutation.updateItem({
where: { id: args.id },
data: {
...updates,
},
});
},
async createDraft(parent, { title, text }, ctx, info) {
// const userId = getUserId(ctx);
const userId = getUserId(ctx);
return ctx.db.mutation.createPost(
{
data: {
title,
text,
isPublished: false,
author: {
connect: { id: userId },
},
},
},
info
);
},
async publish(parent, { id }, ctx, info) {
const userId = getUserId(ctx);
const postExists = await ctx.db.exists.Post({
id,
author: { id: userId },
});
if (!postExists) {
throw new Error(`Post not found or you're not the author`);
}
return ctx.db.mutation.updatePost(
{
where: { id },
data: { isPublished: true },
},
info
);
},
async deletePost(parent, { id }, ctx, info) {
const userId = getUserId(ctx);
const postExists = await ctx.db.exists.Post({
id,
author: { id: userId },
});
if (!postExists) {
throw new Error(`Post not found or you're not the author`);
}
return ctx.db.mutation.deletePost({ where: { id } });
},
// Wes Added this brand new one!
async updatePost(parent, args, ctx, info) {
const updatedPost = await ctx.db.mutation.updatePost({
where: { id: args.id },
data: {
title: args.title,
text: args.text,
},
});
console.log(updatedPost);
return updatedPost;
},
};
module.exports = mutations;
|