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