From 62202af1a947a1e1f6866685d0b5d7604736383f Mon Sep 17 00:00:00 2001 From: Charles Bochet Date: Sat, 19 Jul 2025 09:32:26 +0200 Subject: [PATCH] Fix broken graphql playground (#13287) Fixes https://github.com/twentyhq/twenty/issues/12991 Also fixes a regression on main where updateEvent are not correctly emit when calling repository.update() --- .../graphql-types/scalars/date.scalar.ts | 4 ++++ .../workspace-entity-manager.spec.ts | 2 +- .../workspace-entity-manager.ts | 14 +++++++------ .../workspace-update-query-builder.ts | 21 ++++++++++--------- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars/date.scalar.ts b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars/date.scalar.ts index 16aeabc42..58c6cbb9e 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars/date.scalar.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars/date.scalar.ts @@ -15,6 +15,10 @@ export const DateScalarType = new GraphQLScalarType({ return new Date(parseInt(ast.value, 10)); } + if (ast.kind === Kind.STRING) { + return new Date(ast.value); + } + return null; }, }); diff --git a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts index 87752758f..f99cd222e 100644 --- a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts +++ b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts @@ -285,7 +285,7 @@ describe('WorkspaceEntityManager', () => { it('should call createQueryBuilder with permissionOptions for update', async () => { await entityManager.update('test-entity', {}, {}, mockPermissionOptions); expect(entityManager['createQueryBuilder']).toHaveBeenCalledWith( - undefined, + 'test-entity', undefined, undefined, mockPermissionOptions, diff --git a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.ts b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.ts index 3e6903e08..f16dddc7e 100644 --- a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.ts +++ b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.ts @@ -275,6 +275,8 @@ export class WorkspaceEntityManager extends EntityManager { partialEntity: QueryDeepPartialEntity, permissionOptions?: PermissionOptions, ): Promise { + const metadata = this.connection.getMetadata(target); + if ( criteria === undefined || criteria === null || @@ -294,23 +296,23 @@ export class WorkspaceEntityManager extends EntityManager { Array.isArray(criteria) ) { return this.createQueryBuilder( - undefined, - undefined, + target, + metadata.name, undefined, permissionOptions, ) - .update(target) + .update() .set(partialEntity) .whereInIds(criteria) .execute(); } else { return this.createQueryBuilder( - undefined, - undefined, + target, + metadata.name, undefined, permissionOptions, ) - .update(target) + .update() .set(partialEntity) .where(criteria) .execute(); diff --git a/packages/twenty-server/src/engine/twenty-orm/repository/workspace-update-query-builder.ts b/packages/twenty-server/src/engine/twenty-orm/repository/workspace-update-query-builder.ts index 439c26183..610163cb4 100644 --- a/packages/twenty-server/src/engine/twenty-orm/repository/workspace-update-query-builder.ts +++ b/packages/twenty-server/src/engine/twenty-orm/repository/workspace-update-query-builder.ts @@ -71,19 +71,19 @@ export class WorkspaceUpdateQueryBuilder< this.internalContext, ); - const beforeSelectQueryBuilder = new WorkspaceSelectQueryBuilder( + const eventSelectQueryBuilder = new WorkspaceSelectQueryBuilder( this as unknown as WorkspaceSelectQueryBuilder, this.objectRecordsPermissions, this.internalContext, - this.shouldBypassPermissionChecks, + true, this.authContext, ); - beforeSelectQueryBuilder.expressionMap.wheres = this.expressionMap.wheres; - beforeSelectQueryBuilder.expressionMap.aliases = this.expressionMap.aliases; - beforeSelectQueryBuilder.setParameters(this.getParameters()); + eventSelectQueryBuilder.expressionMap.wheres = this.expressionMap.wheres; + eventSelectQueryBuilder.expressionMap.aliases = this.expressionMap.aliases; + eventSelectQueryBuilder.setParameters(this.getParameters()); - const before = await beforeSelectQueryBuilder.getMany(); + const before = await eventSelectQueryBuilder.getMany(); const formattedBefore = formatResult( before, @@ -91,10 +91,11 @@ export class WorkspaceUpdateQueryBuilder< this.internalContext.objectMetadataMaps, ); - const after = await super.execute(); + const result = await super.execute(); + const after = await eventSelectQueryBuilder.getMany(); const formattedAfter = formatResult( - after.raw, + after, objectMetadata, this.internalContext.objectMetadataMaps, ); @@ -109,9 +110,9 @@ export class WorkspaceUpdateQueryBuilder< }); return { - raw: after.raw, + raw: result.raw, generatedMaps: formattedAfter, - affected: after.affected, + affected: result.affected, }; }