arnaucube
arnaucube/openEventsPlatformServerPublic Self-hosted repository
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};