diff --git a/lib/cartodb/controllers/map.js b/lib/cartodb/controllers/map.js index 0357b765..8a3b09ea 100644 --- a/lib/cartodb/controllers/map.js +++ b/lib/cartodb/controllers/map.js @@ -161,7 +161,7 @@ MapController.prototype.create = function(req, res, prepareConfigFn) { }, function afterLayergroupCreate(err, layergroup) { assert.ifError(err); - self.afterLayergroupCreate(req, res, mapConfig, layergroup, this); + self.afterLayergroupCreate(req, res, mapConfig, layergroup, context.analysesResults, this); }, function finish(err, layergroup) { if (err) { @@ -219,7 +219,7 @@ MapController.prototype.instantiateTemplate = function(req, res, prepareParamsFn }, function afterLayergroupCreate(err, layergroup) { assert.ifError(err); - self.afterLayergroupCreate(req, res, mapConfig, layergroup, this); + self.afterLayergroupCreate(req, res, mapConfig, layergroup, mapConfigProvider.analysesResults, this); }, function finishTemplateInstantiation(err, layergroup) { if (err) { @@ -240,7 +240,7 @@ MapController.prototype.instantiateTemplate = function(req, res, prepareParamsFn ); }; -MapController.prototype.afterLayergroupCreate = function(req, res, mapconfig, layergroup, callback) { +MapController.prototype.afterLayergroupCreate = function(req, res, mapconfig, layergroup, analysesResults, callback) { var self = this; var username = req.context.user; @@ -299,9 +299,12 @@ MapController.prototype.afterLayergroupCreate = function(req, res, mapconfig, la // feed affected tables cache so it can be reused from, for instance, layergroup controller self.layergroupAffectedTables.set(dbName, layergroupId, result); + var lastUpdateTime = result.getLastUpdatedAt(); + lastUpdateTime = getLastUpdatedTime(analysesResults, lastUpdateTime) || lastUpdateTime; + // last update for layergroup cache buster - layergroup.layergroupid = layergroup.layergroupid + ':' + result.getLastUpdatedAt(); - layergroup.last_updated = new Date(result.getLastUpdatedAt()).toISOString(); + layergroup.layergroupid = layergroup.layergroupid + ':' + lastUpdateTime; + layergroup.last_updated = new Date(lastUpdateTime).toISOString(); if (req.method === 'GET') { var ttl = global.environment.varnish.layergroupTtl || 86400; @@ -321,6 +324,19 @@ MapController.prototype.afterLayergroupCreate = function(req, res, mapconfig, la ); }; +function getLastUpdatedTime(analysesResults, lastUpdateTime) { + if (!Array.isArray(analysesResults)) { + return lastUpdateTime; + } + return analysesResults.reduce(function(lastUpdateTime, analysis) { + return analysis.getSortedNodes().reduce(function(lastNodeUpdatedAtTime, node) { + var nodeUpdatedAtDate = node.getUpdatedAt(); + var nodeUpdatedTimeAt = (nodeUpdatedAtDate && nodeUpdatedAtDate.getTime()) || 0; + return nodeUpdatedTimeAt > lastNodeUpdatedAtTime ? nodeUpdatedTimeAt : lastNodeUpdatedAtTime; + }, lastUpdateTime); + }, lastUpdateTime); +} + function addAnalysesMetadata(username, layergroup, analysesResults, includeQuery) { includeQuery = includeQuery || false; analysesResults = analysesResults || [];