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('joins', 'username avatar')
24 .populate('comments', 'comment user')
25 .exec(function (err, travel) {
26 if (err) return res.send(500, err.message);
27 if (!travel) {
28 res.json({success: false, message: 'travel not found.'});
29 } else if (travel) {
30
31 res.status(200).jsonp(travel);
32 }
33 });
34};
35
36exports.addTravel = function(req, res) {
37 userModel.findOne({'token': req.headers['x-access-token']})
38 .exec(function(err, user){
39 if (err) return res.send(500, err.message);
40 if (!user) {
41 console.log("user not found");
42 res.json({success: false, message: 'User not found.'});
43 } else if (user) {
44 var travel = new travelModel({
45 title: req.body.title,
46 description: req.body.description,
47 user: user._id,
48 from: req.body.from,
49 to: req.body.to,
50 date: req.body.date,
51 periodic: req.body.periodic,
52 generateddate: Date(),
53 seats: req.body.seats,
54 package: req.body.package,
55 collectivized: req.body.collectivized,
56 type: req.body.modality
57 });
58
59 travel.save(function(err, travel) {
60 if(err) return res.send(500, err.message);
61
62 user.travels.push(travel._id);
63 user.save(function (err, user) {
64 if (err) return res.send(500, err.message);
65 exports.getAllTravels(req, res);
66 });
67 });//end of travel.save
68 }
69 });//end of usermodel.find
70
71
72};
73
74exports.updateTravel = function(req, res) {
75 userModel.findOne({'token': req.headers['x-access-token']})
76 .exec(function(err, user){
77 if (err) return res.send(500, err.message);
78 console.log(travel);
79 travelModel.findOne({_id: travel._id})
80 .lean()
81 .populate('travels', 'title from to date')
82 .exec(function (err, travel) {
83 if (err) return res.send(500, err.message);
84 if (!travel) {
85 res.json({success: false, message: 'travel not found.'});
86 } else if (travel) {
87
88 res.status(200).jsonp(travel);
89 }
90 });
91 });
92};
93
94//DELETE
95exports.deleteTravel = function(req, res) {
96 userModel.findOne({'token': req.headers['x-access-token']})
97 .exec(function(err, user){
98 if (err) return res.send(500, err.message);
99 travelModel.findById(req.params.travelid, function(err, travel) {
100 if (err) return res.send(500, err.message);
101 if(travel.user.equals(user._id))
102 {
103 travel.remove(function(err) {
104 if(err) return res.send(500, err.message);
105
106 console.log("deleted");
107 exports.getAllTravels(req, res);
108 });
109 }
110 });
111 });
112};
113
114/* join */
115exports.addJoinPetition = function(req, res) {
116 userModel.findOne({'token': req.headers['x-access-token']})
117 .exec(function(err, userJoining){
118 if (err) return res.send(500, err.message);
119 if (!userJoining) {
120 res.json({success: false, message: 'User not found.'});
121 } else if (userJoining) {
122 travelModel.findOne({
123 _id: req.params.travelid,
124 user: {'$ne': userJoining._id},
125 joins: {'$ne': userJoining._id},
126 joinPetitions: {'$ne': userJoining._id}
127 })
128 .exec(function(err, travel){
129 if (err) return res.send(500, err.message);
130 if (!travel) {
131 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'});
132 } else if (travel) {
133 travel.joinPetitions.push(userJoining._id);
134 travel.save(function(err, travel) {
135 if(err) return res.send(500, err.message);
136
137 //start saving notification, get user owner of travel
138 userModel.findOne({_id: travel.user})
139 .exec(function(err, user){
140 if (err) return res.send(500, err.message);
141 if (!user) {
142 res.json({success: false, message: 'User not found.'});
143 } else if (user) {
144 //notification
145 var notification = new notificationModel({
146 type: "join",
147 message: "user "+userJoining.username+" joins your travel "+travel.title,
148 date: new Date(),
149 icon: 'join.png',
150 link: ""
151 });
152 notification.save(function(err, notification) {
153 if (err) return res.send(500, err.message);
154 user.notifications.push(notification._id);
155 user.save(function(err, user) {
156 if (err) return res.send(500, err.message);
157
158 console.log("notification saved");
159 exports.getTravelById(req, res);
160 });
161 });
162 }
163 });//end saving notification
164 });
165 }//end of else if travel
166 });
167 }//end of else if user
168 });
169};
170
171exports.unJoin = function(req, res) {
172 userModel.findOne({'token': req.headers['x-access-token']})
173 .exec(function(err, user){
174 if (!user) {
175 res.json({success: false, message: 'User not found.'});
176 } else if (user) {
177 travelModel.findOne({
178 _id: req.params.travelid,
179 joinPetitions: user._id
180 })
181 .exec(function(err, travel){
182 if (err) return res.send(500, err.message);
183 if (!travel) {
184 res.json({success: false, message: 'can not unjoin this travel'});
185 } else if (travel) {
186 for(var i=0; i<travel.joinPetitions.length; i++)
187 {
188 if(travel.joinPetitions[i].equals(user._id))
189 {
190 travel.joinPetitions.splice(i, 1);
191 }
192 }
193 travel.save(function(err, travel) {
194 if(err) return res.send(500, err.message);
195 exports.getTravelById(req, res);
196 });
197 }
198 });
199 }
200
201 });
202};
203
204exports.getTravelsByUserId = function(req, res) {
205 travelModel.find({
206 user: req.params.userid
207 })
208 .lean()
209 .populate('joins', 'username avatar')
210 .populate('comments', 'comment user')
211 .exec(function (err, travels) {
212 if (err) return res.send(500, err.message);
213 if (!travels) {
214 res.json({success: false, message: 'travel not found.'});
215 } else if (travels) {
216
217 res.status(200).jsonp(travels);
218 }
219 });
220};
221
222
223
224
225
226
227/* comment */
228exports.addComment = function(req, res) {
229 /*var comment = new commentModel({
230 travelId: req.params.travelId,
231 commentUserId: req.body.commentUserId,
232 commentUsername: req.body.commentUsername,
233 comment: req.body.comment,
234 commentAvatar: req.body.commentAvatar
235 });
236
237 comment.save(function(err, comment) {
238 if(err) return res.send(500, err.message);
239 res.status(200).jsonp(comment);
240 });*/
241 userModel.find({
242 token: req.headers['x-access-token']
243 }, function(err, users){
244 var user=users[0];
245
246 travelModel.findById(req.params.travelId, function(err, travel){
247 console.log(travel.title);
248 var comment = {
249 commentUserId: user._id,
250 commentUsername: user.username,
251 comment: req.body.comment,
252 commentAvatar: user.avatar
253 };
254 travel.comments.push(comment);
255
256 travel.save(function(err, travel) {
257 if(err) return res.send(500, err.message);
258 //res.status(200).jsonp(travel);
259 travelModel.find({date: {$gte: new Date()}}, function(err, travels) {
260 if(err) res.send(500, err.message);
261 res.status(200).jsonp(travels);
262 });
263 });
264
265 //start saving notification, get user owner of travel
266 userModel.find({
267 username: travel.owner
268 }, function(err, userowners) {
269 var userowner=userowners[0];
270 //notification
271 var notification = {
272 type: "comment",
273 otherusername: user.username,
274 description: "user "+user.username+" comments your travel "+travel.title,
275 date: new Date(),
276 link: ""
277 };
278 userowner.notifications.push(notification);
279 userowner.save(function(err, userowner) {
280 console.log("notification saved");
281 });
282 });//end saving notification
283
284 });
285 });//end of userModel.find
286};
287
288exports.getCommentsByTravelId = function(req, res) {
289 commentModel.find({
290 travelId: req.params.travelId
291 }, function(err, comments) {
292
293 if (err) throw err;
294
295 if (!comments) {
296 res.json({ success: false, message: 'no comments for travelId' });
297 } else if (comments) {
298 // return the information including token as JSON
299 res.jsonp(comments);
300
301 }
302
303 });
304};