arnaucube
arnaucube/commonroutesServerPublic Self-hosted repository
commonroutesServer/controllers/travelController.js
controllers/travelController.jsRaw
  1//File: controllers/travelController.js
  2var mongoose = require('mongoose');
  3var userModel  = mongoose.model('userModel');
  4var notificationModel  = mongoose.model('notificationModel');
  5var travelModel  = mongoose.model('travelModel');
  6var commentModel  = mongoose.model('commentModel');
  7
  8//GET
  9exports.getAllTravels = function(req, res) {
 10	//get travels with futures dates ($gte - greater than and equal than)
 11	travelModel.find({date: {$gte: new Date()}})
 12    .limit(Number(req.query.pageSize))
 13    .skip(Number(req.query.pageSize) * Number(req.query.page))
 14    .exec(function (err, travels) {
 15        if (err) return res.send(500, err.message);
 16        res.status(200).jsonp(travels);
 17    });
 18};
 19
 20exports.getTravelById = function (req, res) {
 21    travelModel.findOne({_id: req.params.travelid})
 22    .lean()
 23    .populate('user', 'username avatar')
 24    .populate('joins', 'username avatar')
 25    .populate('comments', 'comment user')
 26    .exec(function (err, travel) {
 27        if (err) return res.send(500, err.message);
 28        if (!travel) {
 29            res.json({success: false, message: 'travel not found.'});
 30        } else if (travel) {
 31
 32            res.status(200).jsonp(travel);
 33        }
 34    });
 35};
 36
 37exports.addTravel = function(req, res) {
 38	userModel.findOne({'token': req.headers['x-access-token']})
 39	.exec(function(err, user){
 40		if (err) return res.send(500, err.message);
 41		if (!user) {
 42			console.log("user not found");
 43            res.json({success: false, message: 'User not found.'});
 44        } else if (user) {
 45			var travel = new travelModel({
 46				title: req.body.title,
 47			    description:   req.body.description,
 48			    user:   user._id,
 49			    from:   req.body.from,
 50			    to:   req.body.to,
 51			    date:   req.body.date,
 52				periodic: req.body.periodic,
 53			    generateddate: Date(),
 54				seats: req.body.seats,
 55				package: req.body.package,
 56				collectivized: req.body.collectivized,
 57				type: req.body.type
 58			});
 59
 60			travel.save(function(err, travel) {
 61				if(err) return res.send(500, err.message);
 62
 63				user.travels.push(travel._id);
 64				user.save(function (err, user) {
 65                    if (err) return res.send(500, err.message);
 66					exports.getAllTravels(req, res);
 67                });
 68			});//end of travel.save
 69		}
 70	});//end of usermodel.find
 71
 72
 73};
 74
 75exports.updateTravel = function(req, res) {
 76	userModel.findOne({'token': req.headers['x-access-token']})
 77	.exec(function(err, user){
 78        if (err) return res.send(500, err.message);
 79        console.log(travel);
 80        travelModel.findOne({_id: travel._id})
 81        .lean()
 82        .populate('travels', 'title from to date')
 83        .exec(function (err, travel) {
 84            if (err) return res.send(500, err.message);
 85            if (!travel) {
 86                res.json({success: false, message: 'travel not found.'});
 87            } else if (travel) {
 88
 89                res.status(200).jsonp(travel);
 90            }
 91        });
 92    });
 93};
 94
 95//DELETE
 96exports.deleteTravel = function(req, res) {
 97	userModel.findOne({'token': req.headers['x-access-token']})
 98	.exec(function(err, user){
 99		if (err) return res.send(500, err.message);
100		travelModel.findById(req.params.travelid, function(err, travel) {
101			if (err) return res.send(500, err.message);
102			if(travel.user.equals(user._id))
103			{
104				travel.remove(function(err) {
105					if(err) return res.send(500, err.message);
106
107					console.log("deleted");
108					exports.getAllTravels(req, res);
109				});
110			}
111		});
112	});
113};
114
115/* join */
116exports.addJoinPetition = function(req, res) {
117	userModel.findOne({'token': req.headers['x-access-token']})
118	.exec(function(err, userJoining){
119		if (err) return res.send(500, err.message);
120		if (!userJoining) {
121            res.json({success: false, message: 'User not found.'});
122        } else if (userJoining) {
123			travelModel.findOne({
124				_id: req.params.travelid,
125				user: {'$ne': userJoining._id},
126				joins: {'$ne': userJoining._id},
127				joinPetitions: {'$ne': userJoining._id}
128			})
129			.exec(function(err, travel){
130				if (err) return res.send(500, err.message);
131				if (!travel) {
132		            res.json({success: false, message: 'travel not found. You can not join a travel if you have created it, or if you have already joined'});
133		        } else if (travel) {
134					travel.joinPetitions.push(userJoining._id);
135					travel.save(function(err, travel) {
136						if(err) return res.send(500, err.message);
137
138						//start saving notification, get user owner of travel
139						userModel.findOne({_id: travel.user})
140						.exec(function(err, user){
141							if (err) return res.send(500, err.message);
142							if (!user) {
143					            res.json({success: false, message: 'User not found.'});
144					        } else if (user) {
145							//notification
146								var notification = new notificationModel({
147									concept: "join",
148									message: "user "+userJoining.username+" joins your travel "+travel.title,
149									date: new Date(),
150									icon: 'join.png',
151									link: "travels/" + travel._id
152								});
153								notification.save(function(err, notification) {
154									if (err) return res.send(500, err.message);
155									user.notifications.push(notification._id);
156									user.save(function(err, user) {
157										if (err) return res.send(500, err.message);
158
159										console.log("notification saved");
160										exports.getTravelById(req, res);
161									});
162								});
163							}
164						});//end saving notification
165					});
166				}//end of else if travel
167			});
168		}//end of else if user
169	});
170};
171
172exports.unJoin = function(req, res) {
173	userModel.findOne({'token': req.headers['x-access-token']})
174	.exec(function(err, userJoining){
175		if (!userJoining) {
176            res.json({success: false, message: 'userJoining not found.'});
177        } else if (userJoining) {
178			travelModel.findOne({
179				_id: req.params.travelid,
180				joinPetitions: userJoining._id
181			})
182			.exec(function(err, travel){
183				if (err) return res.send(500, err.message);
184				if (!travel) {
185		            res.json({success: false, message: 'can not unjoin this travel'});
186		        } else if (travel) {
187					for(var i=0; i<travel.joinPetitions.length; i++)
188					{
189						if(travel.joinPetitions[i].equals(userJoining._id))
190						{
191							travel.joinPetitions.splice(i, 1);
192						}
193					}
194					travel.save(function(err, travel) {
195						if(err) return res.send(500, err.message);
196						//start saving notification, get user owner of travel
197						userModel.findOne({_id: travel.user})
198						.exec(function(err, user){
199							if (err) return res.send(500, err.message);
200							if (!user) {
201					            res.json({success: false, message: 'User not found.'});
202					        } else if (user) {
203							//notification
204								var notification = new notificationModel({
205									concept: "unjoin",
206									message: "user "+userJoining.username+" unjoins your travel "+travel.title,
207									date: new Date(),
208									icon: 'unjoin.png',
209									link: "travels/" + travel._id
210								});
211								notification.save(function(err, notification) {
212									if (err) return res.send(500, err.message);
213									user.notifications.push(notification._id);
214									user.save(function(err, user) {
215										if (err) return res.send(500, err.message);
216
217										console.log("notification saved");
218										exports.getTravelById(req, res);
219									});
220								});
221							}
222						});//end saving notification
223					});
224				}
225			});
226		}
227
228	});
229};
230
231exports.getTravelsByUserId = function(req, res) {
232	travelModel.find({
233		user: req.params.userid
234	})
235	.lean()
236	.populate('joins', 'username avatar')
237	.populate('comments', 'comment user')
238	.exec(function (err, travels) {
239		if (err) return res.send(500, err.message);
240		if (!travels) {
241			res.json({success: false, message: 'travel not found.'});
242		} else if (travels) {
243
244			res.status(200).jsonp(travels);
245		}
246	});
247};
248
249
250
251
252
253
254/* comment */
255exports.addComment = function(req, res) {
256	/*var comment = new commentModel({
257		travelId: req.params.travelId,
258		commentUserId: req.body.commentUserId,
259		commentUsername: req.body.commentUsername,
260		comment: req.body.comment,
261		commentAvatar: req.body.commentAvatar
262	});
263
264	comment.save(function(err, comment) {
265		if(err) return res.send(500, err.message);
266    res.status(200).jsonp(comment);
267	});*/
268	userModel.find({
269		token: req.headers['x-access-token']
270	}, function(err, users){
271		var user=users[0];
272
273		travelModel.findById(req.params.travelId, function(err, travel){
274			console.log(travel.title);
275			var comment = {
276				commentUserId: user._id,
277				commentUsername: user.username,
278				comment: req.body.comment,
279				commentAvatar: user.avatar
280			};
281			travel.comments.push(comment);
282
283			travel.save(function(err, travel) {
284				if(err) return res.send(500, err.message);
285		    //res.status(200).jsonp(travel);
286				travelModel.find({date: {$gte: new Date()}}, function(err, travels) {
287				    if(err) res.send(500, err.message);
288						res.status(200).jsonp(travels);
289				});
290			});
291
292			//start saving notification, get user owner of travel
293			userModel.find({
294		      username: travel.owner
295		  }, function(err, userowners) {
296				var userowner=userowners[0];
297				//notification
298				var notification = {
299					concept: "comment",
300					otherusername: user.username,
301					description: "user "+user.username+" comments your travel "+travel.title,
302					date: new Date(),
303					link: ""
304				};
305				userowner.notifications.push(notification);
306				userowner.save(function(err, userowner) {
307					console.log("notification saved");
308				});
309			});//end saving notification
310
311		});
312	});//end of userModel.find
313};
314
315exports.getCommentsByTravelId = function(req, res) {
316    commentModel.find({
317      travelId: req.params.travelId
318  }, function(err, comments) {
319
320      if (err) throw err;
321
322      if (!comments) {
323        res.json({ success: false, message: 'no comments for travelId' });
324    } else if (comments) {
325          // return the information including token as JSON
326		 res.jsonp(comments);
327
328      }
329
330    });
331};