summaryrefslogtreecommitdiff
path: root/routes.js
diff options
context:
space:
mode:
authorRaphael Kabo <mail@raphaelkabo.com>2022-04-25 19:03:24 +0100
committerRaphael Kabo <mail@raphaelkabo.com>2022-04-25 19:03:24 +0100
commit1c8348d553988f5474c8d7896c2804dc1d62159a (patch)
tree16990fae56e848e430312c2238be89268f937a75 /routes.js
parent168c2430e1e727429b76871cc32a9951e4391658 (diff)
feat: Add subscribe to group functionality
Diffstat (limited to 'routes.js')
-rwxr-xr-xroutes.js118
1 files changed, 118 insertions, 0 deletions
diff --git a/routes.js b/routes.js
index 00823cb..542cd65 100755
--- a/routes.js
+++ b/routes.js
@@ -741,6 +741,46 @@ router.post('/newevent', async (req, res) => {
}
});
}
+ // If the event was added to a group, send an email to any group
+ // subscribers
+ if (event.eventGroup && sendEmails) {
+ EventGroup.findOne({ _id: event.eventGroup._id })
+ .then((eventGroup) => {
+ const subscribers = eventGroup.subscribers.reduce((acc, current) => {
+ if (acc.includes(current.email)) {
+ return acc;
+ }
+ return [ current.email, ...acc ];
+ }, []);
+ subscribers.forEach(emailAddress => {
+ req.app.get('hbsInstance').renderView('./views/emails/eventgroupupdated.handlebars', { siteName, siteLogo, domain, eventID: req.params.eventID, eventGroupName: eventGroup.name, eventName: event.name, eventID: event.id, eventGroupID: eventGroup.id, emailAddress: encodeURIComponent(emailAddress), cache: true, layout: 'email.handlebars' }, function (err, html) {
+ const msg = {
+ to: emailAddress,
+ from: {
+ name: siteName,
+ email: contactEmail,
+ },
+ subject: `${siteName}: New event in ${eventGroup.name}`,
+ html,
+ };
+ switch (mailService) {
+ case 'sendgrid':
+ sgMail.send(msg).catch(e => {
+ console.error(e.toString());
+ res.status(500).end();
+ });
+ break;
+ case 'nodemailer':
+ nodemailerTransporter.sendMail(msg).catch(e => {
+ console.error(e.toString());
+ res.status(500).end();
+ });
+ break;
+ }
+ });
+ });
+ });
+ }
res.writeHead(302, {
'Location': '/' + eventID + '?e=' + editToken
});
@@ -1533,6 +1573,84 @@ router.post('/removeattendee/:eventID/:attendeeID', (req, res) => {
});
});
+/*
+ * Create an email subscription on an event group.
+ */
+router.post('/subscribe/:eventGroupID', (req, res) => {
+ const subscriber = {
+ email: req.body.emailAddress,
+ };
+ if (!subscriber.email) {
+ return res.sendStatus(500);
+ }
+
+ EventGroup.findOne(({
+ id: req.params.eventGroupID,
+ }))
+ .then((eventGroup) => {
+ if (!eventGroup) {
+ return res.sendStatus(404);
+ }
+ eventGroup.subscribers.push(subscriber);
+ eventGroup.save();
+ if (sendEmails) {
+ req.app.get('hbsInstance').renderView('./views/emails/subscribed.handlebars', { eventGroupName: eventGroup.name, eventGroupID: eventGroup.id, emailAddress: encodeURIComponent(subscriber.email), siteName, siteLogo, domain, cache: true, layout: 'email.handlebars' }, function (err, html) {
+ const msg = {
+ to: subscriber.email,
+ from: {
+ name: siteName,
+ email: contactEmail,
+ },
+ subject: `${siteName}: You have subscribed to an event group`,
+ html,
+ };
+ switch (mailService) {
+ case 'sendgrid':
+ sgMail.send(msg).catch(e => {
+ console.error(e.toString());
+ res.status(500).end();
+ });
+ break;
+ case 'nodemailer':
+ nodemailerTransporter.sendMail(msg).catch(e => {
+ console.error(e.toString());
+ res.status(500).end();
+ });
+ break;
+ }
+ });
+ }
+ return res.redirect(`/group/${eventGroup.id}`)
+ })
+ .catch((error) => {
+ addToLog("addSubscription", "error", "Attempt to subscribe " + req.body.emailAddress + " to event group " + req.params.eventGroupID + " failed with error: " + error);
+ return res.sendStatus(500);
+ });
+});
+
+/*
+ * Delete an existing email subscription on an event group.
+ */
+router.get('/unsubscribe/:eventGroupID', (req, res) => {
+ const email = req.query.email;
+ console.log(email);
+ if (!email) {
+ return res.sendStatus(500);
+ }
+
+ EventGroup.update(
+ { id: req.params.eventGroupID },
+ { $pull: { subscribers: { email } } }
+ )
+ .then(response => {
+ return res.redirect('/');
+ })
+ .catch((error) => {
+ addToLog("removeSubscription", "error", "Attempt to unsubscribe " + req.query.email + " from event group " + req.params.eventGroupID + " failed with error: " + error);
+ return res.sendStatus(500);
+ });
+});
+
router.post('/post/comment/:eventID', (req, res) => {
let commentID = nanoid();
const newComment = {