From ad18c44f2595641f3ae38158bb1ef9c2f53f3586 Mon Sep 17 00:00:00 2001 From: Weiko Date: Wed, 18 Sep 2024 21:54:22 +0200 Subject: [PATCH] Improve perf during repository creation in nested relations (#7132) --- .../graphql-query.parser.ts | 27 ------------------- .../process-nested-relations.helper.ts | 24 ++++++++++------- ...raphql-query-find-many-resolver.service.ts | 10 ++++--- 3 files changed, 21 insertions(+), 40 deletions(-) diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query.parser.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query.parser.ts index b1ee410d9..68db25391 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query.parser.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query.parser.ts @@ -1,7 +1,6 @@ import { FindOptionsOrderValue, FindOptionsWhere, - IsNull, ObjectLiteral, } from 'typeorm'; @@ -40,33 +39,7 @@ export class GraphqlQueryParser { const parsedFilter = graphqlQueryFilterParser.parse(recordFilter); - // if (!('deletedAt' in this.fieldMetadataMap)) { return parsedFilter; - // } - - // return this.addDefaultSoftDeleteCondition(parsedFilter); - } - - private addDefaultSoftDeleteCondition( - filter: FindOptionsWhere | FindOptionsWhere[], - ): FindOptionsWhere | FindOptionsWhere[] { - if (Array.isArray(filter)) { - return filter.map((condition) => - this.addSoftDeleteToCondition(condition), - ); - } - - return this.addSoftDeleteToCondition(filter); - } - - private addSoftDeleteToCondition( - condition: FindOptionsWhere, - ): FindOptionsWhere { - if (!('deletedAt' in condition)) { - return { ...condition, deletedAt: IsNull() }; - } - - return condition; } parseOrder( diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-nested-relations.helper.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-nested-relations.helper.ts index 66a0b3531..3284faaf3 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-nested-relations.helper.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-nested-relations.helper.ts @@ -1,4 +1,5 @@ import { + DataSource, FindManyOptions, FindOptionsRelations, In, @@ -33,6 +34,7 @@ export class ProcessNestedRelationsHelper { nestedRelations: any, limit: number, authContext: any, + dataSource: DataSource, ) { const relationFieldMetadata = parentObjectMetadataItem.fields[relationName]; const relationMetadata = getRelationMetadata(relationFieldMetadata); @@ -49,11 +51,9 @@ export class ProcessNestedRelationsHelper { const referenceObjectMetadataName = referenceObjectMetadata.nameSingular; - const relationRepository = - await this.twentyORMGlobalManager.getRepositoryForWorkspace( - authContext.workspace.id, - referenceObjectMetadataName, - ); + const relationRepository = await dataSource.getRepository( + referenceObjectMetadataName, + ); const relationIds = parentObjectRecords.map((item) => item.id); @@ -82,6 +82,7 @@ export class ProcessNestedRelationsHelper { nestedRelations as Record>, limit, authContext, + dataSource, ); } } @@ -94,6 +95,7 @@ export class ProcessNestedRelationsHelper { nestedRelations: any, limit: number, authContext: any, + dataSource: DataSource, ) { const relationFieldMetadata = parentObjectMetadataItem.fields[relationName]; @@ -104,11 +106,9 @@ export class ProcessNestedRelationsHelper { const referenceObjectMetadataName = referenceObjectMetadata.nameSingular; - const relationRepository = - await this.twentyORMGlobalManager.getRepositoryForWorkspace( - authContext.workspace.id, - referenceObjectMetadataName, - ); + const relationRepository = dataSource.getRepository( + referenceObjectMetadataName, + ); const relationIds = parentObjectRecords.map( (item) => item[`${relationName}Id`], @@ -139,6 +139,7 @@ export class ProcessNestedRelationsHelper { nestedRelations as Record>, limit, authContext, + dataSource, ); } } @@ -150,6 +151,7 @@ export class ProcessNestedRelationsHelper { relations: Record>, limit: number, authContext: any, + dataSource: DataSource, ) { for (const [relationName, nestedRelations] of Object.entries(relations)) { const relationFieldMetadata = @@ -170,6 +172,7 @@ export class ProcessNestedRelationsHelper { nestedRelations, limit, authContext, + dataSource, ); } else { await this.processFromRelation( @@ -180,6 +183,7 @@ export class ProcessNestedRelationsHelper { nestedRelations, limit, authContext, + dataSource, ); } } diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-many-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-many-resolver.service.ts index 84caa77db..f25e5688f 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-many-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-many-resolver.service.ts @@ -48,11 +48,14 @@ export class GraphqlQueryFindManyResolverService { this.validateArgsOrThrow(args); - const repository = - await this.twentyORMGlobalManager.getRepositoryForWorkspace( + const dataSource = + await this.twentyORMGlobalManager.getDataSourceForWorkspace( authContext.workspace.id, - objectMetadataItem.nameSingular, ); + + const repository = dataSource.getRepository( + objectMetadataItem.nameSingular, + ); const objectMetadataMap = generateObjectMetadataMap( objectMetadataCollection, ); @@ -125,6 +128,7 @@ export class GraphqlQueryFindManyResolverService { relations, limit, authContext, + dataSource, ); }