var express = require('express');
|
|
var app = express();
|
|
var publicationModel = require('../models/publicationModel');
|
|
var userModel = require('../models/userModel');
|
|
//var trainerModel = require('../models/trainerModel');
|
|
var crypto = require('crypto');
|
|
|
|
/**GET '/publications' **/
|
|
exports.getAllPublications = function (req, res) {
|
|
publicationModel.find()
|
|
.limit(Number(req.query.pageSize))
|
|
.skip(Number(req.query.pageSize)*Number(req.query.page))
|
|
.lean()
|
|
.populate('user', 'name avatar')
|
|
.exec(function (err, publications) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!publications) {
|
|
//
|
|
} else if (publications) {
|
|
res.status(200).jsonp(publications);
|
|
}
|
|
});
|
|
};
|
|
/** GET '/publications/getById/:publicationid' **/
|
|
exports.getPublicationById = function (req, res) {
|
|
publicationModel.findOne({_id: req.params.publicationid})
|
|
.lean()
|
|
.populate('likes', 'name avatar')
|
|
.exec(function (err, publication) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!publication) {
|
|
res.json({success: false, message: 'publication not found.'});
|
|
} else if (publication) {
|
|
res.status(200).jsonp(publication);
|
|
}
|
|
});
|
|
};
|
|
/**POST '/publications' **/
|
|
exports.postPublication = function (req, res) {
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!user) {
|
|
res.json({success: false, message: 'user not found.'});
|
|
} else if (user) {
|
|
//aquí ja hem agafat el user a partir del seu token
|
|
var publication = new publicationModel({
|
|
title: req.body.title,
|
|
content: req.body.content,
|
|
date: new Date(),
|
|
user: user._id,
|
|
photo: req.body.photo
|
|
});
|
|
//fins aquí tenim la variable publication amb els continguts
|
|
//ara cal 1r guardar el model publication a la base de dades
|
|
publication.save(function (err, publication) {
|
|
if (err) return res.send(500, err.message);
|
|
|
|
//i 2n, afegir la id de la publicació generada al user.publications
|
|
user.publications.push(publication._id);
|
|
/* gamification */
|
|
var reward = {
|
|
concept: "added new publication to Timeline",
|
|
date: Date(),
|
|
value: +1
|
|
};
|
|
user.points.history.push(reward);
|
|
user.points.total = user.points.total + 1;
|
|
/* end of gamification */
|
|
user.save(function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
res.status(200).jsonp(user);
|
|
});
|
|
});
|
|
}//end else if
|
|
});
|
|
};
|
|
|
|
/**GET '/users/:userid/publications' **/
|
|
exports.getUserPublicationsByUserId = function (req, res) {
|
|
userModel.findOne({_id: req.params.userid}, function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
}).populate('publications')
|
|
.exec(function (error, user) {
|
|
if (error !== null) res.send(500, error.message);
|
|
console.log(JSON.stringify(user, null, "\t"));
|
|
res.status(200).jsonp(user.publications);
|
|
});
|
|
};
|
|
|
|
/**DELETE '/publications/:publicationid' **/
|
|
exports.deletePublicationById = function (req, res) {
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!user) {
|
|
res.json({success: false, message: 'user not found.'});
|
|
} else if (user) {
|
|
for (var i = 0; i < user.publications.length; i++) {
|
|
if (user.publications[i].equals(req.params.publicationid)) {//només si el user és qui ha fet la publication la pot esborrar
|
|
user.publications.splice(i, 1);
|
|
user.save(function (err, user) {//guardem l'user
|
|
if (err) return res.send(500, err.message);
|
|
|
|
publicationModel.findByIdAndRemove({_id: req.params.publicationid}, function (err) {
|
|
if (err !== null) return res.send(500, err.message);
|
|
res.status(200).jsonp('Deleted');
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
/** POST '/publications/:publicationid/like' **/
|
|
exports.likePublication = function (req, res) {
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!user) {
|
|
res.json({success: false, message: 'user not found.'});
|
|
} else if (user) {
|
|
console.log(user.name);
|
|
//ara busquem el userB
|
|
publicationModel.findOne({_id: req.params.publicationid}, function (err, publication) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!publication) {
|
|
res.json({success: false, message: 'publication not found.'});
|
|
} else if (publication) {
|
|
|
|
// for(var i=0; i<userB.timeline)
|
|
publication.likes.push(user._id);
|
|
publication.save(function (err, publication) {
|
|
if (err) return res.send(500, err.message);
|
|
|
|
/* gamification */
|
|
var reward = {
|
|
concept: "liked publication " + publication.title,
|
|
date: Date(),
|
|
value: +1
|
|
};
|
|
user.points.history.push(reward);
|
|
user.points.total = user.points.total + 1;
|
|
/* end of gamification */
|
|
user.save(function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
//ara busquem el user que ha fet la publication que ha rebut el like
|
|
userModel.findOne({_id: publication.user})
|
|
.exec(function (err, userB) {
|
|
/*notification*/
|
|
var notification = {
|
|
state: "pendent",
|
|
message: "user clicked like",
|
|
link: "user/"+userB._id,
|
|
icon: "newlike.png",
|
|
date: Date()
|
|
};
|
|
userB.notifications.push(notification);
|
|
/* end of notification*/
|
|
userB.save(function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
publicationModel.findOne({_id: req.params.publicationid})
|
|
.lean()
|
|
.populate('user', 'name avatar')
|
|
.exec(function (err, publication) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!publication) {
|
|
//
|
|
} else if (publication) {
|
|
res.status(200).jsonp(publication);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
}//end else if
|
|
});
|
|
}//end else if
|
|
});
|
|
};
|
|
|
|
/** POST '/publications/:publicationid/dislike' **/
|
|
exports.dislikePublication = function (req, res) {
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!user) {
|
|
res.json({success: false, message: 'user not found.'});
|
|
} else if (user) {
|
|
console.log(user.name);
|
|
//ara busquem el userB
|
|
publicationModel.findOne({_id: req.params.publicationid}, function (err, publication) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!publication) {
|
|
res.json({success: false, message: 'publication not found.'});
|
|
} else if (publication) {
|
|
|
|
for (var i = 0; i < publication.likes.length; i++) {
|
|
if (publication.likes[i].equals(user._id)) {
|
|
publication.likes.splice(i, 1);
|
|
}
|
|
}
|
|
publication.save(function (err, publication) {
|
|
if (err) return res.send(500, err.message);
|
|
|
|
/* gamification */
|
|
var reward = {
|
|
concept: "disliked publication " + publication.title,
|
|
date: Date(),
|
|
value: -1
|
|
};
|
|
user.points.history.push(reward);
|
|
user.points.total = user.points.total - 1;
|
|
/* end of gamification */
|
|
user.save(function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
|
|
publicationModel.findOne({_id: req.params.publicationid})
|
|
.lean()
|
|
.populate('user', 'name avatar')
|
|
.exec(function (err, publication) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!publication) {
|
|
//
|
|
} else if (publication) {
|
|
res.status(200).jsonp(publication);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}//end else if
|
|
});
|
|
}//end else if
|
|
});
|
|
};
|
|
|
|
/** GET '/publications/newsfeed' **/
|
|
var ObjectId = require('mongodb').ObjectID;
|
|
exports.getNewsFeed = function (req, res) {//getPublicationsFromFollowingUsers
|
|
//primer agafem l'user que fa la petició, per saber quins users està seguint
|
|
var newsfeed = [];
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token']})
|
|
.exec(function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!user) {
|
|
res.json({success: false, message: 'getting newsfeed failed. user not found.'});
|
|
} else if (user) {
|
|
console.log("getting newsfeed for user: " + user.name);
|
|
|
|
var following = [];
|
|
for (var i = 0; i < user.following.length; i++) {//això ho fem perquè necessitem la array amb el contingut en format objectid
|
|
following.push(new ObjectId(user.following[i]));
|
|
}
|
|
following.push(new ObjectId(user._id));//així també reb les seves pròpies publicacions
|
|
|
|
publicationModel.find({user: {$in: following}})
|
|
.lean()
|
|
.populate('user', 'name avatar')
|
|
.exec(function (err, publications) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!publications) {
|
|
//
|
|
} else if (publications) {
|
|
res.status(200).jsonp(publications);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
};
|