From 0907c1c1b5843732e22f22386d1cc91a51fa5bfb Mon Sep 17 00:00:00 2001
From: Adolfo Reyna
Date: Tue, 14 Sep 2021 22:06:37 -0700
Subject: [PATCH] notification to subscribers on groups
---
mongoDB.js | 9 +++++++
notifications.js | 68 +++++++++++++++++++++++++++++++++++-------------
2 files changed, 59 insertions(+), 18 deletions(-)
diff --git a/mongoDB.js b/mongoDB.js
index 4c1ccd3..3f0969d 100644
--- a/mongoDB.js
+++ b/mongoDB.js
@@ -39,6 +39,15 @@ const getDB = new Promise((resolve, reject) => {
return DB.usersCol.findOne({ _id });
}
+ let usernamesCache = {}
+ DB.getUsernameByIdCache = async (userid)=>{
+ if(usernamesCache[userid]) return usernamesCache[userid];
+ const _id = new mongo.ObjectID(userid);
+ let user = await DB.usersCol.findOne({ _id });
+ usernamesCache[userid] = user.username;
+ return usernamesCache[userid];
+ }
+
DB.newUser = (userInformation)=>{
return DB.usersCol.insertOne(userInformation).catch((err)=>{
console.log(err);
diff --git a/notifications.js b/notifications.js
index 43c75cf..5c99a72 100644
--- a/notifications.js
+++ b/notifications.js
@@ -3,36 +3,33 @@ const DBGetter = require("./mongoDB.js");
const Notifications = {
async sendEmail(to, subject, html) {
- // create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: "mail.emmint.com",
port: 465,
- secure: true, // true for 465, false for other ports
+ secure: true,
auth: {
- user: "noreply@emmint.com", // generated ethereal user
- pass: process.env.EMAILPASS, // generated ethereal password
+ user: "noreply@emmint.com",
+ pass: process.env.EMAILPASS,
},
});
- // send mail with defined transport object
let info = await transporter.sendMail({
- from: '"EMI Social" Hello ${profile.profile.firstName},
You got a comment on your post:
@@ -45,7 +42,7 @@ const Notifications = {
Comment:
-${Message}
+${message}
— ${senderProfile.profile.firstName} ${senderProfile.profile.lastName}
@@ -54,21 +51,56 @@ const Notifications = {
Blessings
`;
- this.sendEmail(user.username, subject, message)
+ this.sendEmail(user.username, subject, html)
},
- async youGotANewPost(toProfileId, whoPostedId, Message){
+ 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];
+ 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:
+
+
+${message}
+
+— ${senderProfile.profile.firstName} ${senderProfile.profile.lastName}
+
+Check it on the site
+
+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 message = `
+ let html = `
Hello ${profile.profile.firstName},
You got a new post:
-${Message}
+${message}
— ${senderProfile.profile.firstName} ${senderProfile.profile.lastName}
@@ -77,7 +109,7 @@ const Notifications = {
Blessings
`;
- this.sendEmail(user.username, subject, message)
+ this.sendEmail(user.username, subject, html)
}
}