From caabe8738d45851b6a7674c81055692c315cd016 Mon Sep 17 00:00:00 2001 From: Etienne <45695613+etiennejouan@users.noreply.github.com> Date: Thu, 7 Aug 2025 18:30:33 +0200 Subject: [PATCH] fix rest api metadata (#13720) Introduce in [MCP Metadata PR](https://github.com/twentyhq/twenty/pull/13150/files#diff-1c17892e6bc91125638b0cc195ab9f4661c39042e36a6eaac95a83f32d1f70bdR4) [Fix issue opened in Discord ](https://discord.com/channels/1130383047699738754/1155864201068286043/1402921467468972032) --- .../utils/fetch-metadata-fields.utils.ts | 5 ++++- .../utils/has-select-all-fields-selector.util.ts | 9 +++++++++ .../api/rest/metadata/rest-api-metadata.service.ts | 12 +++++++++--- 3 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 packages/twenty-server/src/engine/api/rest/metadata/query-builder/utils/has-select-all-fields-selector.util.ts diff --git a/packages/twenty-server/src/engine/api/rest/metadata/query-builder/utils/fetch-metadata-fields.utils.ts b/packages/twenty-server/src/engine/api/rest/metadata/query-builder/utils/fetch-metadata-fields.utils.ts index 2091541eab..21b7f6b4ea 100644 --- a/packages/twenty-server/src/engine/api/rest/metadata/query-builder/utils/fetch-metadata-fields.utils.ts +++ b/packages/twenty-server/src/engine/api/rest/metadata/query-builder/utils/fetch-metadata-fields.utils.ts @@ -1,3 +1,4 @@ +import { hasSelectAllFieldsSelector } from 'src/engine/api/rest/metadata/query-builder/utils/has-select-all-fields-selector.util'; import { Selectors } from 'src/engine/api/rest/metadata/types/metadata-query.type'; export const fetchMetadataFields = ( @@ -41,7 +42,9 @@ export const fetchMetadataFields = ( } `; - const fieldsSelection = selector?.fields?.join('\n') ?? defaultFields; + const fieldsSelection = hasSelectAllFieldsSelector(selector) + ? defaultFields + : (selector?.fields?.join('\n') ?? defaultFields); switch (objectNamePlural) { case 'objects': { diff --git a/packages/twenty-server/src/engine/api/rest/metadata/query-builder/utils/has-select-all-fields-selector.util.ts b/packages/twenty-server/src/engine/api/rest/metadata/query-builder/utils/has-select-all-fields-selector.util.ts new file mode 100644 index 0000000000..a098435ea0 --- /dev/null +++ b/packages/twenty-server/src/engine/api/rest/metadata/query-builder/utils/has-select-all-fields-selector.util.ts @@ -0,0 +1,9 @@ +import { Selectors } from 'src/engine/api/rest/metadata/types/metadata-query.type'; + +export const hasSelectAllFieldsSelector = (selector: Selectors) => { + return ( + selector?.fields?.length && + selector?.fields.length === 1 && + selector?.fields.includes('*') + ); +}; diff --git a/packages/twenty-server/src/engine/api/rest/metadata/rest-api-metadata.service.ts b/packages/twenty-server/src/engine/api/rest/metadata/rest-api-metadata.service.ts index 3ffb4a18d8..e32ccd875f 100644 --- a/packages/twenty-server/src/engine/api/rest/metadata/rest-api-metadata.service.ts +++ b/packages/twenty-server/src/engine/api/rest/metadata/rest-api-metadata.service.ts @@ -24,7 +24,9 @@ export class RestApiMetadataService { async get(request: Request) { await this.accessTokenService.validateTokenByRequest(request); const requestContext = this.getRequestContext(request); - const data = await this.metadataQueryBuilderFactory.get(requestContext); + const data = await this.metadataQueryBuilderFactory.get(requestContext, { + fields: ['*'], + }); return await this.restApiService.call( GraphqlApiType.METADATA, @@ -36,7 +38,9 @@ export class RestApiMetadataService { async create(request: Request) { await this.accessTokenService.validateTokenByRequest(request); const requestContext = this.getRequestContext(request); - const data = await this.metadataQueryBuilderFactory.create(requestContext); + const data = await this.metadataQueryBuilderFactory.create(requestContext, { + fields: ['*'], + }); return await this.restApiService.call( GraphqlApiType.METADATA, @@ -48,7 +52,9 @@ export class RestApiMetadataService { async update(request: Request) { await this.accessTokenService.validateTokenByRequest(request); const requestContext = this.getRequestContext(request); - const data = await this.metadataQueryBuilderFactory.update(requestContext); + const data = await this.metadataQueryBuilderFactory.update(requestContext, { + fields: ['*'], + }); return await this.restApiService.call( GraphqlApiType.METADATA,