Vulcan/packages/vulcan-newsletter/lib/server/mutations.js

55 lines
2.2 KiB
JavaScript
Raw Normal View History

import Newsletters from "../modules/collection.js";
2017-03-23 16:27:59 +09:00
import Users from 'meteor/vulcan:users';
2018-02-18 15:26:59 +09:00
import { addGraphQLMutation, addGraphQLResolvers, Utils, getSetting, Connectors } from 'meteor/vulcan:core';
const database = getSetting('database', 'mongo');
2017-07-13 17:37:59 +09:00
addGraphQLMutation('sendNewsletter : JSON');
addGraphQLMutation('testNewsletter : JSON');
addGraphQLMutation('addUserNewsletter(userId: String) : JSON');
addGraphQLMutation('addEmailNewsletter(email: String) : JSON');
addGraphQLMutation('removeUserNewsletter(userId: String) : JSON');
const resolver = {
Mutation: {
2018-02-18 15:26:59 +09:00
async sendNewsletter(root, args, context) {
2017-01-20 14:12:59 +09:00
if(context.currentUser && Users.isAdminById(context.currentUser._id)) {
2018-02-18 15:26:59 +09:00
return await Newsletters.send();
2017-01-20 14:12:59 +09:00
} else {
throw new Error(Utils.encodeIntlError({id: "app.noPermission"}));
2017-01-20 14:12:59 +09:00
}
},
2018-02-18 15:26:59 +09:00
async testNewsletter(root, args, context) {
2017-01-20 14:12:59 +09:00
if(context.currentUser && Users.isAdminById(context.currentUser._id))
2018-02-18 15:26:59 +09:00
return await Newsletters.send(true);
},
2018-02-18 15:26:59 +09:00
async addUserNewsletter(root, {userId}, context) {
const currentUser = context.currentUser;
2018-02-18 15:26:59 +09:00
const user = await Connectors[database].get(Users, userId);
if (!user || !Users.options.mutations.edit.check(currentUser, user)) {
throw new Error(Utils.encodeIntlError({id: "app.noPermission"}));
}
2018-02-18 15:26:59 +09:00
return await Newsletters.subscribeUser(user, false);
},
2018-02-18 15:26:59 +09:00
async addEmailNewsletter(root, {email}, context) {
return await Newsletters.subscribeEmail(email, true);
},
2018-02-18 15:26:59 +09:00
async removeUserNewsletter(root, { userId }, context) {
const currentUser = context.currentUser;
2018-02-18 15:26:59 +09:00
const user = await Connectors[database].get(Users, userId);
if (!user || !Users.options.mutations.edit.check(currentUser, user)) {
throw new Error(Utils.encodeIntlError({id: "app.noPermission"}));
}
try {
2018-02-18 15:26:59 +09:00
return await Newsletters.unsubscribeUser(user);
} catch (error) {
const errorMessage = error.message.includes('subscription-failed') ? Utils.encodeIntlError({id: "newsletter.subscription_failed"}) : error.message
throw new Error(errorMessage);
}
},
},
};
2017-07-13 17:37:59 +09:00
addGraphQLResolvers(resolver);