Files
twenty/packages/twenty-server/src/engine/api/rest/input-request-parsers/group-by-parser-utils/parse-group-by-rest-request.util.ts
T

30 lines
1.2 KiB
TypeScript

import { type ObjectRecordGroupBy } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface';
import {
RestInputRequestParserException,
RestInputRequestParserExceptionCode,
} from 'src/engine/api/rest/input-request-parsers/rest-input-request-parser.exception';
import { type AuthenticatedRequest } from 'src/engine/api/rest/types/authenticated-request';
export const parseGroupByRestRequest = (
request: AuthenticatedRequest,
): ObjectRecordGroupBy => {
const groupByQuery = request.query.group_by;
if (typeof groupByQuery !== 'string') {
throw new RestInputRequestParserException(
`Invalid group_by query parameter - should be a valid array of objects - ex: [{"firstField": true}, {"secondField": {"subField": true}}, {"dateField": {"granularity": 'DAY'}}]`,
RestInputRequestParserExceptionCode.INVALID_GROUP_BY_QUERY_PARAM,
);
}
try {
return JSON.parse(groupByQuery);
} catch {
throw new RestInputRequestParserException(
`Invalid group_by query parameter - should be a valid array of objects - ex: [{"firstField": true}, {"secondField": {"subField": true}}, {"dateField": {"granularity": 'DAY'}}]`,
RestInputRequestParserExceptionCode.INVALID_GROUP_BY_QUERY_PARAM,
);
}
};