implementing notification system

This commit is contained in:
arnaucode
2017-01-26 11:02:42 +01:00
parent 21d477ae41
commit 453225ad33
5 changed files with 72 additions and 69 deletions

View File

@@ -1,6 +1,7 @@
//File: controllers/travelController.js //File: controllers/travelController.js
var mongoose = require('mongoose'); var mongoose = require('mongoose');
var userModel = mongoose.model('userModel'); var userModel = mongoose.model('userModel');
var notificationModel = mongoose.model('notificationModel');
var travelModel = mongoose.model('travelModel'); var travelModel = mongoose.model('travelModel');
var commentModel = mongoose.model('commentModel'); var commentModel = mongoose.model('commentModel');
@@ -141,20 +142,23 @@ exports.addJoinPetition = function(req, res) {
res.json({success: false, message: 'User not found.'}); res.json({success: false, message: 'User not found.'});
} else if (user) { } else if (user) {
//notification //notification
var notification = { var notification = new notificationModel({
type: "join", type: "join",
message: "user "+userJoining.username+" joins your travel "+travel.title, message: "user "+userJoining.username+" joins your travel "+travel.title,
date: new Date(), date: new Date(),
icon: 'join.png', icon: 'join.png',
link: "" link: ""
}; });
user.notifications.push(notification); notification.save(function(err, notification) {
if (err) return res.send(500, err.message);
user.notifications.push(notification._id);
user.save(function(err, user) { user.save(function(err, user) {
if (err) return res.send(500, err.message); if (err) return res.send(500, err.message);
console.log("notification saved"); console.log("notification saved");
exports.getTravelById(req, res); exports.getTravelById(req, res);
}); });
});
} }
});//end saving notification });//end saving notification
}); });
@@ -197,42 +201,21 @@ exports.unJoin = function(req, res) {
}); });
}; };
exports.getJoinsByTravelId = function(req, res) { exports.getTravelsByUserId = function(req, res) {
joinModel.find({
travelId: req.params.travelId
}, function(err, joins) {
if (err) throw err;
if (!joins) {
res.json({ success: false, message: 'no joins for travelId' });
} else if (joins) {
// return the information including token as JSON
res.jsonp(joins);
}
});
};
exports.findAllTravelsFromUsername = function(req, res) {
travelModel.find({ travelModel.find({
owner: req.params.username, user: req.params.userid
date: {$gte: new Date()} })
}, function(err, travels) { .lean()
.populate('joins', 'username avatar')
if (err) throw err; .populate('comments', 'comment user')
.exec(function (err, travels) {
if (err) return res.send(500, err.message);
if (!travels) { if (!travels) {
res.json({ success: false, message: 'no travels for user' }); res.json({success: false, message: 'travel not found.'});
} else if (travels) { } else if (travels) {
console.log(travels);
// return the information including token as JSON
res.jsonp(travels);
res.status(200).jsonp(travels);
} }
}); });
}; };

View File

@@ -1,6 +1,7 @@
//File: controllers/userController.js //File: controllers/userController.js
var mongoose = require('mongoose'); var mongoose = require('mongoose');
var userModel = mongoose.model('userModel'); var userModel = mongoose.model('userModel');
var notificationModel = mongoose.model('notificationModel');
/* */ /* */

View File

@@ -0,0 +1,21 @@
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var mongooseUniqueValidator = require('mongoose-unique-validator');
var notificationSchema = new Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'userModel'
},
state: {type: String, default: "pendent"},//viewed, pendent
message: {type: String},
link: {type: String},//aquí oju, a la app i a la web calen links diferents, però ho podem fer posant sempre a la app i a la web el prefix del link (#!/app) o (#/app/), i després afegint-hi la pàgina on volem enviar el routing, per exemple (dashboard)
icon: {type: String},
date: {type: Date},
dateviewed: {type: Date}
})
notificationSchema.plugin(mongooseUniqueValidator);
module.exports = mongoose.model('notificationModel', notificationSchema);

View File

@@ -33,12 +33,8 @@ var userSchema = new Schema({
ref: 'travelModel' ref: 'travelModel'
}], }],
notifications: [{ notifications: [{
state: {type: String, default: "pendent"},//viewed, pendent type: mongoose.Schema.Types.ObjectId,
message: {type: String}, ref: 'notificationModel'
link: {type: String},//aquí oju, a la app i a la web calen links diferents, però ho podem fer posant sempre a la app i a la web el prefix del link (#!/app) o (#/app/), i després afegint-hi la pàgina on volem enviar el routing, per exemple (dashboard)
icon: {type: String},
date: {type: Date},
dateviewed: {type: Date}
}] }]
}) })

View File

@@ -29,10 +29,10 @@ app.use(morgan('dev'));
// Import Models and controllers // Import Models and controllers
var userMdl = require('./models/userModel')(app, mongoose); var userMdl = require('./models/userModel')(app, mongoose);
var userCtrl = require('./controllers/userController'); var notificationMdl = require('./models/notificationModel')(app, mongoose);
var travelMdl = require('./models/travelModel')(app, mongoose); var travelMdl = require('./models/travelModel')(app, mongoose);
var commentMdl = require('./models/commentModel')(app, mongoose); var commentMdl = require('./models/commentModel')(app, mongoose);
var userCtrl = require('./controllers/userController');
var travelCtrl = require('./controllers/travelController'); var travelCtrl = require('./controllers/travelController');
/*// Example Route /*// Example Route
@@ -61,11 +61,11 @@ apiRoutes.route('/signup')
.post(userCtrl.signup); .post(userCtrl.signup);
apiRoutes.route('/users') apiRoutes.route('/users')
.get(userCtrl.getAllUsers); .get(userCtrl.getAllUsers);
apiRoutes.route('/users/getById/:userid') apiRoutes.route('/users/getByUserId/:userid')
.get(userCtrl.getUserById); .get(userCtrl.getUserById);
apiRoutes.route('/travels') apiRoutes.route('/travels')
.get(travelCtrl.getAllTravels); .get(travelCtrl.getAllTravels);
apiRoutes.route('/travels/getById/:travelid') apiRoutes.route('/travels/getByTravelId/:travelid')
.get(travelCtrl.getTravelById); .get(travelCtrl.getTravelById);
@@ -120,6 +120,8 @@ apiRoutes.route('/travels/join/:travelid')
.get(travelCtrl.addJoinPetition); .get(travelCtrl.addJoinPetition);
apiRoutes.route('/travels/unjoin/:travelid') apiRoutes.route('/travels/unjoin/:travelid')
.get(travelCtrl.unJoin); .get(travelCtrl.unJoin);
apiRoutes.route('/travels/getByUserId/:userid')
.get(travelCtrl.getTravelsByUserId);
//FINS AQUÏ COMPROVAT //FINS AQUÏ COMPROVAT
apiRoutes.route('/travels/comment/:travelid') apiRoutes.route('/travels/comment/:travelid')