diff options
Diffstat (limited to 'backend/src/resolvers/Mutation.js')
| -rw-r--r-- | backend/src/resolvers/Mutation.js | 104 |
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; |
