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 telegram phone')
 24    .populate('joins', 'username avatar')
 25    .populate('joinPetitions', 'username avatar')
 26    .populate('comments', 'comment user')
 27    .exec(function (err, travel) {
 28        if (err) return res.send(500, err.message);
 29        if (!travel) {
 30            res.json({success: false, message: 'travel not found.'});
 31        } else if (travel) {
 32
 33            res.status(200).jsonp(travel);
 34        }
 35    });
 36};
 37
 38exports.addTravel = function(req, res) {
 39	userModel.findOne({'token': req.headers['x-access-token']})
 40	.exec(function(err, user){
 41		if (err) return res.send(500, err.message);
 42		if (!user) {
 43			console.log("user not found");
 44            res.json({success: false, message: 'User not found.'});
 45        } else if (user) {
 46			var travel = new travelModel({
 47				title: req.body.title,
 48			    description:   req.body.description,
 49			    user:   user._id,
 50			    from:   req.body.from,
 51			    to:   req.body.to,
 52			    date:   req.body.date,
 53				periodic: req.body.periodic,
 54			    generateddate: Date(),
 55				seats: req.body.seats,
 56				package: req.body.package,
 57				collectivized: req.body.collectivized,
 58				type: req.body.type
 59			});
 60
 61			travel.save(function(err, travel) {
 62				if(err) return res.send(500, err.message);
 63
 64				user.travels.push(travel._id);
 65				user.save(function (err, user) {
 66                    if (err) return res.send(500, err.message);
 67					exports.getAllTravels(req, res);
 68                });
 69			});//end of travel.save
 70		}
 71	});//end of usermodel.find
 72
 73
 74};
 75
 76exports.updateTravel = function(req, res) {
 77	userModel.findOne({'token': req.headers['x-access-token']})
 78	.exec(function(err, user){
 79        if (err) return res.send(500, err.message);
 80        console.log(travel);
 81        travelModel.findOne({_id: travel._id})
 82        .lean()
 83        .populate('travels', 'title from to date')
 84        .exec(function (err, travel) {
 85            if (err) return res.send(500, err.message);
 86            if (!travel) {
 87                res.json({success: false, message: 'travel not found.'});
 88            } else if (travel) {
 89
 90                res.status(200).jsonp(travel);
 91            }
 92        });
 93    });
 94};
 95
 96//DELETE
 97exports.deleteTravel = function(req, res) {
 98	userModel.findOne({'token': req.headers['x-access-token']})
 99	.exec(function(err, user){
100		if (err) return res.send(500, err.message);
101		travelModel.findById(req.params.travelid, function(err, travel) {
102			if (err) return res.send(500, err.message);
103			if(travel.user.equals(user._id))
104			{
105				travel.remove(function(err) {
106					if(err) return res.send(500, err.message);
107
108					console.log("deleted");
109					exports.getAllTravels(req, res);
110				});
111			}
112		});
113	});
114};
115
116/* join */
117exports.addJoinPetition = function(req, res) {
118	userModel.findOne({'token': req.headers['x-access-token']})
119	.exec(function(err, userJoining){
120		if (err) return res.send(500, err.message);
121		if (!userJoining) {
122            res.json({success: false, message: 'User not found.'});
123        } else if (userJoining) {
124			travelModel.findOne({
125				_id: req.params.travelid,
126				user: {'$ne': userJoining._id},
127				joins: {'$ne': userJoining._id},
128				joinPetitions: {'$ne': userJoining._id}
129			})
130			.exec(function(err, travel){
131				if (err) return res.send(500, err.message);
132				if (!travel) {
133		            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'});
134		        } else if (travel) {
135					travel.joinPetitions.push(userJoining._id);
136					travel.save(function(err, travel) {
137						if(err) return res.send(500, err.message);
138
139						//start saving notification, get user owner of travel
140						userModel.findOne({_id: travel.user})
141						.exec(function(err, user){
142							if (err) return res.send(500, err.message);
143							if (!user) {
144					            res.json({success: false, message: 'User not found.'});
145					        } else if (user) {
146							//notification
147								var notification = new notificationModel({
148									concept: "join",
149									message: "user "+userJoining.username+" joins your travel "+travel.title,
150									date: new Date(),
151									icon: 'join.png',
152									link: "travels/" + travel._id
153								});
154								notification.save(function(err, notification) {
155									if (err) return res.send(500, err.message);
156									user.notifications.push(notification._id);
157									user.save(function(err, user) {
158										if (err) return res.send(500, err.message);
159
160										console.log("notification saved");
161										exports.getTravelById(req, res);
162									});
163								});
164							}
165						});//end saving notification
166					});
167				}//end of else if travel
168			});
169		}//end of else if user
170	});
171};
172
173exports.unJoin = function(req, res) {
174	userModel.findOne({'token': req.headers['x-access-token']})
175	.exec(function(err, userJoining){
176		if (!userJoining) {
177            res.json({success: false, message: 'userJoining not found.'});
178        } else if (userJoining) {
179			travelModel.findOne({
180				_id: req.params.travelid,
181				joinPetitions: userJoining._id
182			})
183			.exec(function(err, travel){
184				if (err) return res.send(500, err.message);
185				if (!travel) {
186		            res.json({success: false, message: 'can not unjoin this travel'});
187		        } else if (travel) {
188					for(var i=0; i<travel.joinPetitions.length; i++)
189					{
190						if(travel.joinPetitions[i].equals(userJoining._id))
191						{
192							travel.joinPetitions.splice(i, 1);
193						}
194					}
195					travel.save(function(err, travel) {
196						if(err) return res.send(500, err.message);
197						//start saving notification, get user owner of travel
198						userModel.findOne({_id: travel.user})
199						.exec(function(err, user){
200							if (err) return res.send(500, err.message);
201							if (!user) {
202					            res.json({success: false, message: 'User not found.'});
203					        } else if (user) {
204							//notification
205								var notification = new notificationModel({
206									concept: "unjoin",
207									message: "user "+userJoining.username+" unjoins your travel "+travel.title,
208									date: new Date(),
209									icon: 'unjoin.png',
210									link: "travels/" + travel._id
211								});
212								notification.save(function(err, notification) {
213									if (err) return res.send(500, err.message);
214									user.notifications.push(notification._id);
215									user.save(function(err, user) {
216										if (err) return res.send(500, err.message);
217
218										console.log("notification saved");
219										exports.getTravelById(req, res);
220									});
221								});
222							}
223						});//end saving notification
224					});
225				}
226			});
227		}
228
229	});
230};
231
232exports.acceptJoin = function(req, res) {
233	userModel.findOne({'token': req.headers['x-access-token']})
234	.exec(function(err, userOwner){
235		if (err) return res.send(500, err.message);
236		if (!userOwner) {
237            res.json({success: false, message: 'User not found.'});
238        } else if (userOwner) {
239			travelModel.findOne({
240				_id: req.params.travelid,
241				user: userOwner._id,
242				joinPetitions: req.body.userid
243			})
244			.exec(function(err, travel){
245				if (err) return res.send(500, err.message);
246				if (!travel) {
247		            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'});
248		        } else if (travel) {
249					var indexPetition=-1;
250					for(var i=0; i<travel.joinPetitions.length; i++)
251					{
252						if(travel.joinPetitions[i].equals(req.body.userid))
253						{
254							indexPetition=JSON.parse(JSON.stringify(i));
255						}
256					}
257					if(indexPetition>-1)
258					{
259						travel.joins.push(JSON.parse(JSON.stringify(travel.joinPetitions[indexPetition])));
260						travel.joinPetitions.splice(indexPetition, 1);
261						console.log(travel);
262					}
263					travel.save(function(err, travel) {
264						if(err) return res.send(500, err.message);
265
266						//start saving notification, get user owner of travel
267						userModel.findOne({_id: req.body.userid})
268						.exec(function(err, user){
269							if (err) return res.send(500, err.message);
270							if (!user) {
271					            res.json({success: false, message: 'User not found.'});
272					        } else if (user) {
273							//notification
274								var notification = new notificationModel({
275									concept: "travel",
276									message: "user "+userOwner.username+" accepts your petition for "+travel.title,
277									date: new Date(),
278									icon: 'travel.png',
279									link: "travels/" + travel._id
280								});
281								notification.save(function(err, notification) {
282									if (err) return res.send(500, err.message);
283									user.notifications.push(notification._id);
284									user.save(function(err, user) {
285										if (err) return res.send(500, err.message);
286
287										console.log("notification saved");
288										exports.getTravelById(req, res);
289									});
290								});
291							}
292						});//end saving notification
293					});//end of travel save
294				}//end of else if travel
295			});
296		}//end of else if user
297	});
298};
299
300exports.getTravelsByUserId = function(req, res) {
301	travelModel.find({
302		user: req.params.userid
303	})
304	.lean()
305	.populate('joins', 'username avatar')
306	.populate('comments', 'comment user')
307	.exec(function (err, travels) {
308		if (err) return res.send(500, err.message);
309		if (!travels) {
310			res.json({success: false, message: 'travel not found.'});
311		} else if (travels) {
312
313			res.status(200).jsonp(travels);
314		}
315	});
316};
317
318
319
320
321
322
323/* comment */
324exports.addComment = function(req, res) {
325	/*var comment = new commentModel({
326		travelId: req.params.travelId,
327		commentUserId: req.body.commentUserId,
328		commentUsername: req.body.commentUsername,
329		comment: req.body.comment,
330		commentAvatar: req.body.commentAvatar
331	});
332
333	comment.save(function(err, comment) {
334		if(err) return res.send(500, err.message);
335    res.status(200).jsonp(comment);
336	});*/
337	userModel.find({
338		token: req.headers['x-access-token']
339	}, function(err, users){
340		var user=users[0];
341
342		travelModel.findById(req.params.travelId, function(err, travel){
343			console.log(travel.title);
344			var comment = {
345				commentUserId: user._id,
346				commentUsername: user.username,
347				comment: req.body.comment,
348				commentAvatar: user.avatar
349			};
350			travel.comments.push(comment);
351
352			travel.save(function(err, travel) {
353				if(err) return res.send(500, err.message);
354		    //res.status(200).jsonp(travel);
355				travelModel.find({date: {$gte: new Date()}}, function(err, travels) {
356				    if(err) res.send(500, err.message);
357						res.status(200).jsonp(travels);
358				});
359			});
360
361			//start saving notification, get user owner of travel
362			userModel.find({
363		      username: travel.owner
364		  }, function(err, userowners) {
365				var userowner=userowners[0];
366				//notification
367				var notification = {
368					concept: "comment",
369					otherusername: user.username,
370					description: "user "+user.username+" comments your travel "+travel.title,
371					date: new Date(),
372					link: ""
373				};
374				userowner.notifications.push(notification);
375				userowner.save(function(err, userowner) {
376					console.log("notification saved");
377				});
378			});//end saving notification
379
380		});
381	});//end of userModel.find
382};
383
384exports.getCommentsByTravelId = function(req, res) {
385    commentModel.find({
386      travelId: req.params.travelId
387  }, function(err, comments) {
388
389      if (err) throw err;
390
391      if (!comments) {
392        res.json({ success: false, message: 'no comments for travelId' });
393    } else if (comments) {
394          // return the information including token as JSON
395		 res.jsonp(comments);
396
397      }
398
399    });
400};