lpio
Version:
The last dashboard app you'll ever need
110 lines (93 loc) • 3.15 kB
JavaScript
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);
});
}