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