diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/__tests__/__snapshots__/all-universal-flat-entity-properties-to-compare-and-stringify.constant.spec.ts.snap b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/__tests__/__snapshots__/all-universal-flat-entity-properties-to-compare-and-stringify.constant.spec.ts.snap index 36ff560e1e..6a74e1be83 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/__tests__/__snapshots__/all-universal-flat-entity-properties-to-compare-and-stringify.constant.spec.ts.snap +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/__tests__/__snapshots__/all-universal-flat-entity-properties-to-compare-and-stringify.constant.spec.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`ALL_UNIVERSAL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY should match snapshot 1`] = ` { @@ -90,6 +90,7 @@ exports[`ALL_UNIVERSAL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY should ma "cronTriggerSettings", "databaseEventTriggerSettings", "httpRouteTriggerSettings", + "builtHandlerPath", ], "propertiesToStringify": [ "toolInputSchema", diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts index 09ba08db54..d4c59e526d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts @@ -577,7 +577,7 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = { universalProperty: undefined, }, builtHandlerPath: { - toCompare: false, + toCompare: true, toStringify: false, universalProperty: undefined, }, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/logic-function/services/update-logic-function-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/logic-function/services/update-logic-function-action-handler.service.ts index ae41dc74d1..57ca6b8a6d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/logic-function/services/update-logic-function-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/logic-function/services/update-logic-function-action-handler.service.ts @@ -1,7 +1,12 @@ import { Injectable } from '@nestjs/common'; +import { FileFolder } from 'twenty-shared/types'; +import { isDefined } from 'twenty-shared/utils'; + import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface'; +import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { findFlatEntityByUniversalIdentifierOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier-or-throw.util'; import { LogicFunctionEntity } from 'src/engine/metadata-modules/logic-function/logic-function.entity'; import { resolveUniversalUpdateRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-update-relation-identifiers-to-ids.util'; @@ -19,6 +24,10 @@ export class UpdateLogicFunctionActionHandlerService extends WorkspaceMigrationR 'update', 'logicFunction', ) { + constructor(private readonly fileStorageService: FileStorageService) { + super(); + } + override async transpileUniversalActionToFlatAction( context: WorkspaceMigrationActionRunnerArgs, ): Promise { @@ -46,9 +55,26 @@ export class UpdateLogicFunctionActionHandlerService extends WorkspaceMigrationR async executeForMetadata( context: WorkspaceMigrationActionRunnerContext, ): Promise { - const { flatAction, queryRunner, workspaceId } = context; + const { + flatAction, + queryRunner, + workspaceId, + allFlatEntityMaps, + flatApplication, + } = context; const { entityId, update } = flatAction; + const existingLogicFunction = findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityMaps: allFlatEntityMaps.flatLogicFunctionMaps, + flatEntityId: entityId, + }); + + const applicationUniversalIdentifier = flatApplication.universalIdentifier; + + const builtPathChanged = + isDefined(update.builtHandlerPath) && + update.builtHandlerPath !== existingLogicFunction.builtHandlerPath; + const logicFunctionRepository = queryRunner.manager.getRepository( LogicFunctionEntity, @@ -58,5 +84,14 @@ export class UpdateLogicFunctionActionHandlerService extends WorkspaceMigrationR { id: entityId, workspaceId }, update as Parameters[1], ); + + if (builtPathChanged) { + await this.fileStorageService.delete({ + workspaceId, + applicationUniversalIdentifier, + fileFolder: FileFolder.BuiltLogicFunction, + resourcePath: existingLogicFunction.builtHandlerPath, + }); + } } }