From 2fc29d41a8de349bc786b6224b31caa06d7ab842 Mon Sep 17 00:00:00 2001 From: Weiko Date: Tue, 19 Aug 2025 19:47:27 +0200 Subject: [PATCH] Fix enum deletion during migration v2 (#13977) ## Context - When deleting an object, we were not properly deleting all the enums, in fact some enums were inside composite fields and should have been handled as well. This was already implemented that way for object update and creation but not deletion. - Fixing an issue where creating a field with an empty string as a default value was skipped and causing an issue with non-nullable columns --- .../utils/build-sql-column-definition.util.ts | 6 +----- .../workspace-migration-runner-v2.module.ts | 12 +----------- .../workspace-schema-object-action-runner.service.ts | 9 ++++++--- 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/utils/build-sql-column-definition.util.ts b/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/utils/build-sql-column-definition.util.ts index cdb25aaf021..622269573e9 100644 --- a/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/utils/build-sql-column-definition.util.ts +++ b/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/utils/build-sql-column-definition.util.ts @@ -31,11 +31,7 @@ export const buildSqlColumnDefinition = ( parts.push('UNIQUE'); } - if ( - isDefined(column.default) && - column.default !== '' && - column.type !== 'tsvector' - ) { + if (isDefined(column.default) && column.type !== 'tsvector') { const safeDefault = sanitizeDefaultValue(column.default); parts.push(`DEFAULT ${safeDefault}`); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts index 02dedd30461..129a343c507 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts @@ -31,23 +31,13 @@ import { WorkspaceSchemaObjectActionRunnerService } from 'src/engine/workspace-m WorkspaceMetadataObjectActionRunnerService, WorkspaceMetadataIndexActionRunnerService, WorkspaceMetadataFieldActionRunnerService, - WorkspaceSchemaObjectActionRunnerService, WorkspaceSchemaIndexActionRunnerService, - WorkspaceSchemaFieldActionRunnerService, WorkspaceMetadataMigrationRunnerService, WorkspaceSchemaMigrationRunnerService, WorkspaceMigrationRunnerV2Service, - ], - exports: [ - WorkspaceMigrationRunnerV2Service, - WorkspaceMetadataObjectActionRunnerService, - WorkspaceMetadataIndexActionRunnerService, - WorkspaceMetadataFieldActionRunnerService, WorkspaceSchemaObjectActionRunnerService, - WorkspaceSchemaIndexActionRunnerService, WorkspaceSchemaFieldActionRunnerService, - WorkspaceMetadataMigrationRunnerService, - WorkspaceSchemaMigrationRunnerService, ], + exports: [WorkspaceMigrationRunnerV2Service], }) export class WorkspaceMigrationRunnerV2Module {} diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-schema-migration-runner/workspace-schema-object-action-runner.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-schema-migration-runner/workspace-schema-object-action-runner.service.ts index 5d1f6bd5c0d..77dd73d6572 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-schema-migration-runner/workspace-schema-object-action-runner.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-schema-migration-runner/workspace-schema-object-action-runner.service.ts @@ -49,14 +49,17 @@ export class WorkspaceSchemaObjectActionRunnerService tableName, }); - const enumFlatFieldMetadatas = Object.values( + const enumOrCompositeFlatFieldMetadatas = Object.values( flatObjectMetadataWithFlatFieldMaps.fieldsById, ) .filter((field): field is FlatFieldMetadata => field != null) - .filter((field) => isEnumFlatFieldMetadata(field)); + .filter( + (field) => + isEnumFlatFieldMetadata(field) || isCompositeFlatFieldMetadata(field), + ); const enumOperations = collectEnumOperationsForObject({ - flatFieldMetadatas: enumFlatFieldMetadatas, + flatFieldMetadatas: enumOrCompositeFlatFieldMetadatas, tableName, operation: EnumOperation.DROP, });