arnaucube
arnaucube/commonroutesServerPublic Self-hosted repository
implemented network map of users and travels, for admin
arnaucode idoctnef@openmailbox.org
Wed, 26 Jul 2017 15:07:30 +0200
commit

8746fc92f0e401f472bb3f52720faa0c56e3fc9c

parent

81dd28a7ea5c347679fad43fc49d78d04de9609d

2 files changed, 134 insertions(+), 2 deletions(-)

jump to
M controllers/adminController.js → controllers/adminController.js

@@ -1,6 +1,8 @@

//File: controllers/userController.js var mongoose = require('mongoose'); -var userModel = mongoose.model('adminModel'); +var adminModel = mongoose.model('adminModel'); +var userModel = mongoose.model('userModel'); +var travelModel = mongoose.model('travelModel'); var config = require('../config'); var pageSize = config.pageSize;

@@ -53,7 +55,7 @@

//POST - auth user exports.login = function(req, res) { // find the user - userModel.findOne({ + adminModel.findOne({ username: req.body.username }) .select('+password')

@@ -117,3 +119,130 @@ if (err) return console.log(err);

exports.getUserByToken(req, res); }); }; + +function isNodeInNodes(node, nodes){ + for (var i=0; i<nodes.length; i++){ + if (node.title==nodes[i].title){ + return(i); + } + } + return(-1); +} +exports.network = function(req, res) { + userModel.find() + .limit(pageSize) + .skip(pageSize * Number(req.query.page)) + .lean() + //.populate({path: 'travels', populate: {path: 'joins', populate: {path: 'username'}}}) + .populate('travels', 'title type joins') + .populate('likes', 'username avatar') + .exec(function(err, users) { + if (err) return res.send(500, err.message); + + /*res.status(200).jsonp(users);*/ + var nodes=[]; + var edges=[]; + for (var i=0; i<users.length; i++){ + var node = { + title: users[i].username, + label: users[i].username, + image: users[i].avatar, + shape: "image", + id: users[i]._id, + group: users[i]._id + }; + var lNode = isNodeInNodes(node, nodes); + if (lNode<0){ + nodes.push(node); + var uNode = nodes.length -1; + } + for(var j=0; j<users[i].likes.length; j++){ + /*console.log(i + ", " + j); + console.log(nodes);*/ + var node = { + title: users[i].likes[j].username, + label: users[i].likes[j].username, + image: users[i].likes[j].avatar, + shape: "image", + id: users[i].likes[j]._id + }; + var lNode = isNodeInNodes(node, nodes); + if (lNode<0){ + //node no exist + nodes.push(node); + lNode = nodes.length -1; + }else{ + //node already exist + + } + var edge={ + from: users[i]._id, + to: users[i].likes[j]._id, + arrows: "to", + color: { + color: "#E57373"//red300 + } + }; + edges.push(edge); + } + for(var j=0; j<users[i].travels.length; j++){ + /*console.log(i + ", " + j); + console.log(nodes);*/ + var node = { + title: users[i].travels[j].title, + label: users[i].travels[j].title, + image: "img/" + users[i].travels[j].type + ".png", + shape: "image", + id: users[i].travels[j]._id, + value: "0.5", + group: users[i]._id + }; + var lNode = isNodeInNodes(node, nodes); + if (lNode<0){ + //node no exist + nodes.push(node); + lNode = nodes.length -1; + }else{ + //node already exist + + } + var edge={ + from: users[i]._id, + to: users[i].travels[j]._id + }; + edges.push(edge); + + //users joining travels + /*for(var k=0; k<users[i].travels[j].joins.length; k++){ + var node = { + title: users[i].travels[j].joins[k].username, + label: users[i].travels[j].joins[k].username, + image: users[i].travels[j].joins[k].avatar, + shape: "image", + id: users[i].travels[j].joins[k]._id + }; + var lNode = isNodeInNodes(node, nodes); + if (lNode<0){ + //node no exist + nodes.push(node); + lNode = nodes.length -1; + } + var edge={ + from: users[i].travels[j].joins[k]._id, + to: users[i].travels[j]._id, + color: { + color: "#4DD0E1"//cyan300 + } + }; + edges.push(edge); + }*/ + } + + } + var resp = { + nodes: nodes, + edges: edges + }; + res.status(200).jsonp(resp); + }); +};
M server.js → server.js

@@ -115,6 +115,9 @@

} }); //fi verificació de token +//admin +apiRoutes.route('/admin/network') + .get(adminCtrl.network); apiRoutes.route('/search/:searchstring') .get(searchCtrl.searchByString);