openEventsPlatformServer/controllers/eventController.js
controllers/eventController.jsRaw
1var express = require("express");
2var app = express();
3var config = require('../config'); // get our config file
4app.set('superSecret', config.secret); // secret variable
5var mongoose = require('mongoose');
6
7var userModel = mongoose.model('userModel');
8var eventModel = mongoose.model('eventModel');
9
10var pageSize = config.pageSize;
11
12var request = require('request');
13
14exports.getCategoriesList = function(req, res) {
15 var categoriesList = [{
16 name: "esport"
17 },
18 {
19 name: "xerrada"
20 },
21 {
22 name: "taller"
23 },
24 {
25 name: "festa"
26 },
27 {
28 name: "concert"
29 },
30 {
31 name: "musica"
32 }
33 ];
34 res.status(200).jsonp(categoriesList);
35};
36exports.getAllEvents = function(req, res) {
37 eventModel.find({
38 date: {
39 $gte: new Date()
40 },
41 type: {
42 $nin: ["alert"]
43 } //cal filtrar per type d'event, aquí només agafem els type: alert
44 })
45 .lean()
46 .populate('user', 'username img shortDescription')
47 .sort('date')
48 .limit(pageSize)
49 .skip(pageSize * Number(req.query.page))
50 .exec(function(err, events) {
51 if (err) return res.send(500, err.message);
52 res.status(200).jsonp(events);
53 });
54};
55exports.getAllAlerts = function(req, res) {
56 eventModel.find({
57 date: {
58 $gte: new Date()
59 },
60 type: "alert"
61 })
62 .lean()
63 .populate('user', 'username img shortDescription')
64 .sort('date')
65 .limit(pageSize)
66 .skip(pageSize * Number(req.query.page))
67 .exec(function(err, events) {
68 if (err) return res.send(500, err.message);
69 res.status(200).jsonp(events);
70 });
71};
72
73exports.getEventById = function(req, res) {
74 eventModel.findOne({
75 _id: req.params.eventid
76 })
77 .lean()
78 .populate('user', 'username img shortDescription')
79 .exec(function(err, event) {
80 if (err) return res.send(500, err.message);
81 if (!event) {
82 res.json({
83 success: false,
84 message: 'event not found.'
85 });
86 } else if (event) {
87
88 res.status(200).jsonp(event);
89 }
90 });
91};
92
93
94function getRandomInt(min, max) {
95 min = Math.ceil(min);
96 max = Math.floor(max);
97 return Math.floor(Math.random() * (max - min)) + min; //The maximum is exclusive and the minimum is inclusive
98}
99
100function postImage(req, res, user, filename, fileImg) {
101 url = "http://127.0.0.1:3050/image";
102 var importFile = function(fileImg) {
103 var decodedFile = new Buffer(fileImg, 'base64');
104 var r = request.post(url, function(err, httpResponse, body) {
105 if (err) {
106 console.log(err);
107 }
108 //console.log(body);
109 addNewEvent(req, res, user, body);
110 });
111 var form = r.form();
112 form.append('file', decodedFile, {
113 filename: filename + '.png'
114 });
115 }
116 importFile(fileImg);
117}
118function addNewEvent(req, res, user, imgUrl){
119 //adding random number to the url, to force ionic reload the image
120 if(imgUrl!=""){
121 req.body.img = imgUrl+ "?" + getRandomInt(1, 9999);
122 }
123 var event = new eventModel({
124 title: req.body.title,
125 description: req.body.description,
126 img: req.body.img,
127 date: req.body.date,
128 categories: req.body.categories,
129 generateddate: Date(),
130 location: req.body.location,
131 user: user._id
132 });
133 event.save(function(err, event) {
134 if (err) return res.send(500, err.message);
135
136 user.events.push(event._id);
137 user.save(function(err, user) {
138 if (err) return res.send(500, err.message);
139 req.params.eventid=event._id;
140 exports.getEventById(req, res);
141 });
142 }); //end of event.save
143}
144exports.addEvent = function(req, res) {
145 userModel.findOne({
146 'tokens.token': req.headers['x-access-token']
147 })
148 .exec(function(err, user) {
149 if (err) return res.send(500, err.message);
150 if (!user) {
151 console.log("user not found");
152 res.json({
153 success: false,
154 message: 'User not found.'
155 });
156 } else if (user) {
157 if (req.body.img) {
158 imgname = getRandomInt(1, 9999) + "_" + getRandomInt(1, 9999);
159 postImage(req, res, user, "event_" + imgname, req.body.img);
160 }else{
161 addNewEvent(req, res, user, "");
162 }
163 }
164 }); //end of usermodel.find
165};
166exports.addAlert = function(req, res) {
167 userModel.findOne({
168 'tokens.token': req.headers['x-access-token']
169 })
170 .exec(function(err, user) {
171 if (err) return res.send(500, err.message);
172 if (!user) {
173 console.log("user not found");
174 res.json({
175 success: false,
176 message: 'User not found.'
177 });
178 } else if (user) {
179 var event = new eventModel({
180 title: req.body.title,
181 description: req.body.description,
182 date: req.body.date,
183 generateddate: Date(),
184 user: user._id,
185 type: "alert"
186 });
187
188 event.save(function(err, event) {
189 if (err) return res.send(500, err.message);
190
191 user.events.push(event._id);
192 user.save(function(err, user) {
193 if (err) return res.send(500, err.message);
194 exports.getAllEvents(req, res);
195 });
196 }); //end of event.save
197 }
198 }); //end of usermodel.find
199};
200exports.deleteEvent = function(req, res) {
201 userModel.findOne({
202 'tokens.token': req.headers['x-access-token']
203 })
204 .exec(function(err, user) {
205 if (err) return res.send(500, err.message);
206 eventModel.findOne({
207 _id: req.params.eventid,
208 user: user._id
209 })
210 .exec(function(err, event) {
211 if (err) return res.send(500, err.message);
212 if (event.user.equals(user._id)) {
213 event.remove(function(err) {
214 if (err) return res.send(500, err.message);
215
216 console.log("deleted");
217 exports.getAllEvents(req, res);
218 });
219 }
220 });
221 });
222}; //funciona, pero no esborra les referències dels users als events que s'esborren. Més endavant caldria fer-ho.
223
224/*
225un get events by following, que seria:
226s'envia un post /events/following
227amb la data:
228{
229 "following": ["user1", "user2", "user3"]
230}
231que bàsicament és una array amb els followings que tens
232això retorna els events d'aquests users que segueixes
233*/
234
235exports.getEventsByFollowingArray = function(req, res) {
236 /*if (req.body.users == null) {
237 res.status(200).jsonp([]);
238 }*/
239 eventModel.find({
240 date: {
241 $gte: new Date()
242 },
243 'user': req.body.users,
244 type: {
245 $nin: ["alert"]
246 } //cal filtrar per type d'event, aquí només agafem els type: alert
247 })
248 .lean()
249 .populate('user', 'username img shortDescription')
250 .sort('date')
251 .limit(pageSize)
252 .skip(pageSize * Number(req.query.page))
253 .exec(function(err, events) {
254 if (err) return res.send(500, err.message);
255
256 console.log(events);
257 res.status(200).jsonp(events);
258 });
259};
260
261/*
262un get events by categories, que seria:
263s'envia un get /events/category/:category
264això retorna els events d'aquests users que segueixes
265*/
266exports.getEventsByCategory = function(req, res) {
267 eventModel.find({
268 date: {
269 $gte: new Date()
270 },
271 'categories.name': req.params.category
272 })
273 .lean()
274 .populate('user', 'username img shortDescription')
275 .sort('date')
276 .limit(pageSize)
277 .skip(pageSize * Number(req.query.page))
278 .exec(function(err, events) {
279 if (err) return res.send(500, err.message);
280 res.status(200).jsonp(events);
281 });
282};
283
284exports.getEventsByDay = function(req, res) {
285 var dayRequested = new Date(req.params.day);
286 eventModel.find({
287 date: {
288 $gte: dayRequested
289 }
290 })
291 .lean()
292 .populate('user', 'username img shortDescription')
293 .sort('date')
294 .limit(pageSize)
295 .skip(pageSize * Number(req.query.page))
296 .exec(function(err, events) {
297 if (err) return res.send(500, err.message);
298 res.status(200).jsonp(events);
299 });
300};