Skip to content

Commit

Permalink
fix(api-gateway): measures is always required
Browse files Browse the repository at this point in the history
  • Loading branch information
paveltiunov committed Apr 17, 2019
1 parent f1ebfca commit 04adb7d
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions packages/cubejs-api-gateway/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ const operators = [
];

const querySchema = Joi.object().keys({
measures: Joi.array().items(id.required()),
measures: Joi.array().items(id),
dimensions: Joi.array().items(dimensionWithTime),
filters: Joi.array().items(Joi.object().keys({
dimension: id.required(),
Expand All @@ -121,14 +121,22 @@ const querySchema = Joi.object().keys({
segments: Joi.array().items(id),
timezone: Joi.string(),
limit: Joi.number().integer().min(1).max(50000)
}).or("measures", "dimensions");
});

const normalizeQuery = (query) => {
// eslint-disable-next-line no-unused-vars
const { error, value } = Joi.validate(query, querySchema);
if (error) {
throw new UserError(`Invalid query format: ${error.message || error.toString()}`);
}
const validQuery = query.measures && query.measures.length ||
query.dimensions && query.dimensions.length ||
query.timeDimensions && query.timeDimensions.filter(td => !!td.granularity).length;
if (!validQuery) {
throw new UserError(
'Query should contain either measures, dimensions or timeDimensions with granularities in order to be valid'
);
}
const filterWithoutOperator = (query.filters || []).find(f => !f.operator);
if (filterWithoutOperator) {
throw new UserError(`Operator required for filter: ${JSON.stringify(filterWithoutOperator)}`);
Expand Down

0 comments on commit 04adb7d

Please sign in to comment.