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