diff --git a/lib/cartodb/models/mapconfig/provider/create-layergroup-provider.js b/lib/cartodb/models/mapconfig/provider/create-layergroup-provider.js index f1e2ac37..b7a52710 100644 --- a/lib/cartodb/models/mapconfig/provider/create-layergroup-provider.js +++ b/lib/cartodb/models/mapconfig/provider/create-layergroup-provider.js @@ -1,119 +1,104 @@ const MapStoreMapConfigProvider = require('./map-store-provider'); const QueryTables = require('cartodb-query-tables'); -/** - * @param {MapConfig} mapConfig - * @param {String} user - * @param {UserLimitsBackend} userLimitsBackend - * @param {Object} params - * @constructor - * @type {CreateLayergroupMapConfigProvider} - */ - -function CreateLayergroupMapConfigProvider( - mapConfig, - user, - userLimitsBackend, - pgConnection, - affectedTablesCache, - params -) { - this.mapConfig = mapConfig; - this.user = user; - this.userLimitsBackend = userLimitsBackend; - this.pgConnection = pgConnection; - this.affectedTablesCache = affectedTablesCache; - this.params = params; - this.cacheBuster = params.cache_buster || 0; -} - -module.exports = CreateLayergroupMapConfigProvider; - -CreateLayergroupMapConfigProvider.prototype.getMapConfig = function(callback) { - if (this.mapConfig && this.params && this.context) { - return callback(null, this.mapConfig, this.params, this.context); +module.exports = class CreateLayergroupMapConfigProvider extends MapStoreMapConfigProvider { + /** + * @param {MapConfig} mapConfig + * @param {String} user + * @param {UserLimitsBackend} userLimitsBackend + * @param {Object} params + * @constructor + * @type {CreateLayergroupMapConfigProvider} + */ + constructor (mapConfig, user, userLimitsBackend, pgConnection, affectedTablesCache, params) { + super(mapConfig, user, userLimitsBackend, pgConnection, affectedTablesCache, params); + this.mapConfig = mapConfig; + this.user = user; + this.userLimitsBackend = userLimitsBackend; + this.pgConnection = pgConnection; + this.affectedTablesCache = affectedTablesCache; + this.params = params; + this.cacheBuster = params.cache_buster || 0; } - const context = {}; - - this.userLimitsBackend.getRenderLimits(this.user, this.params.api_key, (err, renderLimits) => { - if (err) { - return callback(err); + getMapConfig (callback) { + if (this.mapConfig && this.params && this.context) { + return callback(null, this.mapConfig, this.params, this.context); } - context.limits = renderLimits; - this.context = context; + const context = {}; - return callback(null, this.mapConfig, this.params, context); - }); -}; - -CreateLayergroupMapConfigProvider.prototype.getKey = MapStoreMapConfigProvider.prototype.getKey; - -CreateLayergroupMapConfigProvider.prototype.getCacheBuster = MapStoreMapConfigProvider.prototype.getCacheBuster; - -CreateLayergroupMapConfigProvider.prototype.filter = MapStoreMapConfigProvider.prototype.filter; - -CreateLayergroupMapConfigProvider.prototype.createKey = MapStoreMapConfigProvider.prototype.createKey; - -CreateLayergroupMapConfigProvider.prototype.createAffectedTables = function (callback) { - this.getMapConfig((err, mapConfig) => { - if (err) { - return callback(err); - } - - const { dbname } = this.params; - const token = mapConfig.id(); - - const queries = []; - - this.mapConfig.getLayers().forEach(layer => { - queries.push(layer.options.sql); - if (layer.options.affected_tables) { - layer.options.affected_tables.map(table => { - queries.push(`SELECT * FROM ${table} LIMIT 0`); - }); - } - }); - - const sql = queries.length ? queries.join(';') : null; - - if (!sql) { - return callback(); - } - - this.pgConnection.getConnection(this.user, (err, connection) => { + this.userLimitsBackend.getRenderLimits(this.user, this.params.api_key, (err, renderLimits) => { if (err) { return callback(err); } - QueryTables.getAffectedTablesFromQuery(connection, sql, (err, affectedTables) => { + context.limits = renderLimits; + this.context = context; + + return callback(null, this.mapConfig, this.params, context); + }); + } + + createAffectedTables (callback) { + this.getMapConfig((err, mapConfig) => { + if (err) { + return callback(err); + } + + const { dbname } = this.params; + const token = mapConfig.id(); + + const queries = []; + + this.mapConfig.getLayers().forEach(layer => { + queries.push(layer.options.sql); + if (layer.options.affected_tables) { + layer.options.affected_tables.map(table => { + queries.push(`SELECT * FROM ${table} LIMIT 0`); + }); + } + }); + + const sql = queries.length ? queries.join(';') : null; + + if (!sql) { + return callback(); + } + + this.pgConnection.getConnection(this.user, (err, connection) => { if (err) { return callback(err); } - this.affectedTablesCache.set(dbname, token, affectedTables); + QueryTables.getAffectedTablesFromQuery(connection, sql, (err, affectedTables) => { + if (err) { + return callback(err); + } - callback(null, affectedTables); + this.affectedTablesCache.set(dbname, token, affectedTables); + + callback(null, affectedTables); + }); }); }); - }); -}; + } -CreateLayergroupMapConfigProvider.prototype.getAffectedTables = function (callback) { - this.getMapConfig((err, mapConfig) => { - if (err) { - return callback(err); - } + getAffectedTables (callback) { + this.getMapConfig((err, mapConfig) => { + if (err) { + return callback(err); + } - const { dbname } = this.params; - const token = mapConfig.id(); + const { dbname } = this.params; + const token = mapConfig.id(); - if (this.affectedTablesCache.hasAffectedTables(dbname, token)) { - const affectedTables = this.affectedTablesCache.get(dbname, token); - return callback(null, affectedTables); - } + if (this.affectedTablesCache.hasAffectedTables(dbname, token)) { + const affectedTables = this.affectedTablesCache.get(dbname, token); + return callback(null, affectedTables); + } - return this.createAffectedTables(callback); - }); + return this.createAffectedTables(callback); + }); + } };