UNPKG

lpio

Version:

The last dashboard app you'll ever need

110 lines (93 loc) 3.15 kB
var Q = require('q'); var _ = require('underscore'); var dashboards = require('../../../database').dashboards; var widgets = require('../../../database').widgets; var log = require('../../../log'); // CRUD operations // Create Dashboard exports.createDashboard = function(req, res, next){ var dashboard = _.extend({}, req.body); // @TODO: Add validation return Q.ninvoke(dashboards,'insert',dashboard) .then(function(newdoc){ res.json({ status:"ok", message:"Your new dashboard with id: "+newdoc._id+" was created", data:{ id:newdoc._id } }); }).catch(function(err){ log.error(err,"Error creating Dashboard"); next( new Error ("Error creating Dashboard")); }); } // Update Dashboard exports.updateDashboard = function(req, res, next){ var dashboard = _.extend({}, req.body); var id = req.params.id; // @TODO: Add validation return Q.ninvoke(dashboards,'update',{_id:id},dashboard,{}) .then(function(numUpdated){ if(numUpdated >= 1) { res.json({ status: "ok", message: "Your dashboard with id: " + id + " was updated", data: { id: id } }); }else { throw new Error("Not updated"); } }).catch(function(err){ log.error(err,"Error updating Dashboard"); next( new Error ("Error updating Dashboard")); }); } // Delete Dashboard exports.deleteDashboard = function(req, res, next){ var id = req.params.id; return Q.ninvoke(dashboards,'remove',{_id:id},{}) .then(function(numRemoved){ if(numRemoved >= 1){ res.json({ status:"ok", message:"Dashboard deleted" }); } }).catch(function(err){ log.error(err,"Error deleting Dashboard"); next( new Error ("Error deleting Dashboard")); }); } // Get By ID -- includes widgets exports.getDashboardByID = function(req,res,next){ var id = req.params.id; var dashboard = Q.ninvoke(dashboards,'findOne',{_id:id}); var d_widgets = Q.ninvoke(widgets,'find',{dashboards: id}) return Q.all([dashboard,d_widgets]) .spread(function(dashboard,widgets){ if(dashboard == null){ return next(new Error("Not Found")); } res.json({ dashboard:dashboard, widgets: widgets }); }).catch(function(err){ log.error(err); next(new Error("Error retrieving dashboard")); }); } // Get ALL -- just dashboards exports.getAllDashboards = function(req,res,next){ // @TODO: paginate dashboards.find({}).limit(20).exec(function(err,docs){ if(err){ log.error(err); return next(new Error("Error retrieving dashboards")); } res.json(docs); }); }