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 req.body.img = imgUrl+ "?" + getRandomInt(1, 9999);
121 var event = new eventModel({
122 title: req.body.title,
123 description: req.body.description,
124 img: req.body.img,
125 date: req.body.date,
126 categories: req.body.categories,
127 generateddate: Date(),
128 location: req.body.location,
129 user: user._id
130 });
131 event.save(function(err, event) {
132 if (err) return res.send(500, err.message);
133
134 user.events.push(event._id);
135 user.save(function(err, user) {
136 if (err) return res.send(500, err.message);
137 req.params.eventid=event._id;
138 exports.getEventById(req, res);
139 });
140 }); //end of event.save
141}
142exports.addEvent = function(req, res) {
143 userModel.findOne({
144 'tokens.token': req.headers['x-access-token']
145 })
146 .exec(function(err, user) {
147 if (err) return res.send(500, err.message);
148 if (!user) {
149 console.log("user not found");
150 res.json({
151 success: false,
152 message: 'User not found.'
153 });
154 } else if (user) {
155 if (req.body.img) {
156 imgname = getRandomInt(1, 9999) + "_" + getRandomInt(1, 9999);
157 postImage(req, res, user, "event_" + imgname, req.body.img);
158 }else{
159 addNewEvent(req, res, user, "");
160 }
161 }
162 }); //end of usermodel.find
163};
164exports.addAlert = function(req, res) {
165 userModel.findOne({
166 'tokens.token': req.headers['x-access-token']
167 })
168 .exec(function(err, user) {
169 if (err) return res.send(500, err.message);
170 if (!user) {
171 console.log("user not found");
172 res.json({
173 success: false,
174 message: 'User not found.'
175 });
176 } else if (user) {
177 var event = new eventModel({
178 title: req.body.title,
179 description: req.body.description,
180 date: req.body.date,
181 generateddate: Date(),
182 user: user._id,
183 type: "alert"
184 });
185
186 event.save(function(err, event) {
187 if (err) return res.send(500, err.message);
188
189 user.events.push(event._id);
190 user.save(function(err, user) {
191 if (err) return res.send(500, err.message);
192 exports.getAllEvents(req, res);
193 });
194 }); //end of event.save
195 }
196 }); //end of usermodel.find
197};
198exports.deleteEvent = function(req, res) {
199 userModel.findOne({
200 'tokens.token': req.headers['x-access-token']
201 })
202 .exec(function(err, user) {
203 if (err) return res.send(500, err.message);
204 eventModel.findOne({
205 _id: req.params.eventid,
206 user: user._id
207 })
208 .exec(function(err, event) {
209 if (err) return res.send(500, err.message);
210 if (event.user.equals(user._id)) {
211 event.remove(function(err) {
212 if (err) return res.send(500, err.message);
213
214 console.log("deleted");
215 exports.getAllEvents(req, res);
216 });
217 }
218 });
219 });
220}; //funciona, pero no esborra les referències dels users als events que s'esborren. Més endavant caldria fer-ho.
221
222/*
223un get events by following, que seria:
224s'envia un post /events/following
225amb la data:
226{
227 "following": ["user1", "user2", "user3"]
228}
229que bàsicament és una array amb els followings que tens
230això retorna els events d'aquests users que segueixes
231*/
232
233exports.getEventsByFollowingArray = function(req, res) {
234 /*if (req.body.users == null) {
235 res.status(200).jsonp([]);
236 }*/
237 eventModel.find({
238 date: {
239 $gte: new Date()
240 },
241 'user': req.body.users,
242 type: {
243 $nin: ["alert"]
244 } //cal filtrar per type d'event, aquí només agafem els type: alert
245 })
246 .lean()
247 .populate('user', 'username img shortDescription')
248 .sort('date')
249 .limit(pageSize)
250 .skip(pageSize * Number(req.query.page))
251 .exec(function(err, events) {
252 if (err) return res.send(500, err.message);
253
254 console.log(events);
255 res.status(200).jsonp(events);
256 });
257};
258
259/*
260un get events by categories, que seria:
261s'envia un get /events/category/:category
262això retorna els events d'aquests users que segueixes
263*/
264exports.getEventsByCategory = function(req, res) {
265 eventModel.find({
266 date: {
267 $gte: new Date()
268 },
269 'categories.name': req.params.category
270 })
271 .lean()
272 .populate('user', 'username img shortDescription')
273 .sort('date')
274 .limit(pageSize)
275 .skip(pageSize * Number(req.query.page))
276 .exec(function(err, events) {
277 if (err) return res.send(500, err.message);
278 res.status(200).jsonp(events);
279 });
280};
281
282exports.getEventsByDay = function(req, res) {
283 var dayRequested = new Date(req.params.day);
284 eventModel.find({
285 date: {
286 $gte: dayRequested
287 }
288 })
289 .lean()
290 .populate('user', 'username img shortDescription')
291 .sort('date')
292 .limit(pageSize)
293 .skip(pageSize * Number(req.query.page))
294 .exec(function(err, events) {
295 if (err) return res.send(500, err.message);
296 res.status(200).jsonp(events);
297 });
298};