Commit 485ee6f1 authored by andreagerino's avatar andreagerino

Adding user detail endpoints

parent 376c1e3b
// PROTOCOL SPECIFICATION
// -----------------------
// /users/count - returns the number of users and how many of them are using VoiceOver
// /users/vib - returns objects representing who are using VoiceOver
// /users/sighted - returns objects representing who are not using VoiceOver
var express = require('express'); var express = require('express');
var router = express.Router(); var router = express.Router();
...@@ -8,7 +14,7 @@ var mongoClient = require('mongodb').MongoClient; ...@@ -8,7 +14,7 @@ var mongoClient = require('mongodb').MongoClient;
var assert = assert = require('assert'); var assert = assert = require('assert');
// Connection URL // Connection URL
var mongoUrl = 'mongodb://icarus:icarus@localhost:27017/icarus'; var mongoUrl = 'mongodb://readOnly:readOnly@localhost:27017/icarus';
//Connect to the server and intialise the pool //Connect to the server and intialise the pool
var icarusDb; var icarusDb;
...@@ -28,11 +34,11 @@ router.get('/', function(req, res, next) { ...@@ -28,11 +34,11 @@ router.get('/', function(req, res, next) {
}); });
router.get('/users', function(req, res, next) { router.get('/users/count', function(req, res, next) {
var collection = icarusDb.collection('resources'); var collection = icarusDb.collection('resources');
collection.aggregate( var cursor = collection.aggregate(
// Pipeline // Pipeline
[ [
...@@ -88,7 +94,31 @@ router.get('/users', function(req, res, next) { ...@@ -88,7 +94,31 @@ router.get('/users', function(req, res, next) {
} }
] ]
).toArray(function(err, result) { )
return_cursor(cursor, req, res, next);
});
router.get('/users/vib', function(req, res, next) {
var cursor = user_ids_cursor(true);
cursor.map( function(d) { return d['_id']; } );
return_cursor(cursor, req, res, next);
});
router.get('/users/sighted', function(req, res, next) {
var cursor = user_ids_cursor(false);
return_cursor(cursor, req, res, next);
});
function return_cursor(cursor, req, res, next){
cursor.toArray(function(err, result) {
if(err!=null){ if(err!=null){
...@@ -111,7 +141,182 @@ router.get('/users', function(req, res, next) { ...@@ -111,7 +141,182 @@ router.get('/users', function(req, res, next) {
}); });
}
function user_ids_cursor(vib){
var filter_condition = {$eq: 0};
if(vib==true){
filter_condition = {$gt: 0}
}
var collection = icarusDb.collection('resources');
return collection.aggregate(
// Pipeline
[
// Stage 1
{
$match: {
"appdata.appname":"Invisible Puzzle",
"debug":false
}
},
// Stage 2
{
$group: {
"_id": "$appdata.uuid",
"docs": {$sum: 1},
"voiceover": {$sum : {$cond: [{$eq:["$appdata.voiceover", true]},1,0]}},
"levels" : {
"$addToSet" : "$userdata.level.id"
},
"sonifications" : {
"$addToSet" : "$userdata.sonification"
}
}
},
// Stage 3
{
$project: {
"docs": 1,
"vo_ratio": {$divide:["$voiceover","$docs"]},
"levels": 1,
"sonification": 1
}
},
// Stage 4
{
$match: {
"vo_ratio": filter_condition
}
}
]
)
}
/*router.get('/users/', function(req, res, next) {
var refresh = req.query.refresh;
if(refresh==1){
rebuild_user_stats(req, res, next);
}else{
res.sendStatus(500);
}
}); });
function rebuild_user_stats(req, res, next){
var collection = icarusDb.collection('resources');
collection.aggregate(
// Pipeline
[
// Stage 1
{
$match: {
"appdata.appname" : "Invisible Puzzle",
"debug" : false
}
},
// Stage 2
{
$group: {
"_id" : "$appdata.uuid",
"docs" : {
"$sum" : 1
},
"voiceover" : {
"$sum" : {
"$cond" : [
{
"$eq" : [
"$appdata.voiceover",
true
]
},
1,
0
]
}
},
"levels" : {
"$addToSet" : "$userdata.level.id"
},
"sonifications" : {
"$addToSet" : "$userdata.sonification"
}
}
},
// Stage 3
{
$project: {
"docs" : 1,
"vo_ratio" : {
"$divide" : [
"$voiceover",
"$docs"
]
},
"levels" : 1,
"sonifications" : 1
}
},
// Stage 4
{
$out: "ip_user_stats"
}
]
).toArray(function(err, result) {
if(err!=null){
debug(err);
next(err);
}else{
if(result==undefined){
res.sendStatus(404);
}else{
res.sendStatus(201, result);
}
}
});
}*/
module.exports = router; module.exports = router;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment