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 console.log(err);
 77        console.log(user);
 78        userModel.findOne({_id: user._id})
 79        .lean()
 80        .populate('travels', 'title from to date')
 81        .exec(function (err, user) {
 82            if (err) return res.send(500, err.message);
 83            if (!user) {
 84                res.json({success: false, message: 'User not found.'});
 85            } else if (user) {
 86
 87                res.status(200).jsonp(user);
 88            }
 89        });
 90    });
 91};
 92
 93//DELETE
 94exports.deleteTravel = function(req, res) {
 95	userModel.find({
 96		token: req.headers['x-access-token']
 97	}, function(err, users){
 98		var user=users[0];
 99
100		travelModel.findById(req.params.id, function(err, travel) {
101			if(travel.owner==user.username)
102			{
103				travel.remove(function(err) {
104					if(err) return res.send(500, err.message);
105
106					travelModel.find({date: {$gte: new Date()}}, function(err, travels) {
107							if(err) res.send(500, err.message);
108							res.status(200).jsonp(travels);
109					});
110				});
111			}
112		});
113	});
114};
115
116/* join */
117exports.addJoin = function(req, res) {
118	userModel.findOne({'token': req.headers['x-access-token']})
119	.exec(function(err, user){
120		travelModel.findById(req.params.travelId, function(err, travel){
121			console.log(travel.title);
122			var join = {
123				joinedUserId: user._id,
124				joinedUsername: user.username,
125				acceptedUserId: req.body.acceptedUserId,
126				joinedAvatar: user.avatar
127			};
128			travel.joins.push(join);
129
130
131
132			travel.save(function(err, travel) {
133				if(err) return res.send(500, err.message);
134		    //res.status(200).jsonp(travel);
135				travelModel.find({date: {$gte: new Date()}}, function(err, travels) {
136				    if(err) res.send(500, err.message);
137						res.status(200).jsonp(travels);
138				});
139			});
140
141			//start saving notification, get user owner of travel
142			userModel.find({
143		      username: travel.owner
144		  }, function(err, userowners) {
145				var userowner=userowners[0];
146				//notification
147				var notification = {
148					type: "join",
149					otherusername: user.username,
150					description: "user "+user.username+" joins your travel "+travel.title,
151					date: new Date(),
152					link: ""
153				};
154				userowner.notifications.push(notification);
155				userowner.save(function(err, userowner) {
156					console.log("notification saved");
157				});
158			});//end saving notification
159
160		});
161
162	});
163};
164
165exports.doUnjoin = function(req, res) {
166	userModel.find({
167		token: req.headers['x-access-token']
168	}, function(err, users){
169		var user=users[0];
170
171		travelModel.findById(req.params.travelId, function(err, travel){
172			for(var i=0; i<travel.joins.length; i++)
173			{
174				if(travel.joins[i].joinedUsername==user.username)
175				{
176					travel.joins.splice(i, 1);
177				}
178			}
179
180			travel.save(function(err, travel) {
181				if(err) return res.send(500, err.message);
182				//res.status(200).jsonp(travel);
183				travelModel.find({date: {$gte: new Date()}}, function(err, travels) {
184				    if(err) res.send(500, err.message);
185						res.status(200).jsonp(travels);
186				});
187			});
188
189		});
190	});
191};
192
193exports.getJoinsByTravelId = function(req, res) {
194    joinModel.find({
195      travelId: req.params.travelId
196  }, function(err, joins) {
197
198      if (err) throw err;
199
200      if (!joins) {
201        res.json({ success: false, message: 'no joins for travelId' });
202    } else if (joins) {
203          // return the information including token as JSON
204		 res.jsonp(joins);
205
206      }
207
208    });
209};
210
211exports.findAllTravelsFromUsername = function(req, res) {
212    travelModel.find({
213      owner: req.params.username,
214			date: {$gte: new Date()}
215  }, function(err, travels) {
216
217      if (err) throw err;
218
219      if (!travels) {
220        res.json({ success: false, message: 'no travels for user' });
221    } else if (travels) {
222        console.log(travels);
223          // return the information including token as JSON
224          res.jsonp(travels);
225
226
227      }
228
229    });
230};
231
232
233
234
235
236
237/* comment */
238exports.addComment = function(req, res) {
239	/*var comment = new commentModel({
240		travelId: req.params.travelId,
241		commentUserId: req.body.commentUserId,
242		commentUsername: req.body.commentUsername,
243		comment: req.body.comment,
244		commentAvatar: req.body.commentAvatar
245	});
246
247	comment.save(function(err, comment) {
248		if(err) return res.send(500, err.message);
249    res.status(200).jsonp(comment);
250	});*/
251	userModel.find({
252		token: req.headers['x-access-token']
253	}, function(err, users){
254		var user=users[0];
255
256		travelModel.findById(req.params.travelId, function(err, travel){
257			console.log(travel.title);
258			var comment = {
259				commentUserId: user._id,
260				commentUsername: user.username,
261				comment: req.body.comment,
262				commentAvatar: user.avatar
263			};
264			travel.comments.push(comment);
265
266			travel.save(function(err, travel) {
267				if(err) return res.send(500, err.message);
268		    //res.status(200).jsonp(travel);
269				travelModel.find({date: {$gte: new Date()}}, function(err, travels) {
270				    if(err) res.send(500, err.message);
271						res.status(200).jsonp(travels);
272				});
273			});
274
275			//start saving notification, get user owner of travel
276			userModel.find({
277		      username: travel.owner
278		  }, function(err, userowners) {
279				var userowner=userowners[0];
280				//notification
281				var notification = {
282					type: "comment",
283					otherusername: user.username,
284					description: "user "+user.username+" comments your travel "+travel.title,
285					date: new Date(),
286					link: ""
287				};
288				userowner.notifications.push(notification);
289				userowner.save(function(err, userowner) {
290					console.log("notification saved");
291				});
292			});//end saving notification
293
294		});
295	});//end of userModel.find
296};
297
298exports.getCommentsByTravelId = function(req, res) {
299    commentModel.find({
300      travelId: req.params.travelId
301  }, function(err, comments) {
302
303      if (err) throw err;
304
305      if (!comments) {
306        res.json({ success: false, message: 'no comments for travelId' });
307    } else if (comments) {
308          // return the information including token as JSON
309		 res.jsonp(comments);
310
311      }
312
313    });
314};