diff --git a/lib/cartodb/controllers/layergroup.js b/lib/cartodb/controllers/layergroup.js index d9251dd0..20046a76 100644 --- a/lib/cartodb/controllers/layergroup.js +++ b/lib/cartodb/controllers/layergroup.js @@ -124,7 +124,8 @@ LayergroupController.prototype.register = function(app) { userMiddleware, allowQueryParams(allowedDataviewQueryParams), this.prepareContext, - this.dataview.bind(this) + this.getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi), + this.getDataview() ); app.get( @@ -133,7 +134,8 @@ LayergroupController.prototype.register = function(app) { userMiddleware, allowQueryParams(allowedDataviewQueryParams), this.prepareContext, - this.dataview.bind(this) + this.getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi), + this.getDataview() ); app.get( @@ -186,32 +188,31 @@ LayergroupController.prototype.analysisNodeStatus = function(req, res, next) { ); }; -LayergroupController.prototype.dataview = function(req, res, next) { - var self = this; +LayergroupController.prototype.getMapStoreMapConfigProvider = function (mapStore, userLimitsApi) { + return function getMapStoreMapConfigProviderMiddleware (req, res, next) { + const { user } = res.locals; - step( - function retrieveDataview() { - var mapConfigProvider = new MapStoreMapConfigProvider( - self.mapStore, res.locals.user, self.userLimitsApi, res.locals - ); - self.dataviewBackend.getDataview( - mapConfigProvider, - res.locals.user, - res.locals, - this - ); - }, - function finish(err, dataview, stats) { + res.locals.mapConfigProvider = new MapStoreMapConfigProvider(mapStore, user, userLimitsApi, res.locals); + + next(); + }; +}; + +LayergroupController.prototype.getDataview = function () { + return function getDataviewMiddleware (req, res, next) { + const { user, mapConfigProvider } = res.locals; + + this.dataviewBackend.getDataview(mapConfigProvider, user, res.locals, (err, dataview, stats) => { req.profiler.add(stats || {}); if (err) { err.label = 'GET DATAVIEW'; - next(err); - } else { - self.sendResponse(req, res, dataview, 200); + return next(err); } - } - ); + + this.sendResponse(req, res, dataview, 200); + }); + }.bind(this); }; LayergroupController.prototype.dataviewSearch = function(req, res, next) {