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									type: "join",
148									message: "user "+userJoining.username+" joins your travel "+travel.title,
149									date: new Date(),
150									icon: 'join.png',
151									link: ""
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, user){
175		if (!user) {
176            res.json({success: false, message: 'User not found.'});
177        } else if (user) {
178			travelModel.findOne({
179				_id: req.params.travelid,
180				joinPetitions: user._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(user._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						exports.getTravelById(req, res);
197					});
198				}
199			});
200		}
201
202	});
203};
204
205exports.getTravelsByUserId = function(req, res) {
206	travelModel.find({
207		user: req.params.userid
208	})
209	.lean()
210	.populate('joins', 'username avatar')
211	.populate('comments', 'comment user')
212	.exec(function (err, travels) {
213		if (err) return res.send(500, err.message);
214		if (!travels) {
215			res.json({success: false, message: 'travel not found.'});
216		} else if (travels) {
217
218			res.status(200).jsonp(travels);
219		}
220	});
221};
222
223
224
225
226
227
228/* comment */
229exports.addComment = function(req, res) {
230	/*var comment = new commentModel({
231		travelId: req.params.travelId,
232		commentUserId: req.body.commentUserId,
233		commentUsername: req.body.commentUsername,
234		comment: req.body.comment,
235		commentAvatar: req.body.commentAvatar
236	});
237
238	comment.save(function(err, comment) {
239		if(err) return res.send(500, err.message);
240    res.status(200).jsonp(comment);
241	});*/
242	userModel.find({
243		token: req.headers['x-access-token']
244	}, function(err, users){
245		var user=users[0];
246
247		travelModel.findById(req.params.travelId, function(err, travel){
248			console.log(travel.title);
249			var comment = {
250				commentUserId: user._id,
251				commentUsername: user.username,
252				comment: req.body.comment,
253				commentAvatar: user.avatar
254			};
255			travel.comments.push(comment);
256
257			travel.save(function(err, travel) {
258				if(err) return res.send(500, err.message);
259		    //res.status(200).jsonp(travel);
260				travelModel.find({date: {$gte: new Date()}}, function(err, travels) {
261				    if(err) res.send(500, err.message);
262						res.status(200).jsonp(travels);
263				});
264			});
265
266			//start saving notification, get user owner of travel
267			userModel.find({
268		      username: travel.owner
269		  }, function(err, userowners) {
270				var userowner=userowners[0];
271				//notification
272				var notification = {
273					type: "comment",
274					otherusername: user.username,
275					description: "user "+user.username+" comments your travel "+travel.title,
276					date: new Date(),
277					link: ""
278				};
279				userowner.notifications.push(notification);
280				userowner.save(function(err, userowner) {
281					console.log("notification saved");
282				});
283			});//end saving notification
284
285		});
286	});//end of userModel.find
287};
288
289exports.getCommentsByTravelId = function(req, res) {
290    commentModel.find({
291      travelId: req.params.travelId
292  }, function(err, comments) {
293
294      if (err) throw err;
295
296      if (!comments) {
297        res.json({ success: false, message: 'no comments for travelId' });
298    } else if (comments) {
299          // return the information including token as JSON
300		 res.jsonp(comments);
301
302      }
303
304    });
305};