const DBName = "EMI_SOCIAL"; let userProfileCache = {}; userDB = (DB) => { DB.profileCols = DB.db.db(DBName).collection("profiles"); DB.newProfile = (profileObj) => { return DB.profileCols.insertOne(profileObj.toObj()).catch((err) => { console.log(err); return false; }); } DB.getProfile = async (profileId) => { //if (userProfileCache[profileId]) return userProfileCache[profileId]; const _id = DB.ObjectID(profileId); let r = await DB.profileCols.findOne({ _id }).catch((err) => { console.log(err); return false; }); if (r) userProfileCache[profileId] = r; return r; } DB.getUserProfiles = async (userId) => { const userid = DB.ObjectID(userId); return await DB.profileCols.find({ userid }).toArray().catch((err) => { console.log(err); return false; }); } DB.latestProfile = async (userId) => { const userid = DB.ObjectID(userId); let r = await DB.profileCols.find({ userid }) .sort({ lastUpdate: -1 }).limit(1) .toArray().catch((err) => { console.log(err); return false; }); let index = 0; while(r[index].isGroup) index += 1; if (r[index]) userProfileCache[r[index].id] = r[index]; return r[index]; } //Groups DB.getGroups = async () => { let r = await DB.profileCols.find({isGroup: true}) .sort({ lastUpdate: -1 }).limit(10) .toArray().catch((err) => { console.log(err); return false; }); return r; } DB.getGroup = async (groupid) => { const _id = DB.ObjectID(groupid); if(userProfileCache[groupid]) return userProfileCache[groupid]; let r = await DB.profileCols.findOne({_id, isGroup: true}) .toArray().catch((err) => { console.log(err); return false; }); if (r) userProfileCache[r.id] = r; return r; } DB.subscribeToGroup = async (profileid, groupid) => { const _id = DB.ObjectID(groupid); let update = { $set:{ ["subscribed." + profileid]: new Date() } } return DB.profileCols.updateOne({_id}, update).catch((err)=>{ console.log(err); return false; }); } DB.unsubscribeToGroup = async (profileid, groupid) => { const _id = DB.ObjectID(groupid); let update = { $unset:{ ["subscribed." + profileid]: "", } } return DB.profileCols.updateOne({_id}, update).catch((err)=>{ console.log(err); return false; }); } } module.exports = userDB;