AnEvent.findOne({_id : req.body.event_id}, function(err, theEvent) { var newAttendeeIDs = theEvent.attendeesIDs; var newAttendeeNames = theEvent.attendeesNames; var theObjectID = mongoose.Types.ObjectId(req.user._id.toString()); var index = newAttendeeIDs.indexOf(theObjectID); if (index !== -1) { newAttendeeIDs.splice(index, 1); newAttendeeNames.splice(index, 1); } User.update({_id : req.user._id}, {$pull : {activeEvents : theEvent._id}}, function(err) { if(err) { throw err; } }); if (newAttendeeIDs.length === 0) { AnEvent.remove({_id : theEvent.id}, function(err) { res.send({success : true}); }); } else { AnEvent.update({_id : req.body.event_id}, {$set : {attendeesIDs : newAttendeeIDs, attendeesNames : newAttendeeNames}}, function(err) { if(err) { throw err; } res.send({success : true}); }); } });
Building.findOne({name : req.body.building}, function(err, theBuilding) { theEvent.buildingName = theBuilding.name; theEvent.buildingID = theBuilding._id; Class.findOne({_id : mongoose.Types.ObjectId(req.body.class)}, function(err, theClass) { theEvent.clsName = theClass.name; theEvent.clsNum = theClass.num; theEvent.clsID = theClass._id; theEvent.ownerName = req.user.fullName; theEvent.ownerID = req.user._id; theEvent.attendeesNames = [req.user.fullName]; theEvent.attendeesIDs = [req.user._id]; theEvent.info = req.body.info; theEvent.lat = req.body.lat; theEvent.long = req.body.long; theEvent.startTime = req.body.startTime; theEvent.endTime = req.body.endTime; User.update({_id : req.user._id}, {$addToSet : {activeEvents : theEvent._id}}, function(err) { if(err) { throw err; } }); theEvent.save(function(err) { if(err) { throw err; } else { res.send({success: true}); } }); }); });
AnEvent.findOne({_id : req.body.event_id}, function(err, theEvent) { var newAttendeeIDs = theEvent.attendeesIDs; var newAttendeeNames = theEvent.attendeesNames; var theObjectID = mongoose.Types.ObjectId(req.user._id.toString()); //cannot join an event that has already ended if(theEvent.endTime < new Date()) { res.send({ success: false, alreadyEnded: true }); //Cannot join an event that you have previously joined } else if(newAttendeeIDs.indexOf(theObjectID) != -1) { res.send({ success: false, alreadyJoined: true }); } else { //update mongo and send success newAttendeeIDs.push(theObjectID); newAttendeeNames.push(req.user.fullName); User.update({_id : req.user._id}, {$addToSet : {activeEvents : theEvent._id}}, function(err) { if(err) { throw err; } }); AnEvent.update({_id : req.body.event_id}, {$set : {attendeesIDs : newAttendeeIDs, attendeesNames : newAttendeeNames}}, function(err) { if(err) { throw err; } res.send({success : true}); }); } });
app.put("/leave_class", ensureAuthenticated, function(req, res) { var newClassIDs; var newClassNames; var newClassNums; var newStudentIDs; var newStudentNames; var theObjectID = mongoose.Types.ObjectId(req.body._id); Class.findOne({_id : theObjectID}, function(err, theClass) { if(err) { throw err; } User.findOne({facebookID : req.user.facebookID}, function(err, theUser) { newClassIDs = theUser.classIDs; newClassNames = theUser.classNames; newClassNums = theUser.classNums; var index = newClassIDs.indexOf(theClass._id); if (!(index === -1)) { newClassIDs.splice(index, 1); newClassNames.splice(index, 1); newClassNums.splice(index, 1); } else { res.send({success: false, alreadyInClass : true}); return; } newStudentIDs = theClass.studentIDs; newStudentNames = theClass.studentNames; index = newStudentIDs.indexOf(theUser._id); if (!(index === -1)) { newStudentIDs.splice(index, 1); newStudentNames.splice(index, 1); } User.update({facebookID : req.user.facebookID}, { $set: {classIDs : newClassIDs, classNames : newClassNames, classNums : newClassNums}}, function(err) { if (err) { throw err; } Class.update({_id : theClass._id}, { $set: {studentIDs : newStudentIDs, studentNames : newStudentNames}}, function(err) { if (err) { throw err; } res.send({success:true}); }); }); }); }); });
app.get('/events/:query', ensureAuthenticated, function(req, res) { var theUrl = "https://graph.facebook.com/" + req.user.facebookID + "/friends" + "?access_token=" + req.user.facebookAccessToken; var friends; var classes = req.user.classIDs; var events : any = {}; var query : any = {}; var JSONQuery = JSON.parse(req.params.query); if(JSONQuery.class != undefined) { query.clsID = mongoose.Types.ObjectId(JSONQuery.class.toString()); } if(JSONQuery.building != undefined) { query.buildingID = mongoose.Types.ObjectId(JSONQuery.building.toString()); } query.clsID = {$in : classes}; //Find events of length more than "duration" and also have more than "duration" time remaining if they have already started if(JSONQuery.duration != undefined) { query["$where"] = soHacky(JSONQuery.duration); var timeRemaining = new Date(); timeRemaining.setTime(timeRemaining.getTime() + JSONQuery.duration * 1000 * 60); query.endTime = {"$gt" : timeRemaining}; } //First, get facebook friends of user request.get( {url: theUrl}, function(e, r, response) { response = JSON.parse(response); if(e != null) { r.send(response); } else { var idArray = response.data.map(function(val, i) { return val.id; }); User.find({}, {facebookAccessToken : 0}).where("facebookID").in(idArray).exec(function(err, records) { friends = records; for(var i = 0; i < friends.length; i++) { //Add events from facebook friends for(var j = 0; j < friends[i].activeEvents; j++) { events[friends[i].activeEvents[j]] = friends[i].activeEvents[j];; } } //Delete old events that have already ended AnEvent.remove({endTime : {$lt : new Date()}}, function(err) { if(err) { throw err; } //Add events that match query AnEvent.find(query, function(err, moreEvents) { if(err) { throw err; } for(var i = 0; i < moreEvents.length; i++) { events[moreEvents[i]] = moreEvents[i]; } var eventsArray = []; for(var key in events) { eventsArray.push(events[key]); } res.send(eventsArray); }); }); }); } } ); });