diff --git a/packages/twenty-server/src/engine/api/rest/rest-api-core-query-builder/factories/find-many-query.factory.ts b/packages/twenty-server/src/engine/api/rest/rest-api-core-query-builder/factories/find-many-query.factory.ts index 92c1741f0..4d7fd2c18 100644 --- a/packages/twenty-server/src/engine/api/rest/rest-api-core-query-builder/factories/find-many-query.factory.ts +++ b/packages/twenty-server/src/engine/api/rest/rest-api-core-query-builder/factories/find-many-query.factory.ts @@ -41,6 +41,7 @@ export class FindManyQueryFactory { startCursor endCursor } + totalCount } } `; diff --git a/packages/twenty-server/src/engine/api/rest/utils/clean-graphql-response.utils.ts b/packages/twenty-server/src/engine/api/rest/utils/clean-graphql-response.utils.ts index 9005d523e..76a2ec5fe 100644 --- a/packages/twenty-server/src/engine/api/rest/utils/clean-graphql-response.utils.ts +++ b/packages/twenty-server/src/engine/api/rest/utils/clean-graphql-response.utils.ts @@ -11,6 +11,12 @@ export const cleanGraphQLResponse = (input: any) => { output[key] = input[key].edges.map((edge) => cleanGraphQLResponse(edge.node), ); + if (input[key].pageInfo) { + output['pageInfo'] = input[key].pageInfo; + } + if (input[key].totalCount) { + output['totalCount'] = input[key].totalCount; + } } else if (isObject(input[key])) { output[key] = cleanGraphQLResponse(input[key]); } else if (key !== '__typename') { diff --git a/packages/twenty-server/src/engine/core-modules/open-api/utils/__tests__/parameters.utils.spec.ts b/packages/twenty-server/src/engine/core-modules/open-api/utils/__tests__/parameters.utils.spec.ts index c5b1a3794..361b3bede 100644 --- a/packages/twenty-server/src/engine/core-modules/open-api/utils/__tests__/parameters.utils.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/open-api/utils/__tests__/parameters.utils.spec.ts @@ -111,7 +111,8 @@ describe('computeParameters', () => { expect(computeLastCursorParameters()).toEqual({ name: 'last_cursor', in: 'query', - description: 'Returns objects starting from a specific cursor.', + description: + 'Returns objects starting from a specific cursor. You can find cursors in **startCursor** and **endCursor** in **pageInfo** in response data', required: false, schema: { type: 'string', diff --git a/packages/twenty-server/src/engine/core-modules/open-api/utils/parameters.utils.ts b/packages/twenty-server/src/engine/core-modules/open-api/utils/parameters.utils.ts index 6034d751e..4ce72b089 100644 --- a/packages/twenty-server/src/engine/core-modules/open-api/utils/parameters.utils.ts +++ b/packages/twenty-server/src/engine/core-modules/open-api/utils/parameters.utils.ts @@ -99,7 +99,8 @@ export const computeLastCursorParameters = (): OpenAPIV3_1.ParameterObject => { return { name: 'last_cursor', in: 'query', - description: 'Returns objects starting from a specific cursor.', + description: + 'Returns objects starting from a specific cursor. You can find cursors in **startCursor** and **endCursor** in **pageInfo** in response data', required: false, schema: { type: 'string', diff --git a/packages/twenty-server/src/engine/core-modules/open-api/utils/responses.utils.ts b/packages/twenty-server/src/engine/core-modules/open-api/utils/responses.utils.ts index 25438d3da..d72bd07cf 100644 --- a/packages/twenty-server/src/engine/core-modules/open-api/utils/responses.utils.ts +++ b/packages/twenty-server/src/engine/core-modules/open-api/utils/responses.utils.ts @@ -22,6 +22,17 @@ export const getFindManyResponse200 = ( )} with Relations`, }, }, + pageInfo: { + type: 'object', + properties: { + hasNextPage: { type: 'boolean' }, + startCursor: { type: 'string' }, + endCursor: { type: 'string' }, + }, + }, + totalCount: { + type: 'integer', + }, }, }, },