summaryrefslogtreecommitdiffstats
path: root/backend/src/resolvers/Mutation.js
diff options
context:
space:
mode:
Diffstat (limited to 'backend/src/resolvers/Mutation.js')
-rw-r--r--backend/src/resolvers/Mutation.js104
1 files changed, 104 insertions, 0 deletions
diff --git a/backend/src/resolvers/Mutation.js b/backend/src/resolvers/Mutation.js
new file mode 100644
index 0000000..2796cf8
--- /dev/null
+++ b/backend/src/resolvers/Mutation.js
@@ -0,0 +1,104 @@
+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
+ createItem: forwardTo('db'),
+ deleteItem: forwardTo('db'),
+ 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;