import { newMutation, editMutation, removeMutation, addGraphQLMutation, Utils } from 'meteor/vulcan:core'; import Users from 'meteor/vulcan:users'; const mutations = { new: { name: 'postsNew', check(user, document) { if (!user) return false; return Users.canDo(user, 'posts.new'); }, mutation(root, {document}, context) { Utils.performCheck(this.check, context.currentUser, document); return newMutation({ collection: context.Posts, document: document, currentUser: context.currentUser, validate: true, context, }); }, }, edit: { name: 'postsEdit', check(user, document) { if (!user || !document) return false; return Users.owns(user, document) ? Users.canDo(user, 'posts.edit.own') : Users.canDo(user, `posts.edit.all`); }, mutation(root, {documentId, set, unset}, context) { const document = context.Posts.findOne(documentId); Utils.performCheck(this.check, context.currentUser, document); return editMutation({ collection: context.Posts, documentId: documentId, set: set, unset: unset, currentUser: context.currentUser, validate: true, context, }); }, }, remove: { name: 'postsRemove', check(user, document) { if (!user || !document) return false; return Users.owns(user, document) ? Users.canDo(user, 'posts.remove.own') : Users.canDo(user, `posts.remove.all`); }, mutation(root, {documentId}, context) { const document = context.Posts.findOne(documentId); Utils.performCheck(this.check, context.currentUser, document); return removeMutation({ collection: context.Posts, documentId: documentId, currentUser: context.currentUser, validate: true, context, }); }, }, }; addGraphQLMutation('increasePostViewCount(postId: String): Float'); export default mutations;