New Features

- added notifications
- added toggle switches
- added delete feature
- added email verification
This commit is contained in:
Luke Vella 2015-01-26 13:11:48 +01:00
parent e61ef151f6
commit 1b20a11bba
91 changed files with 6859 additions and 2756 deletions

View file

@ -1,12 +1,40 @@
var express = require('express');
var Event = require('./event.model');
var debug = require('debug')('myapp');
var debug = require('debug')('eventapi');
var communicator = require('../../communicator');
exports.create = function(req, res){
var getRandomString = function(){
return require('crypto').randomBytes(16).toString('hex');
}
exports.verifyEmail = function(req, res, next){
var id = req.params.id,
code = req.params.code;
Event.update({
'_id' : id,
'__private.verificationCode' : code
}, {
'creator.isVerified' : true ,
'__private.verificationCode' : getRandomString()
}, function(err, num){
if (err) return handleError(res, err);
if (num == 0) return res.status(498).end();
next();
});
}
exports.create = function(req, res, next){
var event = req.body;
event.__private = {
'verificationCode' : getRandomString(),
'deleteCode' : getRandomString()
}
Event.create(req.body, function(err, event){
if (err) return handleError(res, err);
if (!event) return res.status(404);
return res.json(event);
communicator.emit('event:create', event);
req.event = event;
next();
});
}
@ -14,34 +42,103 @@ exports.show = function(req, res, next){
Event.findById(req.params.id, function(err, event){
if (err) return handleError(res, err);
if (!event) return res.status(404).end();
return res.json(event);
req.event = event;
next();
});
}
exports.update = function(req, res){
req.body.updated = Date.now();
Event.update({ '_id' : req.params.id }, req.body, function(){
return res.status(204).end();
var updatedEvent = req.body;
updatedEvent.updated = Date.now();
Event.findById(req.params.id, function(err, event){
if (err) return handleError(res, err);
if (!event) return res.status(404).end();
// If the creator's email has changed OR the notifications setting has changed - start a new email confirmation transaction
if (event.creator.email != updatedEvent.creator.email ||
(!event.creator.allowNotifications && updatedEvent.creator.allowNotifications)) {
updatedEvent.creator.isVerified = false;
updatedEvent.creator.allowNotifications = true;
updatedEvent.__private = event.__private;
communicator.emit('event:update:creator.email', updatedEvent, event);
}
Event.update({ '_id' : req.params.id }, updatedEvent, function(){
communicator.emit('event:update', updatedEvent, event);
return res.status(204).end();
});
});
}
exports.delete = function(req, res, next){
var eventId = req.params.id,
code = req.params.code;
if (code){
Event.update({
'_id' : eventId,
'__private.deleteCode' : code
}, {
'isDeleted' : true ,
'__private.deleteCode' : getRandomString()
}, function(err, num){
if (err) return handleError(res, err);
if (num == 0) return res.status(498).end();
next();
});
} else {
Event.findById(eventId, function(err, event){
if (err) return handleError(res, err);
if (!event) return res.status(404).end();
communicator.emit('event:delete', event);
next();
});
}
}
exports.createComment = function(req, res, next){
var eventId = req.params.id,
comment = req.body;
Event.findById(eventId, function(err, event){
if (err) return handleError(res, err);
event.comments.push(comment);
event.save(function(err, event){
if (err) return next(err);
req.event = event;
next();
});
});
}
exports.deleteComment = function(req, res, next){
var eventId = req.params.id,
commentId = req.params.cid;
Event.findById(eventId, function(err, event){
if (err) return handleError(res, err);
event.comments.pull({ '_id' : commentId });
event.save(function(err, event){
req.event = event;
next();
})
});
}
exports.createParticipant = function(req, res, next){
var eventId = req.params.id;
var participant = req.body;
var eventId = req.params.id,
participant = req.body;
Event.findById(eventId, function(err, event){
if (err) return handleError(res, err);
event.updated = Date.now();
event.participants.push(participant);
event.save(function(err, event){
if (err) return next(err);
res.json(event);
req.event = event;
next();
});
});
}
exports.updateParticipant = function(req, res, next){
var eventId = req.params.id;
var participantId = req.params.pid;
var eventId = req.params.id,
participantId = req.params.pid;
Event.update({
'_id' : eventId,
'participants._id': participantId
@ -51,20 +148,21 @@ exports.updateParticipant = function(req, res, next){
'participants.$' : req.body
}
}, function(err, num){
if (err) return next(err);
if (err) return handleError(res, err);
res.status(204).end();
});
}
exports.deleteParticipant = function(req, res, next){
var eventId = req.params.id;
var participantId = req.params.pid;
var eventId = req.params.id,
participantId = req.params.pid;
Event.findById(eventId, function(err, event){
if (err) return handleError(res, err);
event.updated = Date.now();
event.participants.pull({ '_id' : participantId });
event.save(function(err, event){
res.json(event);
req.event = event;
next();
})
});
}