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