diff --git a/routes/services/invisiblepuzzle/invisiblepuzzle.js b/routes/services/invisiblepuzzle/invisiblepuzzle.js index ac8c3412a161b43fa18dd9c207b81f0aed307f99..af9d28f570b6b129e8017834d6b5b1409216b707 100644 --- a/routes/services/invisiblepuzzle/invisiblepuzzle.js +++ b/routes/services/invisiblepuzzle/invisiblepuzzle.js @@ -1,6 +1,26 @@ var express = require('express'); var router = express.Router(); +var debug = require('debug')('Icarus:server'); + +var mongoClient = require('mongodb').MongoClient; + +var assert = assert = require('assert'); + +// Connection URL +var mongoUrl = 'mongodb://icarus:icarus@localhost:27017/icarus'; + +//Connect to the server and intialise the pool +var icarusDb; +mongoClient.connect(mongoUrl, function(err, db) { + + assert.equal(null, err, err); + debug("Connected to MongoDB database: "+db.databaseName); + + icarusDb = db; + +}); + /* GET root . */ router.get('/', function(req, res, next) { @@ -8,4 +28,90 @@ router.get('/', function(req, res, next) { }); +router.get('/users', function(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]}} + } + }, + + // Stage 3 + { + $project: { + + "docs": 1, + "vo_ratio": {$divide:["$voiceover","$docs"]} + + } + }, + + // Stage 4 + { + $group: { + + "_id": 1, + "users": {$sum: 1}, + "vib": {$sum : {$cond: [{$gt:["$vo_ratio", 0]},1,0]}} + + } + }, + + // Stage 5 + { + + $project: { + + "_id": 0, + "users": 1, + "vib": 1 + + } + + } + ] + + ).toArray(function(err, result) { + + if(err!=null){ + + debug(err); + next(err); + + }else{ + + if(result==undefined){ + + res.sendStatus(404); + + }else{ + + res.send(200,result); + + } + + } + + }); + + +}); + module.exports = router;