From 9838dc611b6cdf437911b6bad1bee69aed490abb Mon Sep 17 00:00:00 2001 From: Paul Rastoin <45004772+prastoin@users.noreply.github.com> Date: Mon, 18 Aug 2025 18:38:43 +0200 Subject: [PATCH] Fix build field order delete object refactor (#13965) # Introduction - Decided to remove delete_field resulting from delete_object as ON CASCADE will handle it - Still ordering delete_field in first place in order to handle relationTargetFieldMetadata deletion on passed delete_object that contains relation field --- .../workspace-migration-builder.spec.ts.snap | 200 ------------------ ...pace-migration-builder-object-test-case.ts | 2 - .../workspace-migration-builder-v2.service.ts | 22 +- ...ration-v2-field-actions-builder.service.ts | 28 ++- ...ation-v2-object-actions-builder.service.ts | 10 +- ...validate-and-build-metadata-result.type.ts | 4 +- 6 files changed, 35 insertions(+), 231 deletions(-) diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap index f13b656aa8..71f601d367 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap @@ -2881,71 +2881,6 @@ exports[`Workspace migration builder object actions test suite It should build a exports[`Workspace migration builder object actions test suite It should build a delete_object action with custom deactivated object 1`] = ` [ - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, { "objectMetadataId": Any, "type": "delete_object", @@ -2955,141 +2890,6 @@ exports[`Workspace migration builder object actions test suite It should build a exports[`Workspace migration builder object actions test suite It should build a delete_object action with standard activated object 1`] = ` [ - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, - { - "fieldMetadataId": Any, - "objectMetadataId": Any, - "type": "delete_field", - }, { "objectMetadataId": Any, "type": "delete_object", diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-object-test-case.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-object-test-case.ts index 52480d3a3d..842f617fa8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-object-test-case.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-object-test-case.ts @@ -35,7 +35,6 @@ const DELETE_OBJECT_TEST_CASES: WorkspaceMigrationBuilderTestCase[] = [ }, expectedActionsTypeCounter: { deleteObject: 1, - deleteField: ROCKET_FLAT_OBJECT_MOCK.flatFieldMetadatas.length, }, }, }, @@ -58,7 +57,6 @@ const DELETE_OBJECT_TEST_CASES: WorkspaceMigrationBuilderTestCase[] = [ }, expectedActionsTypeCounter: { deleteObject: 1, - deleteField: COMPANY_FLAT_OBJECT_MOCK.flatFieldMetadatas.length, }, }, }, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-builder-v2.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-builder-v2.service.ts index ddb3b69ee1..da5f60b6be 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-builder-v2.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-builder-v2.service.ts @@ -12,7 +12,6 @@ import { WorkspaceMigrationV2ObjectActionsBuilderService } from 'src/engine/work import { WorkspaceMigrationV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2'; import { computeUpdatedObjectMetadataDeletedCreatedUpdatedFieldMatrix } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-field-matrix.util'; import { computeUpdatedObjectMetadataDeletedCreatedUpdatedIndexMatrix } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-index-matrix.util'; -import { getWorkspaceMigrationV2FieldDeleteAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-field-actions'; import { getWorkspaceMigrationV2CreateIndexAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-index-actions'; import { buildWorkspaceMigrationIndexActions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-v2-index-actions-builder'; @@ -108,18 +107,6 @@ export class WorkspaceMigrationBuilderV2Service { ), ); - const deletedObjectWorkspaceMigrationDeleteFieldActions = - buildOptions.inferDeletionFromMissingObjectFieldIndex - ? deletedFlatObjectMetadatas.flatMap((flatObjectMetadata) => - flatObjectMetadata.flatFieldMetadatas.map((flatFieldMetadata) => - getWorkspaceMigrationV2FieldDeleteAction({ - flatFieldMetadata, - flatObjectMetadata, - }), - ), - ) - : []; - const indexWorkspaceMigrationActions = buildWorkspaceMigrationIndexActions({ objectMetadataDeletedCreatedUpdatedIndex, inferDeletionFromMissingObjectFieldIndex: @@ -144,10 +131,13 @@ export class WorkspaceMigrationBuilderV2Service { workspaceMigration: { workspaceId, actions: [ - ...deletedObjectWorkspaceMigrationDeleteFieldActions, - ...objectActionsValidateAndBuildResult.successful, + ...fieldActionsValidateAndBuildResult.deleted, + ...objectActionsValidateAndBuildResult.deleted, + ...objectActionsValidateAndBuildResult.created, + ...objectActionsValidateAndBuildResult.updated, + ...fieldActionsValidateAndBuildResult.created, + ...fieldActionsValidateAndBuildResult.updated, ...createdObjectMetadataCreateIndexActions, - ...fieldActionsValidateAndBuildResult.successful, ...indexWorkspaceMigrationActions, ], }, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-v2-field-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-v2-field-actions-builder.service.ts index efdf3d4741..eb2d138c2b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-v2-field-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-v2-field-actions-builder.service.ts @@ -55,7 +55,9 @@ export class WorkspaceMigrationV2FieldActionsBuilderService { const validateAndBuildResult: ValidateAndBuildMetadataResult = { failed: [], - successful: [], + created: [], + deleted: [], + updated: [], optimisticFlatObjectMetadataMaps: structuredClone( fromFlatObjectMetadataMaps, ), @@ -102,7 +104,7 @@ export class WorkspaceMigrationV2FieldActionsBuilderService { validateAndBuildResult.optimisticFlatObjectMetadataMaps, }); - validateAndBuildResult.successful.push({ + validateAndBuildResult.updated.push({ type: 'update_field', fieldMetadataId, objectMetadataId, @@ -156,7 +158,7 @@ export class WorkspaceMigrationV2FieldActionsBuilderService { flatObjectMetadata, }); - validateAndBuildResult.successful.push(createFieldAction); + validateAndBuildResult.created.push(createFieldAction); } for (const flatFieldMetadataToDelete of buildOptions.inferDeletionFromMissingObjectFieldIndex @@ -189,7 +191,7 @@ export class WorkspaceMigrationV2FieldActionsBuilderService { flatObjectMetadata, }); - validateAndBuildResult.successful.push(deleteFieldAction); + validateAndBuildResult.deleted.push(deleteFieldAction); } return validateAndBuildResult; @@ -206,7 +208,9 @@ export class WorkspaceMigrationV2FieldActionsBuilderService { let validateAndBuildResult: ValidateAndBuildMetadataResult = { failed: [], - successful: [], + created: [], + deleted: [], + updated: [], optimisticFlatObjectMetadataMaps: structuredClone( fromFlatObjectMetadataMaps, ), @@ -235,9 +239,17 @@ export class WorkspaceMigrationV2FieldActionsBuilderService { ...validateAndBuildResult.failed, ...flatObjectMetadataFlatFieldMatrixValidateAndBuildResult.failed, ], - successful: [ - ...validateAndBuildResult.successful, - ...flatObjectMetadataFlatFieldMatrixValidateAndBuildResult.successful, + created: [ + ...validateAndBuildResult.created, + ...flatObjectMetadataFlatFieldMatrixValidateAndBuildResult.created, + ], + deleted: [ + ...validateAndBuildResult.deleted, + ...flatObjectMetadataFlatFieldMatrixValidateAndBuildResult.deleted, + ], + updated: [ + ...validateAndBuildResult.updated, + ...flatObjectMetadataFlatFieldMatrixValidateAndBuildResult.updated, ], optimisticFlatObjectMetadataMaps: flatObjectMetadataFlatFieldMatrixValidateAndBuildResult.optimisticFlatObjectMetadataMaps, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-v2-object-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-v2-object-actions-builder.service.ts index 86fe9457d6..aa58566175 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-v2-object-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-v2-object-actions-builder.service.ts @@ -53,7 +53,9 @@ export class WorkspaceMigrationV2ObjectActionsBuilderService { const validateAndBuildResult: ValidateAndBuildMetadataResult = { failed: [], - successful: [], + created: [], + deleted: [], + updated: [], optimisticFlatObjectMetadataMaps: structuredClone( fromFlatObjectMetadataMaps, ), @@ -95,7 +97,7 @@ export class WorkspaceMigrationV2ObjectActionsBuilderService { createFieldActions, }); - validateAndBuildResult.successful.push(createObjectAction); + validateAndBuildResult.created.push(createObjectAction); } for (const flatObjectMetadataToDelete of buildOptions.inferDeletionFromMissingObjectFieldIndex @@ -127,7 +129,7 @@ export class WorkspaceMigrationV2ObjectActionsBuilderService { flatObjectMetadataToDelete, ); - validateAndBuildResult.successful.push(deleteObjectAction); + validateAndBuildResult.deleted.push(deleteObjectAction); } for (const { @@ -170,7 +172,7 @@ export class WorkspaceMigrationV2ObjectActionsBuilderService { updates: objectUpdatedProperties, }; - validateAndBuildResult.successful.push(updateObjectAction); + validateAndBuildResult.updated.push(updateObjectAction); } return validateAndBuildResult; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/validate-and-build-metadata-result.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/validate-and-build-metadata-result.type.ts index 1d4b9f88fd..843ad5134c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/validate-and-build-metadata-result.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/validate-and-build-metadata-result.type.ts @@ -10,6 +10,8 @@ export type ValidateAndBuildMetadataResult< | FailedFlatFieldMetadataValidationExceptions | FailedFlatObjectMetadataValidationExceptions )[]; - successful: T[]; + created: T[]; + deleted: T[]; + updated: T[]; optimisticFlatObjectMetadataMaps: FlatObjectMetadataMaps; };