From 4ca8ecf64ce7eae206ff71284dc290c9950d02dc Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 20 Jan 2016 12:44:00 +0100 Subject: [PATCH] Refactor/fix potential problems --- lib/cartodb/controllers/map.js | 18 ++++--- .../models/mapconfig_overviews_adapter.js | 49 +++++++++++-------- 2 files changed, 41 insertions(+), 26 deletions(-) diff --git a/lib/cartodb/controllers/map.js b/lib/cartodb/controllers/map.js index 3620ed6c..769e825a 100644 --- a/lib/cartodb/controllers/map.js +++ b/lib/cartodb/controllers/map.js @@ -155,12 +155,18 @@ MapController.prototype.create = function(req, res, prepareConfigFn) { function addOverviewsInformation(err, requestMapConfig, datasource) { assert.ifError(err); var next = this; - self.overviewsAdapter.getMapConfig(req.context.user, requestMapConfig, function(err, mapconfig) { - if (err) { - return next(err); - } - return next(null, mapconfig, datasource); - }); + self.overviewsAdapter.getLayers(req.context.user, requestMapConfig.layers, + function(err, layers) { + if (err) { + return next(err); + } + + if (layers) { + requestMapConfig.layers = layers; + } + return next(null, requestMapConfig, datasource); + } + ); }, function createLayergroup(err, requestMapConfig, datasource) { assert.ifError(err); diff --git a/lib/cartodb/models/mapconfig_overviews_adapter.js b/lib/cartodb/models/mapconfig_overviews_adapter.js index 7a9bc606..00cf02e0 100644 --- a/lib/cartodb/models/mapconfig_overviews_adapter.js +++ b/lib/cartodb/models/mapconfig_overviews_adapter.js @@ -1,4 +1,5 @@ var queue = require('queue-async'); +var _ = require('underscore'); function MapConfigNamedLayersAdapter(overviewsApi) { this.overviewsApi = overviewsApi; @@ -6,32 +7,40 @@ function MapConfigNamedLayersAdapter(overviewsApi) { module.exports = MapConfigNamedLayersAdapter; -MapConfigNamedLayersAdapter.prototype.getMapConfig = function(username, mapconfig, callback) { +MapConfigNamedLayersAdapter.prototype.getLayers = function(username, layers, callback) { - // TODO: we're modifying mapconfig in place and then returning it... not very nice + if (!layers) { + return callback(null); + } - var layers = mapconfig.getlayers(); + var augmentLayersQueue = queue(layers.length); - var parallelism = 2; - var q = queue(parallelism); + function augmentLayer(layer, done) { + this.overviewsApi.getOverviewsMetadata(username, layer.options.sql, function(err, metadata){ + if ( !_.isEmpty(metadata) ) { + layer = _.extend({}, layer, { overviews: metadata }); + } + done(null, layer); + }); + } - for ( var i=0; i < layers.length; ++i ) { - q.defer(function(layer, done){ - this.overviewsApi.getOverviewsMetadata(username, layer.options.sql, function(err, metadata){ - // TODO: is it legit to modify layer like this? - layer.options.overviews = metadata; - done(null); - }); - }, layers[i]); + function layersAugmentQueueFinish(err, layers) { + if (err) { + return callback(err); } - q.awaitAll(function(err){ - if (err) { - return callback(err); - } else { - return callback(null, mapconfig); - } - }); + if (!layers || layers.length === 0) { + return callback(new Error('Missing layers array from layergroup config')); + } + + return callback(null, layers); + } + + layers.forEach(function(layer) { + augmentLayersQueue.defer(augmentLayer, layer); + }); + augmentLayersQueue.awaitAll(layersAugmentQueueFinish); + }; // TODO: document in https://github.com/CartoDB/Windshaft/blob/master/doc/MapConfig-1.5.0.md