From feae766e62eefc9370dfd07326d2b69cac105cfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Mon, 1 Jan 2018 16:54:35 +0100 Subject: [PATCH] Create middleware to fetch named map template --- lib/cartodb/controllers/named_maps.js | 172 +++++++++++++------------- 1 file changed, 88 insertions(+), 84 deletions(-) diff --git a/lib/cartodb/controllers/named_maps.js b/lib/cartodb/controllers/named_maps.js index ebdabb8f..9eb40ee4 100644 --- a/lib/cartodb/controllers/named_maps.js +++ b/lib/cartodb/controllers/named_maps.js @@ -1,9 +1,20 @@ -var NamedMapsCacheEntry = require('../cache/model/named_maps_entry'); +const NamedMapsCacheEntry = require('../cache/model/named_maps_entry'); +const cors = require('../middleware/cors'); +const userMiddleware = require('../middleware/user'); +const allowQueryParams = require('../middleware/allow-query-params'); +const vectorError = require('../middleware/vector-error'); -var cors = require('../middleware/cors'); -var userMiddleware = require('../middleware/user'); -var allowQueryParams = require('../middleware/allow-query-params'); -var vectorError = require('../middleware/vector-error'); +const DEFAULT_ZOOM_CENTER = { + zoom: 1, + center: { + lng: 0, + lat: 0 + } +}; + +function numMapper(n) { + return +n; +} function NamedMapsController(prepareContext, namedMapProviderCache, tileBackend, previewBackend, surrogateKeysCache, tablesExtentApi, metadataBackend) { @@ -44,6 +55,7 @@ NamedMapsController.prototype.register = function(app) { this.prepareContext, this.getNamedMapProvider('STATIC_VIZ_MAP'), this.getAffectedTables(), + this.getTemplate('STATIC_VIZ_MAP'), this.prepareLayerFilterFromPreviewLayers('STATIC_VIZ_MAP'), this.getStaticImageOptions(), this.getImage('STATIC_VIZ_MAP'), @@ -94,11 +106,9 @@ NamedMapsController.prototype.getAffectedTables = function () { }.bind(this); }; -NamedMapsController.prototype.prepareLayerFilterFromPreviewLayers = function (label) { - return function prepareLayerFilterFromPreviewLayersMiddleware (req, res, next) { - const { user, namedMapProvider } = res.locals; - const { template_id } = req.params; - const { config, auth_token } = req.query; +NamedMapsController.prototype.getTemplate = function (label) { + return function getTemplateMiddleware (req, res, next) { + const { namedMapProvider } = res.locals; namedMapProvider.getTemplate((err, template) => { if (err) { @@ -106,37 +116,49 @@ NamedMapsController.prototype.prepareLayerFilterFromPreviewLayers = function (la return next(err); } - if (!template || !template.view || !template.view.preview_layers) { - return next(); + res.locals.template = template; + + next(); + }); + }; +}; + +NamedMapsController.prototype.prepareLayerFilterFromPreviewLayers = function (label) { + return function prepareLayerFilterFromPreviewLayersMiddleware (req, res, next) { + const { user, template } = res.locals; + const { template_id } = req.params; + const { config, auth_token } = req.query; + + if (!template || !template.view || !template.view.preview_layers) { + return next(); + } + + var previewLayers = template.view.preview_layers; + var layerVisibilityFilter = []; + + template.layergroup.layers.forEach(function (layer, index) { + if (previewLayers[''+index] !== false && previewLayers[layer.id] !== false) { + layerVisibilityFilter.push(''+index); + } + }); + + if (!layerVisibilityFilter.length) { + return next(); + } + + // overwrites 'all' default filter + res.locals.layer = layerVisibilityFilter.join(','); + + // recreates the provider + this.namedMapProviderCache.get(user, template_id, config, auth_token, res.locals, (err, provider) => { + if (err) { + err.label = label; + return next(err); } - var previewLayers = template.view.preview_layers; - var layerVisibilityFilter = []; + res.locals.namedMapProvider = provider; - template.layergroup.layers.forEach(function (layer, index) { - if (previewLayers[''+index] !== false && previewLayers[layer.id] !== false) { - layerVisibilityFilter.push(''+index); - } - }); - - if (!layerVisibilityFilter.length) { - return next(); - } - - // overwrites 'all' default filter - res.locals.layer = layerVisibilityFilter.join(','); - - // recreates the provider - this.namedMapProviderCache.get(user, template_id, config, auth_token, res.locals, (err, provider) => { - if (err) { - err.label = label; - return next(err); - } - - res.locals.namedMapProvider = provider; - - next(); - }); + next(); }); }.bind(this); }; @@ -162,21 +184,9 @@ NamedMapsController.prototype.getTile = function () { }.bind(this); }; -var DEFAULT_ZOOM_CENTER = { - zoom: 1, - center: { - lng: 0, - lat: 0 - } -}; - -function numMapper(n) { - return +n; -} - NamedMapsController.prototype.getStaticImageOptions = function () { return function getStaticImageOptionsMiddleware(req, res, next) { - const { user, namedMapProvider, zoom, lon, lat, bbox } = res.locals; + const { user, namedMapProvider, template, zoom, lon, lat, bbox } = res.locals; if ([zoom, lon, lat].map(numMapper).every(Number.isFinite)) { res.locals.imageOpts = { @@ -206,49 +216,43 @@ NamedMapsController.prototype.getStaticImageOptions = function () { } } - namedMapProvider.getTemplate((err, template) => { + if (template.view) { + var zoomCenter = templateZoomCenter(template.view); + if (zoomCenter) { + if (Number.isFinite(+zoom)) { + zoomCenter.zoom = +zoom; + } + res.locals.imageOpts = zoomCenter; + return next(); + } + + var bounds = templateBounds(template.view); + if (bounds) { + res.locals.imageOpts = bounds; + return next(); + } + } + + res.locals.imageOpts = DEFAULT_ZOOM_CENTER; + + namedMapProvider.getAffectedTablesAndLastUpdatedTime((err, affectedTablesAndLastUpdate) => { if (err) { - return next(err); + return next(); } - if (template.view) { - var zoomCenter = templateZoomCenter(template.view); - if (zoomCenter) { - if (Number.isFinite(+zoom)) { - zoomCenter.zoom = +zoom; - } - res.locals.imageOpts = zoomCenter; - return next(); - } + var affectedTables = affectedTablesAndLastUpdate.tables || []; - var bounds = templateBounds(template.view); - if (bounds) { - res.locals.imageOpts = bounds; - return next(); - } + if (affectedTables.length === 0) { + return next(); } - res.locals.imageOpts = DEFAULT_ZOOM_CENTER; - - namedMapProvider.getAffectedTablesAndLastUpdatedTime((err, affectedTablesAndLastUpdate) => { + this.tablesExtentApi.getBounds(user, affectedTables, (err, bounds) => { if (err) { return next(); } - var affectedTables = affectedTablesAndLastUpdate.tables || []; - - if (affectedTables.length === 0) { - return next(); - } - - this.tablesExtentApi.getBounds(user, affectedTables, (err, bounds) => { - if (err) { - return next(); - } - - res.locals.imageOpts = bounds; - return next(); - }); + res.locals.imageOpts = bounds; + return next(); }); }); }.bind(this);