From 4e39ef832c217382b6f8f0f6404d32d9a5a16076 Mon Sep 17 00:00:00 2001 From: Charles Bochet Date: Mon, 12 May 2025 17:26:35 +0200 Subject: [PATCH] Fix 0.53 upgrade commands (#11987) In this PR: - fixes [0-53-upgrade-search-vector-on-person-entity.command.ts](https://github.com/twentyhq/twenty/pull/11987/files#diff-d97fb2aefe44ac5d849fb7e29b8eaa1ca7c0f109d1b43fbdf87723b05dd22f58) small mistake - adding Cascade DELETE on fieldMetadata.relationTargetObjectMetadataId (like we have on fieldMetadata.objectMetatadaId) - enabling IsNewRelationEnabled in 0.53 upgrade --- ...tion-foreign-key-field-metadata.command.ts | 7 ++++++ ...-search-vector-on-person-entity.command.ts | 2 +- .../0-53-upgrade-version-command.module.ts | 2 ++ .../upgrade.command.ts | 4 ++- ...leteOnFieldMetadataRelationTargetObject.ts | 25 +++++++++++++++++++ .../field-metadata/field-metadata.entity.ts | 1 + 6 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 packages/twenty-server/src/database/typeorm/metadata/migrations/1747062634513-addCascadeDeleteOnFieldMetadataRelationTargetObject.ts diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-remove-relation-foreign-key-field-metadata.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-remove-relation-foreign-key-field-metadata.command.ts index 2e775f4a4..1a60a2a2d 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-remove-relation-foreign-key-field-metadata.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-remove-relation-foreign-key-field-metadata.command.ts @@ -9,6 +9,8 @@ import { ActiveOrSuspendedWorkspacesMigrationCommandRunner, RunOnWorkspaceArgs, } from 'src/database/commands/command-runners/active-or-suspended-workspaces-migration.command-runner'; +import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -21,6 +23,7 @@ export class RemoveRelationForeignKeyFieldMetadataCommand extends ActiveOrSuspen constructor( @InjectRepository(Workspace, 'core') protected readonly workspaceRepository: Repository, + protected readonly featureFlagService: FeatureFlagService, @InjectRepository(FieldMetadataEntity, 'metadata') private readonly fieldMetadataRepository: Repository, protected readonly twentyORMGlobalManager: TwentyORMGlobalManager, @@ -63,6 +66,10 @@ export class RemoveRelationForeignKeyFieldMetadataCommand extends ActiveOrSuspen ), ); } else { + await this.featureFlagService.enableFeatureFlags( + [FeatureFlagKey.IsNewRelationEnabled], + workspaceId, + ); await this.fieldMetadataRepository.delete({ id: In( fieldMetadataCollection.map((fieldMetadata) => fieldMetadata.id), diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-upgrade-search-vector-on-person-entity.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-upgrade-search-vector-on-person-entity.command.ts index bf385c600..ab8debe80 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-upgrade-search-vector-on-person-entity.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-upgrade-search-vector-on-person-entity.command.ts @@ -49,7 +49,7 @@ export class UpgradeSearchVectorOnPersonEntityCommand extends ActiveOrSuspendedW select: ['id'], where: { workspaceId, - nameSingular: STANDARD_OBJECT_IDS.person, + standardId: STANDARD_OBJECT_IDS.person, }, }); diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-upgrade-version-command.module.ts index 5e9fcc172..d9834db89 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/0-53/0-53-upgrade-version-command.module.ts @@ -6,6 +6,7 @@ import { CopyTypeormMigrationsCommand } from 'src/database/commands/upgrade-vers import { MigrateWorkflowEventListenersToAutomatedTriggersCommand } from 'src/database/commands/upgrade-version-command/0-53/0-53-migrate-workflow-event-listeners-to-automated-triggers.command'; import { RemoveRelationForeignKeyFieldMetadataCommand } from 'src/database/commands/upgrade-version-command/0-53/0-53-remove-relation-foreign-key-field-metadata.command'; import { UpgradeSearchVectorOnPersonEntityCommand } from 'src/database/commands/upgrade-version-command/0-53/0-53-upgrade-search-vector-on-person-entity.command'; +import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -25,6 +26,7 @@ import { WorkspaceMigrationRunnerModule } from 'src/engine/workspace-manager/wor SearchVectorModule, WorkspaceMigrationRunnerModule, WorkspaceMetadataVersionModule, + FeatureFlagModule, ], providers: [ MigrateWorkflowEventListenersToAutomatedTriggersCommand, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts index 274c3e482..c763ea656 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts @@ -21,6 +21,7 @@ import { UpgradeDateAndDateTimeFieldsSettingsJsonCommand } from 'src/database/co import { BackfillWorkflowNextStepIdsCommand } from 'src/database/commands/upgrade-version-command/0-53/0-53-backfill-workflow-next-step-ids.command'; import { CopyTypeormMigrationsCommand } from 'src/database/commands/upgrade-version-command/0-53/0-53-copy-typeorm-migrations.command'; import { MigrateWorkflowEventListenersToAutomatedTriggersCommand } from 'src/database/commands/upgrade-version-command/0-53/0-53-migrate-workflow-event-listeners-to-automated-triggers.command'; +import { RemoveRelationForeignKeyFieldMetadataCommand } from 'src/database/commands/upgrade-version-command/0-53/0-53-remove-relation-foreign-key-field-metadata.command'; import { UpgradeSearchVectorOnPersonEntityCommand } from 'src/database/commands/upgrade-version-command/0-53/0-53-upgrade-search-vector-on-person-entity.command'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; @@ -64,6 +65,7 @@ export class UpgradeCommand extends UpgradeCommandRunner { protected readonly backfillWorkflowNextStepIdsCommand: BackfillWorkflowNextStepIdsCommand, protected readonly copyTypeormMigrationsCommand: CopyTypeormMigrationsCommand, protected readonly upgradeSearchVectorOnPersonEntityCommand: UpgradeSearchVectorOnPersonEntityCommand, + protected readonly removeRelationForeignKeyFieldMetadataCommand: RemoveRelationForeignKeyFieldMetadataCommand, ) { super( workspaceRepository, @@ -111,7 +113,7 @@ export class UpgradeCommand extends UpgradeCommandRunner { }; const commands_053: VersionCommands = { - beforeSyncMetadata: [], + beforeSyncMetadata: [this.removeRelationForeignKeyFieldMetadataCommand], afterSyncMetadata: [ this.migrateWorkflowEventListenersToAutomatedTriggersCommand, this.backfillWorkflowNextStepIdsCommand, diff --git a/packages/twenty-server/src/database/typeorm/metadata/migrations/1747062634513-addCascadeDeleteOnFieldMetadataRelationTargetObject.ts b/packages/twenty-server/src/database/typeorm/metadata/migrations/1747062634513-addCascadeDeleteOnFieldMetadataRelationTargetObject.ts new file mode 100644 index 000000000..88ec9dede --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/metadata/migrations/1747062634513-addCascadeDeleteOnFieldMetadataRelationTargetObject.ts @@ -0,0 +1,25 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddCascadeDeleteOnFieldMetadataRelationTargetObject1747062634513 + implements MigrationInterface +{ + name = 'AddCascadeDeleteOnFieldMetadataRelationTargetObject1747062634513'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "metadata"."fieldMetadata" DROP CONSTRAINT "FK_6f6c87ec32cca956d8be321071c"`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."fieldMetadata" ADD CONSTRAINT "FK_6f6c87ec32cca956d8be321071c" FOREIGN KEY ("relationTargetObjectMetadataId") REFERENCES "metadata"."objectMetadata"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "metadata"."fieldMetadata" DROP CONSTRAINT "FK_6f6c87ec32cca956d8be321071c"`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."fieldMetadata" ADD CONSTRAINT "FK_6f6c87ec32cca956d8be321071c" FOREIGN KEY ("relationTargetObjectMetadataId") REFERENCES "metadata"."objectMetadata"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`, + ); + } +} diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts index 6da683b34..f0c4fad15 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts @@ -124,6 +124,7 @@ export class FieldMetadataEntity< () => ObjectMetadataEntity, (objectMetadata: ObjectMetadataEntity) => objectMetadata.targetRelationFields, + { onDelete: 'CASCADE' }, ) @JoinColumn({ name: 'relationTargetObjectMetadataId' }) relationTargetObjectMetadata: Relation;