From fa1043ea3ca0a29cd45c90d44038101c286265fa Mon Sep 17 00:00:00 2001 From: Adolfo Reyna Date: Sun, 26 Sep 2021 17:53:10 -0700 Subject: [PATCH] refactor notifications to add internal notifications --- notifications.js | 188 +++++++++++++++++++++++++---------------------- 1 file changed, 101 insertions(+), 87 deletions(-) diff --git a/notifications.js b/notifications.js index 066913c..8274307 100644 --- a/notifications.js +++ b/notifications.js @@ -1,52 +1,38 @@ const nodemailer = require("nodemailer"); const DBGetter = require("./mongoDB.js"); -const Notifications = { - async sendEmail(to, subject, html) { - let transporter = nodemailer.createTransport({ - host: "mail.emmint.com", - port: 465, - secure: true, - auth: { - user: "noreply@emmint.com", - pass: process.env.EMAILPASS, - }, - }); - - let info = await transporter.sendMail({ - from: '"EMI Social" { + let transporter = nodemailer.createTransport({ + host: "mail.emmint.com", + port: 465, + secure: true, + auth: { + user: "noreply@emmint.com", + pass: process.env.EMAILPASS, }, - async yourBookmarkedPostGotAComment(post, whoPostedId, message){ - const DB = await DBGetter.getDB; - let subscribedPromise = post.bookmarks.map((profileid)=>{ - return DB.getProfileCache(profileid); - }); - let subscribed = await Promise.all(subscribedPromise); - let usersPromise = subscribed.map((profile)=>{ - return DB.getUsernameByIdCache(profile.userid); - }); - let users = await Promise.all(usersPromise); - const senderProfile = await DB.getProfileCache(whoPostedId); - const postPprofile = await DB.getProfileCache(post.profileid); - users.forEach((user, index)=>{ - let profile = subscribed[index]; - if(profile._id == senderProfile._id) return 0; - let subject = senderProfile.profile.firstName + " commented on the post you follow"; - let html = ` -

Hello ${profile.profile.firstName},

+ }); + + let info = await transporter.sendMail({ + from: '"EMI Social" { + let subject = senderProfile.profile.firstName + " commented on the post you follow"; + let html = ` +

Hello ${bookedProfile.profile.firstName},

One of the post you bookmarked has a new comment:

${post.content}

-
— ${postPprofile.profile.firstName} ${postPprofile.profile.lastName}
+
— ${postProfile.profile.firstName} ${postProfile.profile.lastName}

Comment:

@@ -60,22 +46,12 @@ const Notifications = {

Blessings

`; - this.sendEmail(user, subject, html) - }) - }, - async youGotANewPostComment(postId, whoPostedId, message){ - const DB = await DBGetter.getDB; - const post = await DB.getPost(postId) - if(post.bookmarks){ - //send notification to boorkmaked profiles - this.yourBookmarkedPostGotAComment(post, whoPostedId, message) - } - const profile = await DB.getProfileCache(post.profileid); - if(profile.isCourse) return 0; //Course owners do not need to receive notifs - const user = await DB.getUserById(profile.userid); - const senderProfile = await DB.getProfileCache(whoPostedId); - let subject = senderProfile.profile.firstName + " comment on your post"; - let html = ` + sendEmail(userEmail, subject, html); +}; + +const youGotANewPostCommentTemplate = (post, userEmail, profile, senderProfile, message) => { + let subject = senderProfile.profile.firstName + " comment on your post"; + let html = `

Hello ${profile.profile.firstName},

You got a comment on your post:

@@ -97,24 +73,12 @@ const Notifications = {

Blessings

`; - this.sendEmail(user.username, subject, html) - }, - async yourGroupGotANewPost(groupProfile, whoPostedId, message){ - const DB = await DBGetter.getDB; - let subscribedPromise = Object.keys(groupProfile.subscribed).map((profileid)=>{ - return DB.getProfileCache(profileid); - }); - let subscribed = await Promise.all(subscribedPromise); - let usersPromise = subscribed.map((profile)=>{ - return DB.getUsernameByIdCache(profile.userid); - }); - let users = await Promise.all(usersPromise); - const senderProfile = await DB.getProfileCache(whoPostedId); - users.forEach((user, index)=>{ - let profile = subscribed[index]; - if(profile._id == senderProfile._id) return 0; - let subject = senderProfile.profile.firstName + " posted on one of the groups you follow"; - let html = ` + return sendEmail(userEmail, subject, html); +}; + +const yourGroupGotANewPostTemplate = (groupProfile, userEmail, profile, senderProfile, message) => { + let subject = senderProfile.profile.firstName + " posted on one of the groups you follow"; + let html = `

Hello ${profile.profile.firstName},

${groupProfile.profile.firstName} ${groupProfile.profile.lastName} have new post:

@@ -129,19 +93,12 @@ const Notifications = {

Blessings

`; - this.sendEmail(user, subject, html) - }) - }, - async youGotANewPost(toProfileId, whoPostedId, message){ - const DB = await DBGetter.getDB; - const profile = await DB.getProfileCache(toProfileId); - if(profile.isGroup){ - return this.yourGroupGotANewPost(profile, whoPostedId, message); - } - const user = await DB.getUserById(profile.userid); - const senderProfile = await DB.getProfileCache(whoPostedId); - let subject = senderProfile.profile.firstName + " post on your profile"; - let html = ` + return sendEmail(userEmail, subject, html); +}; + +const youGotANewPostTemplate = (profile, userEmail, senderProfile, message) => { + let subject = senderProfile.profile.firstName + " post on your profile"; + let html = `

Hello ${profile.profile.firstName},

You got a new post:

@@ -156,7 +113,64 @@ const Notifications = {

Blessings

`; - this.sendEmail(user.username, subject, html) + sendEmail(userEmail, subject, html) +} + +const Notifications = { + sendEmail, + async yourBookmarkedPostGotAComment(post, postProfile, senderProfile, message) { + const DB = await DBGetter.getDB; + const subscribedPromise = post.bookmarks.map((profileid) => { + return DB.getProfileCache(profileid); + }); + const subscribed = await Promise.all(subscribedPromise); + const usersPromise = subscribed.map((profile) => { + return DB.getUsernameByIdCache(profile.userid); + }); + const usersEmails = await Promise.all(usersPromise); + usersEmails.forEach((userEmail, index) => { + const bookedProfile = subscribed[index]; + if (bookedProfile._id == senderProfile._id) return 0; + yourBookmarkedPostGotACommentTemplate(post, userEmail, postProfile, senderProfile, bookedProfile, message); + }); + }, + async youGotANewPostComment(postId, whoPostedId, message) { + const DB = await DBGetter.getDB; + const post = await DB.getPost(postId); + const postProfile = await DB.getProfileCache(post.profileid); + const senderProfile = await DB.getProfileCache(whoPostedId); + const userEmail = await DB.getUsernameByIdCache(postProfile.userid); + if (post.bookmarks) { + this.yourBookmarkedPostGotAComment(post, postProfile, senderProfile, message) + } + if (postProfile.isCourse || senderProfile._id == postProfile._id) return 0; //Course owners do not need to receive notifs + return youGotANewPostCommentTemplate(post, userEmail, postProfile, senderProfile, message); + }, + async yourGroupGotANewPost(groupProfile, senderProfile, message) { + const DB = await DBGetter.getDB; + let subscribedPromise = Object.keys(groupProfile.subscribed).map((profileid) => { + return DB.getProfileCache(profileid); + }); + let subscribed = await Promise.all(subscribedPromise); + let usersPromise = subscribed.map((profile) => { + return DB.getUsernameByIdCache(profile.userid); + }); + let users = await Promise.all(usersPromise); + users.forEach((userEmail, index) => { + let userProfile = subscribed[index]; //who is this email sending to + if (userProfile._id == senderProfile._id) return 0; //avoid sending self notifications + yourGroupGotANewPostTemplate(groupProfile, userEmail, userProfile, senderProfile, message); + }); + }, + async youGotANewPost(toProfileId, whoPostedId, message) { + const DB = await DBGetter.getDB; + const profile = await DB.getProfileCache(toProfileId); + const user = await DB.getUserById(profile.userid); + const senderProfile = await DB.getProfileCache(whoPostedId); + if (profile.isGroup) { + return this.yourGroupGotANewPost(profile, senderProfile, message); + } + return youGotANewPostTemplate(profile, user.username, senderProfile, message); } }