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};