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 telegram phone')
24 .populate('joins', 'username avatar')
25 .populate('joinPetitions', 'username avatar')
26 .populate('comments', 'comment user')
27 .exec(function (err, travel) {
28 if (err) return res.send(500, err.message);
29 if (!travel) {
30 res.json({success: false, message: 'travel not found.'});
31 } else if (travel) {
32
33 res.status(200).jsonp(travel);
34 }
35 });
36};
37
38exports.addTravel = function(req, res) {
39 userModel.findOne({'token': req.headers['x-access-token']})
40 .exec(function(err, user){
41 if (err) return res.send(500, err.message);
42 if (!user) {
43 console.log("user not found");
44 res.json({success: false, message: 'User not found.'});
45 } else if (user) {
46 var travel = new travelModel({
47 title: req.body.title,
48 description: req.body.description,
49 user: user._id,
50 from: req.body.from,
51 to: req.body.to,
52 date: req.body.date,
53 periodic: req.body.periodic,
54 generateddate: Date(),
55 seats: req.body.seats,
56 package: req.body.package,
57 collectivized: req.body.collectivized,
58 type: req.body.type
59 });
60
61 travel.save(function(err, travel) {
62 if(err) return res.send(500, err.message);
63
64 user.travels.push(travel._id);
65 user.save(function (err, user) {
66 if (err) return res.send(500, err.message);
67 exports.getAllTravels(req, res);
68 });
69 });//end of travel.save
70 }
71 });//end of usermodel.find
72
73
74};
75
76exports.updateTravel = function(req, res) {
77 userModel.findOne({'token': req.headers['x-access-token']})
78 .exec(function(err, user){
79 if (err) return res.send(500, err.message);
80 console.log(travel);
81 travelModel.findOne({_id: travel._id})
82 .lean()
83 .populate('travels', 'title from to date')
84 .exec(function (err, travel) {
85 if (err) return res.send(500, err.message);
86 if (!travel) {
87 res.json({success: false, message: 'travel not found.'});
88 } else if (travel) {
89
90 res.status(200).jsonp(travel);
91 }
92 });
93 });
94};
95
96//DELETE
97exports.deleteTravel = function(req, res) {
98 userModel.findOne({'token': req.headers['x-access-token']})
99 .exec(function(err, user){
100 if (err) return res.send(500, err.message);
101 travelModel.findById(req.params.travelid, function(err, travel) {
102 if (err) return res.send(500, err.message);
103 if(travel.user.equals(user._id))
104 {
105 travel.remove(function(err) {
106 if(err) return res.send(500, err.message);
107
108 console.log("deleted");
109 exports.getAllTravels(req, res);
110 });
111 }
112 });
113 });
114};
115
116/* join */
117exports.addJoinPetition = function(req, res) {
118 userModel.findOne({'token': req.headers['x-access-token']})
119 .exec(function(err, userJoining){
120 if (err) return res.send(500, err.message);
121 if (!userJoining) {
122 res.json({success: false, message: 'User not found.'});
123 } else if (userJoining) {
124 travelModel.findOne({
125 _id: req.params.travelid,
126 user: {'$ne': userJoining._id},
127 joins: {'$ne': userJoining._id},
128 joinPetitions: {'$ne': userJoining._id}
129 })
130 .exec(function(err, travel){
131 if (err) return res.send(500, err.message);
132 if (!travel) {
133 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'});
134 } else if (travel) {
135 travel.joinPetitions.push(userJoining._id);
136 travel.save(function(err, travel) {
137 if(err) return res.send(500, err.message);
138
139 //start saving notification, get user owner of travel
140 userModel.findOne({_id: travel.user})
141 .exec(function(err, user){
142 if (err) return res.send(500, err.message);
143 if (!user) {
144 res.json({success: false, message: 'User not found.'});
145 } else if (user) {
146 //notification
147 var notification = new notificationModel({
148 concept: "join",
149 message: "user "+userJoining.username+" joins your travel "+travel.title,
150 date: new Date(),
151 icon: 'join.png',
152 link: "travels/" + travel._id
153 });
154 notification.save(function(err, notification) {
155 if (err) return res.send(500, err.message);
156 user.notifications.push(notification._id);
157 user.save(function(err, user) {
158 if (err) return res.send(500, err.message);
159
160 console.log("notification saved");
161 exports.getTravelById(req, res);
162 });
163 });
164 }
165 });//end saving notification
166 });
167 }//end of else if travel
168 });
169 }//end of else if user
170 });
171};
172
173exports.unJoin = function(req, res) {
174 userModel.findOne({'token': req.headers['x-access-token']})
175 .exec(function(err, userJoining){
176 if (!userJoining) {
177 res.json({success: false, message: 'userJoining not found.'});
178 } else if (userJoining) {
179 travelModel.findOne({
180 _id: req.params.travelid,
181 joinPetitions: userJoining._id
182 })
183 .exec(function(err, travel){
184 if (err) return res.send(500, err.message);
185 if (!travel) {
186 res.json({success: false, message: 'can not unjoin this travel'});
187 } else if (travel) {
188 for(var i=0; i<travel.joinPetitions.length; i++)
189 {
190 if(travel.joinPetitions[i].equals(userJoining._id))
191 {
192 travel.joinPetitions.splice(i, 1);
193 }
194 }
195 travel.save(function(err, travel) {
196 if(err) return res.send(500, err.message);
197 //start saving notification, get user owner of travel
198 userModel.findOne({_id: travel.user})
199 .exec(function(err, user){
200 if (err) return res.send(500, err.message);
201 if (!user) {
202 res.json({success: false, message: 'User not found.'});
203 } else if (user) {
204 //notification
205 var notification = new notificationModel({
206 concept: "unjoin",
207 message: "user "+userJoining.username+" unjoins your travel "+travel.title,
208 date: new Date(),
209 icon: 'unjoin.png',
210 link: "travels/" + travel._id
211 });
212 notification.save(function(err, notification) {
213 if (err) return res.send(500, err.message);
214 user.notifications.push(notification._id);
215 user.save(function(err, user) {
216 if (err) return res.send(500, err.message);
217
218 console.log("notification saved");
219 exports.getTravelById(req, res);
220 });
221 });
222 }
223 });//end saving notification
224 });
225 }
226 });
227 }
228
229 });
230};
231
232exports.acceptJoin = function(req, res) {
233 userModel.findOne({'token': req.headers['x-access-token']})
234 .exec(function(err, userOwner){
235 if (err) return res.send(500, err.message);
236 if (!userOwner) {
237 res.json({success: false, message: 'User not found.'});
238 } else if (userOwner) {
239 travelModel.findOne({
240 _id: req.params.travelid,
241 user: userOwner._id,
242 joinPetitions: req.body.userid
243 })
244 .exec(function(err, travel){
245 if (err) return res.send(500, err.message);
246 if (!travel) {
247 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'});
248 } else if (travel) {
249 var indexPetition=-1;
250 for(var i=0; i<travel.joinPetitions.length; i++)
251 {
252 if(travel.joinPetitions[i].equals(req.body.userid))
253 {
254 indexPetition=JSON.parse(JSON.stringify(i));
255 }
256 }
257 if(indexPetition>-1)
258 {
259 travel.joins.push(JSON.parse(JSON.stringify(travel.joinPetitions[indexPetition])));
260 travel.joinPetitions.splice(indexPetition, 1);
261 console.log(travel);
262 }
263 travel.save(function(err, travel) {
264 if(err) return res.send(500, err.message);
265
266 //start saving notification, get user owner of travel
267 userModel.findOne({_id: req.body.userid})
268 .exec(function(err, user){
269 if (err) return res.send(500, err.message);
270 if (!user) {
271 res.json({success: false, message: 'User not found.'});
272 } else if (user) {
273 //notification
274 var notification = new notificationModel({
275 concept: "travel",
276 message: "user "+userOwner.username+" accepts your petition for "+travel.title,
277 date: new Date(),
278 icon: 'travel.png',
279 link: "travels/" + travel._id
280 });
281 notification.save(function(err, notification) {
282 if (err) return res.send(500, err.message);
283 user.notifications.push(notification._id);
284 user.save(function(err, user) {
285 if (err) return res.send(500, err.message);
286
287 console.log("notification saved");
288 exports.getTravelById(req, res);
289 });
290 });
291 }
292 });//end saving notification
293 });//end of travel save
294 }//end of else if travel
295 });
296 }//end of else if user
297 });
298};
299
300exports.getTravelsByUserId = function(req, res) {
301 travelModel.find({
302 user: req.params.userid
303 })
304 .lean()
305 .populate('joins', 'username avatar')
306 .populate('comments', 'comment user')
307 .exec(function (err, travels) {
308 if (err) return res.send(500, err.message);
309 if (!travels) {
310 res.json({success: false, message: 'travel not found.'});
311 } else if (travels) {
312
313 res.status(200).jsonp(travels);
314 }
315 });
316};
317
318
319
320
321
322
323/* comment */
324exports.addComment = function(req, res) {
325 /*var comment = new commentModel({
326 travelId: req.params.travelId,
327 commentUserId: req.body.commentUserId,
328 commentUsername: req.body.commentUsername,
329 comment: req.body.comment,
330 commentAvatar: req.body.commentAvatar
331 });
332
333 comment.save(function(err, comment) {
334 if(err) return res.send(500, err.message);
335 res.status(200).jsonp(comment);
336 });*/
337 userModel.find({
338 token: req.headers['x-access-token']
339 }, function(err, users){
340 var user=users[0];
341
342 travelModel.findById(req.params.travelId, function(err, travel){
343 console.log(travel.title);
344 var comment = {
345 commentUserId: user._id,
346 commentUsername: user.username,
347 comment: req.body.comment,
348 commentAvatar: user.avatar
349 };
350 travel.comments.push(comment);
351
352 travel.save(function(err, travel) {
353 if(err) return res.send(500, err.message);
354 //res.status(200).jsonp(travel);
355 travelModel.find({date: {$gte: new Date()}}, function(err, travels) {
356 if(err) res.send(500, err.message);
357 res.status(200).jsonp(travels);
358 });
359 });
360
361 //start saving notification, get user owner of travel
362 userModel.find({
363 username: travel.owner
364 }, function(err, userowners) {
365 var userowner=userowners[0];
366 //notification
367 var notification = {
368 concept: "comment",
369 otherusername: user.username,
370 description: "user "+user.username+" comments your travel "+travel.title,
371 date: new Date(),
372 link: ""
373 };
374 userowner.notifications.push(notification);
375 userowner.save(function(err, userowner) {
376 console.log("notification saved");
377 });
378 });//end saving notification
379
380 });
381 });//end of userModel.find
382};
383
384exports.getCommentsByTravelId = function(req, res) {
385 commentModel.find({
386 travelId: req.params.travelId
387 }, function(err, comments) {
388
389 if (err) throw err;
390
391 if (!comments) {
392 res.json({ success: false, message: 'no comments for travelId' });
393 } else if (comments) {
394 // return the information including token as JSON
395 res.jsonp(comments);
396
397 }
398
399 });
400};