Enhance session and profile handling with validation and error handling improvements
This commit is contained in:
@@ -15,7 +15,7 @@ userDB = (DB) => {
|
||||
DB.removeProfile = (profileid) => {
|
||||
const _id = DB.ObjectID(profileid);
|
||||
if (userProfileCache[profileid]) delete userProfileCache[profileid];
|
||||
return DB.profileCols.deleteOne({_id}).catch((err)=>{
|
||||
return DB.profileCols.deleteOne({ _id }).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
@@ -23,7 +23,7 @@ userDB = (DB) => {
|
||||
|
||||
DB.updateProfile = async (profileid, profileObj) => {
|
||||
let tempProfile = profileObj.toObj();
|
||||
const query = {_id: profileid};
|
||||
const query = { _id: profileid };
|
||||
const update = {
|
||||
$set: {
|
||||
profile: tempProfile.profile,
|
||||
@@ -39,8 +39,8 @@ userDB = (DB) => {
|
||||
|
||||
DB.getProfile = async (profileId) => {
|
||||
//if (userProfileCache[profileId] && !userProfileCache[profileId].isGroup) return userProfileCache[profileId];
|
||||
if(!profileId) return false;
|
||||
try{
|
||||
if (!profileId) return false;
|
||||
try {
|
||||
const _id = DB.ObjectID(profileId);
|
||||
let r = await DB.profileCols.findOne({ _id }).catch((err) => {
|
||||
console.log(err);
|
||||
@@ -48,7 +48,7 @@ userDB = (DB) => {
|
||||
});
|
||||
if (r) userProfileCache[profileId] = r;
|
||||
return r;
|
||||
}catch(_){
|
||||
} catch (_) {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
@@ -56,16 +56,16 @@ userDB = (DB) => {
|
||||
DB.getPopularProfiles = async (limit = 10) => {
|
||||
return DB.profileCols.aggregate([
|
||||
{
|
||||
$match: {isGroup: {$ne: true}}
|
||||
$match: { isGroup: { $ne: true } }
|
||||
},
|
||||
{
|
||||
$addFields: { subscribed_count: {$size: { "$ifNull": [ "$following", [] ] } } }
|
||||
},
|
||||
{
|
||||
$sort: {"subscribed_count":-1}
|
||||
$addFields: { subscribed_count: { $size: { "$ifNull": ["$following", []] } } }
|
||||
},
|
||||
{
|
||||
$project: {_id: 1, "subscribed_count": 1}
|
||||
$sort: { "subscribed_count": -1 }
|
||||
},
|
||||
{
|
||||
$project: { _id: 1, "subscribed_count": 1 }
|
||||
}
|
||||
]).limit(limit).toArray().catch((err) => {
|
||||
console.log(err);
|
||||
@@ -76,16 +76,16 @@ userDB = (DB) => {
|
||||
DB.getPopularGroups = async (limit = 10) => {
|
||||
return DB.profileCols.aggregate([
|
||||
{
|
||||
$match: {isGroup: true, isPrivate: {$ne: true}, isCourse: {$ne: true}}
|
||||
$match: { isGroup: true, isPrivate: { $ne: true }, isCourse: { $ne: true } }
|
||||
},
|
||||
{
|
||||
$addFields: { subscribed_count: {$size: { "$ifNull": [ {"$objectToArray" : "$subscribed"}, [] ] } } }
|
||||
},
|
||||
{
|
||||
$sort: {"subscribed_count":-1}
|
||||
$addFields: { subscribed_count: { $size: { "$ifNull": [{ "$objectToArray": "$subscribed" }, []] } } }
|
||||
},
|
||||
{
|
||||
$project: {_id: 1, "subscribed_count": 1}
|
||||
$sort: { "subscribed_count": -1 }
|
||||
},
|
||||
{
|
||||
$project: { _id: 1, "subscribed_count": 1 }
|
||||
}
|
||||
]).limit(limit).toArray().catch((err) => {
|
||||
console.log(err);
|
||||
@@ -95,19 +95,19 @@ userDB = (DB) => {
|
||||
|
||||
DB.getFriendsFriends = async (profileId, limit = 10) => {
|
||||
const profile = await DB.getProfile(profileId);
|
||||
if(!profile) return [];
|
||||
let ids = profile.following.map((id)=>DB.ObjectID(id));
|
||||
if (!profile) return [];
|
||||
let ids = profile.following.map((id) => DB.ObjectID(id));
|
||||
let alreadyFollowingMap = {};
|
||||
alreadyFollowingMap[profileId] = 1; //skip that profile
|
||||
profile.following.forEach(id => {
|
||||
if(!alreadyFollowingMap[id]) alreadyFollowingMap[id] = 1;
|
||||
if (!alreadyFollowingMap[id]) alreadyFollowingMap[id] = 1;
|
||||
})
|
||||
return DB.profileCols.find({_id:{$in: ids}}).project({following: 1}).limit(limit).toArray().then(profiles => {
|
||||
return DB.profileCols.find({ _id: { $in: ids } }).project({ following: 1 }).limit(limit).toArray().then(profiles => {
|
||||
let friendsOfFriendsMap = {};
|
||||
profiles.forEach(p => {
|
||||
p.following.forEach(followingId => {
|
||||
if(alreadyFollowingMap[followingId]) return 0;
|
||||
if(!friendsOfFriendsMap[followingId]) friendsOfFriendsMap[followingId] = 0;
|
||||
if (alreadyFollowingMap[followingId]) return 0;
|
||||
if (!friendsOfFriendsMap[followingId]) friendsOfFriendsMap[followingId] = 0;
|
||||
friendsOfFriendsMap[followingId] = friendsOfFriendsMap[followingId] + 1;
|
||||
});
|
||||
});
|
||||
@@ -124,29 +124,43 @@ userDB = (DB) => {
|
||||
return DB.getProfile(profileId);
|
||||
}
|
||||
|
||||
DB.getProfileCache = async (profileId) => {
|
||||
const cachedProfile = userProfileCache[profileId];
|
||||
if (cachedProfile?.isGroup === false) {
|
||||
return cachedProfile;
|
||||
}
|
||||
return await DB.getProfile(profileId);
|
||||
};
|
||||
|
||||
DB.searchProfile = async (queryStr) => {
|
||||
let regEx = new RegExp(queryStr, 'i');
|
||||
let query = {
|
||||
isGroup: false,
|
||||
isChat: {$ne: true},
|
||||
isChat: { $ne: true },
|
||||
$or: [
|
||||
{"profile.firstName": {
|
||||
$regex: regEx
|
||||
}},
|
||||
{"profile.lastName": {
|
||||
$regex: regEx
|
||||
}},
|
||||
{"profile.description": {
|
||||
$regex: regEx
|
||||
}},
|
||||
{
|
||||
"profile.firstName": {
|
||||
$regex: regEx
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile.lastName": {
|
||||
$regex: regEx
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile.description": {
|
||||
$regex: regEx
|
||||
}
|
||||
},
|
||||
]
|
||||
};
|
||||
let r = await DB.profileCols.find(queryStr ? query : {isGroup: false, isChat: {$ne: true}})
|
||||
.sort({ lastUpdate: -1 }).limit(20)
|
||||
.toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
let r = await DB.profileCols.find(queryStr ? query : { isGroup: false, isChat: { $ne: true } })
|
||||
.sort({ lastUpdate: -1 }).limit(20)
|
||||
.toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -154,45 +168,45 @@ userDB = (DB) => {
|
||||
const userid = DB.ObjectID(userId);
|
||||
return await DB.profileCols.find({ userid }).toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
return [];
|
||||
});
|
||||
}
|
||||
|
||||
DB.latestProfile = async (userId) => {
|
||||
const userid = DB.ObjectID(userId);
|
||||
let r = await DB.profileCols.find({ userid })
|
||||
.sort({ lastUpdate: -1 })
|
||||
.toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
.sort({ lastUpdate: -1 })
|
||||
.toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
let index = 0;
|
||||
while(r[index].isGroup || r[index].isChat) index += 1;
|
||||
while (r[index].isGroup || r[index].isChat) index += 1;
|
||||
if (r[index]) userProfileCache[r[index]._id] = r[index];
|
||||
return r[index];
|
||||
}
|
||||
|
||||
DB.followProfile = async (profileId, followProfileId)=>{
|
||||
DB.followProfile = async (profileId, followProfileId) => {
|
||||
const _id = DB.ObjectID(profileId);
|
||||
let update = {
|
||||
$addToSet:{
|
||||
$addToSet: {
|
||||
following: followProfileId + '' //converts to str
|
||||
}
|
||||
}
|
||||
}
|
||||
return DB.profileCols.updateOne({_id}, update).catch((err)=>{
|
||||
return DB.profileCols.updateOne({ _id }, update).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
DB.unfollowProfile = async (profileId, followProfileId)=>{
|
||||
DB.unfollowProfile = async (profileId, followProfileId) => {
|
||||
const _id = DB.ObjectID(profileId);
|
||||
let update = {
|
||||
$pull:{
|
||||
$pull: {
|
||||
following: followProfileId + '' //converts to str
|
||||
}
|
||||
}
|
||||
}
|
||||
return DB.profileCols.updateOne({_id}, update).catch((err)=>{
|
||||
return DB.profileCols.updateOne({ _id }, update).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
@@ -200,7 +214,7 @@ userDB = (DB) => {
|
||||
|
||||
DB.getFollowingTheProfile = async (profileId) => {
|
||||
//const profile_id = DB.ObjectID(profileId);
|
||||
let r = await DB.profileCols.find({ following: (profileId+'') })
|
||||
let r = await DB.profileCols.find({ following: (profileId + '') })
|
||||
.toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return [];
|
||||
@@ -216,40 +230,40 @@ userDB = (DB) => {
|
||||
DB.setData = async (profileid, key, value) => {
|
||||
const _id = DB.ObjectID(profileid);
|
||||
let update = {
|
||||
$set:{
|
||||
$set: {
|
||||
["data." + key]: value
|
||||
}
|
||||
}
|
||||
}
|
||||
return DB.profileCols.updateOne({_id}, update).catch((err)=>{
|
||||
return DB.profileCols.updateOne({ _id }, update).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
DB.setProfileToken = (profileid, token)=>{
|
||||
if(!token) return false;
|
||||
DB.setProfileToken = (profileid, token) => {
|
||||
if (!token) return false;
|
||||
const _id = DB.ObjectID(profileid);
|
||||
let update = {
|
||||
$addToSet:{
|
||||
$addToSet: {
|
||||
token
|
||||
}
|
||||
}
|
||||
}
|
||||
if (userProfileCache[profileid]) delete userProfileCache[profileid];
|
||||
return DB.profileCols.updateOne({_id}, update).catch((err)=>{
|
||||
return DB.profileCols.updateOne({ _id }, update).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
DB.setWebSubscription = (profileid, webSubscription)=>{
|
||||
DB.setWebSubscription = (profileid, webSubscription) => {
|
||||
const _id = DB.ObjectID(profileid);
|
||||
let update = {
|
||||
$set:{
|
||||
$set: {
|
||||
webSubscription
|
||||
}
|
||||
}
|
||||
}
|
||||
if (userProfileCache[profileid]) delete userProfileCache[profileid];
|
||||
return DB.profileCols.updateOne({_id}, update).catch((err)=>{
|
||||
return DB.profileCols.updateOne({ _id }, update).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
@@ -258,7 +272,7 @@ userDB = (DB) => {
|
||||
DB.addNotification = async (profileid, message, postid, commentIndx, actorid) => {
|
||||
const _id = DB.ObjectID(profileid);
|
||||
let update = {
|
||||
$push:{
|
||||
$push: {
|
||||
notifications: {
|
||||
ts: new Date(),
|
||||
body: message,
|
||||
@@ -266,9 +280,9 @@ userDB = (DB) => {
|
||||
commentIndx,
|
||||
actorid,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return DB.profileCols.updateOne({_id}, update).catch((err)=>{
|
||||
return DB.profileCols.updateOne({ _id }, update).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
@@ -282,37 +296,37 @@ userDB = (DB) => {
|
||||
//Groups
|
||||
DB.getGroups = async (excludePrivate = false) => {
|
||||
let query = {
|
||||
isGroup: true,
|
||||
isCourse: {$ne: true},
|
||||
isChat: {$ne: true},
|
||||
isGroup: true,
|
||||
isCourse: { $ne: true },
|
||||
isChat: { $ne: true },
|
||||
};
|
||||
if(excludePrivate) query.isPrivate = false;
|
||||
if (excludePrivate) query.isPrivate = false;
|
||||
let r = await DB.profileCols.find(query).sort({ lastUpdate: -1 }).limit(10)
|
||||
.toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
return r;
|
||||
}
|
||||
|
||||
DB.getFollowingGroups = async (profileid) => {
|
||||
const profile = await DB.getProfile(profileid);
|
||||
let ids = [];
|
||||
for(id in profile.following){
|
||||
try{
|
||||
for (id in profile.following) {
|
||||
try {
|
||||
let oId = DB.ObjectID(profile.following[id]);
|
||||
let checkProfile = await DB.getProfileCache(oId)
|
||||
if(checkProfile && checkProfile.isGroup && !checkProfile.isChat){
|
||||
if (checkProfile && checkProfile.isGroup && !checkProfile.isChat) {
|
||||
ids.push(oId)
|
||||
}
|
||||
}catch{
|
||||
} catch {
|
||||
|
||||
}
|
||||
}
|
||||
let query = {
|
||||
isGroup: true,
|
||||
isCourse: {$ne: true},
|
||||
isChat: {$ne: true},
|
||||
isGroup: true,
|
||||
isCourse: { $ne: true },
|
||||
isChat: { $ne: true },
|
||||
_id: {
|
||||
$in: ids
|
||||
}
|
||||
@@ -321,7 +335,7 @@ userDB = (DB) => {
|
||||
.toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -329,41 +343,49 @@ userDB = (DB) => {
|
||||
let regEx = new RegExp(queryStr, 'i');
|
||||
let query = queryStr ? {
|
||||
isGroup: true,
|
||||
isChat: {$ne: true},
|
||||
isChat: { $ne: true },
|
||||
isCourse: coursesB,
|
||||
$or: [
|
||||
{"profile.firstName": {
|
||||
$regex: regEx
|
||||
}},
|
||||
{"profile.lastName": {
|
||||
$regex: regEx
|
||||
}},
|
||||
{"profile.description": {
|
||||
$regex: regEx
|
||||
}},
|
||||
{"data.author": {
|
||||
$regex: regEx
|
||||
}}
|
||||
{
|
||||
"profile.firstName": {
|
||||
$regex: regEx
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile.lastName": {
|
||||
$regex: regEx
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile.description": {
|
||||
$regex: regEx
|
||||
}
|
||||
},
|
||||
{
|
||||
"data.author": {
|
||||
$regex: regEx
|
||||
}
|
||||
}
|
||||
]
|
||||
} : {isGroup: true, isChat: {$ne: true}, isCourse: coursesB};
|
||||
} : { isGroup: true, isChat: { $ne: true }, isCourse: coursesB };
|
||||
let r = await DB.profileCols.find(query)
|
||||
.sort({ lastUpdate: -1 }).limit(20)
|
||||
.toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
.sort({ lastUpdate: -1 }).limit(20)
|
||||
.toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
return r;
|
||||
}
|
||||
|
||||
let privateGroupsCache = {};
|
||||
DB.isGroupPrivate = async (groupid) => {
|
||||
if(userProfileCache[groupid]) return userProfileCache[groupid].isPrivate;
|
||||
if (userProfileCache[groupid]) return userProfileCache[groupid].isPrivate;
|
||||
let g = await DB.getGroup(groupid);
|
||||
return g ? g.isPrivate : false;
|
||||
}
|
||||
|
||||
DB.isGroupNewsOnly = async (groupid) => {
|
||||
if(userProfileCache[groupid]) return userProfileCache[groupid].newsOnly;
|
||||
if (userProfileCache[groupid]) return userProfileCache[groupid].newsOnly;
|
||||
let g = await DB.getGroup(groupid);
|
||||
return g ? g.newsOnly : false;
|
||||
}
|
||||
@@ -377,7 +399,7 @@ userDB = (DB) => {
|
||||
DB.getGroup = async (groupid) => {
|
||||
const _id = DB.ObjectID(groupid);
|
||||
//if(userProfileCache[groupid]) return userProfileCache[groupid];
|
||||
let r = await DB.profileCols.findOne({_id, isGroup: true, isChat: {$ne: true},}).catch((err) => {
|
||||
let r = await DB.profileCols.findOne({ _id, isGroup: true, isChat: { $ne: true }, }).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
@@ -389,13 +411,13 @@ userDB = (DB) => {
|
||||
const _id = DB.ObjectID(groupid);
|
||||
const subOrRequest = reqSubscription ? "pending." : "subscribed.";
|
||||
let update = {
|
||||
$set:{
|
||||
$set: {
|
||||
[subOrRequest + profileid]: new Date()
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!reqSubscription) DB.followProfile(profileid, groupid);
|
||||
if (!reqSubscription) DB.followProfile(profileid, groupid);
|
||||
delete userProfileCache[groupid];
|
||||
return DB.profileCols.updateOne({_id}, update).catch((err)=>{
|
||||
return DB.profileCols.updateOne({ _id }, update).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
@@ -404,16 +426,16 @@ userDB = (DB) => {
|
||||
DB.acceptGroupJoinReq = async (profileid, groupid) => {
|
||||
const _id = DB.ObjectID(groupid);
|
||||
let update = {
|
||||
$set:{
|
||||
$set: {
|
||||
["subscribed." + profileid]: new Date()
|
||||
},
|
||||
$unset:{
|
||||
$unset: {
|
||||
["pending." + profileid]: ""
|
||||
}
|
||||
}
|
||||
DB.followProfile(profileid, groupid);
|
||||
delete userProfileCache[groupid];
|
||||
return DB.profileCols.updateOne({_id}, update).catch((err)=>{
|
||||
return DB.profileCols.updateOne({ _id }, update).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
@@ -422,12 +444,12 @@ userDB = (DB) => {
|
||||
DB.rejectGroupJoinReq = async (profileid, groupid) => {
|
||||
const _id = DB.ObjectID(groupid);
|
||||
let update = {
|
||||
$unset:{
|
||||
$unset: {
|
||||
["pending." + profileid]: ""
|
||||
}
|
||||
}
|
||||
delete userProfileCache[groupid];
|
||||
return DB.profileCols.updateOne({_id}, update).catch((err)=>{
|
||||
return DB.profileCols.updateOne({ _id }, update).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
@@ -436,12 +458,12 @@ userDB = (DB) => {
|
||||
DB.unsubscribeToGroup = async (profileid, groupid) => {
|
||||
const _id = DB.ObjectID(groupid);
|
||||
let update = {
|
||||
$unset:{
|
||||
$unset: {
|
||||
["subscribed." + profileid]: "",
|
||||
}
|
||||
}
|
||||
}
|
||||
DB.unfollowProfile(profileid, groupid)
|
||||
return DB.profileCols.updateOne({_id}, update).catch((err)=>{
|
||||
return DB.profileCols.updateOne({ _id }, update).catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
@@ -449,12 +471,12 @@ userDB = (DB) => {
|
||||
|
||||
//Courses
|
||||
DB.getCourses = async () => {
|
||||
let r = await DB.profileCols.find({isGroup: true, isCourse: true, isChat: {$ne: true}})
|
||||
.sort({ lastUpdate: -1 }).limit(20)
|
||||
.toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
let r = await DB.profileCols.find({ isGroup: true, isCourse: true, isChat: { $ne: true } })
|
||||
.sort({ lastUpdate: -1 }).limit(20)
|
||||
.toArray().catch((err) => {
|
||||
console.log(err);
|
||||
return false;
|
||||
});
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user