File size: 974 Bytes
d9494a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import {
  QUERY_DEFAULT_LIMIT_RECORDS,
  QUERY_MAX_RECORDS,
} from 'twenty-shared/constants';

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';
import { type RequestContext } from 'src/engine/api/rest/types/RequestContext';

export const parseLimitRestRequest = (
  request: AuthenticatedRequest | RequestContext,
  defaultLimit = QUERY_DEFAULT_LIMIT_RECORDS,
): number => {
  if (!request.query?.limit) {
    return defaultLimit;
  }
  const limit = +request.query.limit;

  if (isNaN(limit) || limit < 0) {
    throw new RestInputRequestParserException(
      `limit '${request.query.limit}' is invalid. Should be an integer`,
      RestInputRequestParserExceptionCode.INVALID_LIMIT_QUERY_PARAM,
    );
  }

  return Math.min(limit, QUERY_MAX_RECORDS);
};