Connect/Disconnect in .save (#13444)

This commit is contained in:
Etienne
2025-07-28 20:28:41 +02:00
committed by GitHub
parent 2a82a33fff
commit c186b78f67
11 changed files with 119 additions and 64 deletions
@@ -1,11 +1,11 @@
import { isDefined } from 'class-validator';
import { RELATION_NESTED_QUERY_KEYWORDS } from 'twenty-shared/constants';
import { EntityTarget, ObjectLiteral } from 'typeorm';
import { EntityTarget, ObjectLiteral, SelectQueryBuilder } from 'typeorm';
import { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity';
import { WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/workspace-internal-context.interface';
import { QueryDeepPartialEntityWithNestedRelationFields } from 'src/engine/twenty-orm/entity-manager/types/query-deep-partial-entity-with-relation-connect.type';
import { QueryDeepPartialEntityWithNestedRelationFields } from 'src/engine/twenty-orm/entity-manager/types/query-deep-partial-entity-with-nested-relation-fields.type';
import { RelationConnectQueryConfig } from 'src/engine/twenty-orm/entity-manager/types/relation-connect-query-config.type';
import {
RelationConnectQueryFieldsByEntityIndex,
@@ -36,10 +36,9 @@ export class RelationNestedQueries {
| QueryDeepPartialEntityWithNestedRelationFields<Entity>[]
| QueryDeepPartialEntityWithNestedRelationFields<Entity>,
target: EntityTarget<Entity>,
): [
RelationConnectQueryConfig[],
RelationDisconnectQueryFieldsByEntityIndex,
] {
):
| [RelationConnectQueryConfig[], RelationDisconnectQueryFieldsByEntityIndex]
| null {
const entitiesArray = Array.isArray(entities) ? entities : [entities];
const {
@@ -53,7 +52,10 @@ export class RelationNestedQueries {
relationConnectQueryFieldsByEntityIndex,
);
return [connectConfig, relationDisconnectQueryFieldsByEntityIndex];
return connectConfig.length > 0 ||
Object.keys(relationDisconnectQueryFieldsByEntityIndex).length > 0
? [connectConfig, relationDisconnectQueryFieldsByEntityIndex]
: null;
}
private prepareRelationConnect<Entity extends ObjectLiteral>(
@@ -90,7 +92,9 @@ export class RelationNestedQueries {
RelationConnectQueryConfig[],
RelationDisconnectQueryFieldsByEntityIndex,
];
queryBuilder: WorkspaceSelectQueryBuilder<Entity>;
queryBuilder:
| WorkspaceSelectQueryBuilder<Entity>
| SelectQueryBuilder<Entity>;
}): Promise<QueryDeepPartialEntity<Entity>[]> {
const entitiesArray = Array.isArray(entities) ? entities : [entities];
@@ -120,7 +124,9 @@ export class RelationNestedQueries {
}: {
entities: QueryDeepPartialEntityWithNestedRelationFields<Entity>[];
relationConnectQueryConfigs: RelationConnectQueryConfig[];
queryBuilder: WorkspaceSelectQueryBuilder<Entity>;
queryBuilder:
| WorkspaceSelectQueryBuilder<Entity>
| SelectQueryBuilder<Entity>;
}): Promise<QueryDeepPartialEntity<Entity>[]> {
if (relationConnectQueryConfigs.length === 0) return entities;
@@ -139,7 +145,9 @@ export class RelationNestedQueries {
private async executeConnectQueries<Entity extends ObjectLiteral>(
relationConnectQueryConfigs: RelationConnectQueryConfig[],
queryBuilder: WorkspaceSelectQueryBuilder<Entity>,
queryBuilder:
| WorkspaceSelectQueryBuilder<Entity>
| SelectQueryBuilder<Entity>,
): Promise<[RelationConnectQueryConfig, Record<string, unknown>[]][]> {
const allRecordsToConnectWithConfig: [
RelationConnectQueryConfig,