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