diff --git a/lib/cartodb/models/aggregation/aggregation-validator.js b/lib/cartodb/models/aggregation/aggregation-validator.js index 25c06ec4..97f31b27 100644 --- a/lib/cartodb/models/aggregation/aggregation-validator.js +++ b/lib/cartodb/models/aggregation/aggregation-validator.js @@ -31,13 +31,31 @@ module.exports.createPositiveNumberValidator = function (mapconfig) { }; module.exports.createAggregationColumnsValidator = function (mapconfig, validAggregatedFunctions) { + const validateAggregationColumnNames = createAggregationColumnNamesValidator(mapconfig); + const validateAggregateFunction = createAggregateFunctionValidator(mapconfig, validAggregatedFunctions); + const validateAggregatedColumn = createAggregatedColumnValidator(mapconfig); + return function validateAggregationColumns (value, key, index) { + validateAggregationColumnNames(value, key, index); + validateAggregateFunction(value, key, index); + validateAggregatedColumn(value, key, index); + }; +}; + +function createAggregationColumnNamesValidator(mapconfig) { + return function validateAggregationColumnNames (value, key, index) { Object.keys(value).forEach((columnName) => { if (columnName.length <= 0) { const message = `Invalid column name, should be a non empty string`; throw createLayerError(message, mapconfig, index); } + }); + }; +} +function createAggregateFunctionValidator (mapconfig, validAggregatedFunctions) { + return function validateAggregateFunction (value, key, index) { + Object.keys(value).forEach((columnName) => { const { aggregate_function } = value[columnName]; if (!validAggregatedFunctions.includes(aggregate_function)) { @@ -45,7 +63,13 @@ module.exports.createAggregationColumnsValidator = function (mapconfig, validAgg ` valid ones: ${validAggregatedFunctions.join(', ')}`; throw createLayerError(message, mapconfig, index); } + }); + }; +} +function createAggregatedColumnValidator (mapconfig) { + return function validateAggregatedColumn (value, key, index) { + Object.keys(value).forEach((columnName) => { const { aggregated_column } = value[columnName]; if (typeof aggregated_column !== 'string' || aggregated_column <= 0) { @@ -54,7 +78,7 @@ module.exports.createAggregationColumnsValidator = function (mapconfig, validAgg } }); }; -}; +} function createLayerError(message, mapconfig, index) { const error = new Error(message);