Keep simplifying logic functions (#17595)

## Summary

Refactors the `LogicFunctionService` API by consolidating v1 and v2
services:

In metadata-module (presentation layer module)
- **Renamed methods**: `deleteOneLogicFunction` → `destroyOne`,
`updateOneLogicFunction` → `updateOne`, `createOneLogicFunction` →
`createOne`
- **Added duplicate methods**: `duplicateLogicFunction`,
`createLogicFunctionFromExistingLogicFunctionById`
- **Removed soft delete/restore** functionality - only hard delete
(`destroyOne`) is supported

In core-module (lower level module)
- **Moved execution methods** to `LogicFunctionExecutorService` which is
lower level: `executeOneLogicFunction`, `getAvailablePackages`,
`getLogicFunctionSourceCode`
This commit is contained in:
Charles Bochet
2026-01-30 20:30:52 +01:00
committed by GitHub
parent db31b83a86
commit 46d28509b9
18 changed files with 371 additions and 803 deletions
@@ -6,7 +6,7 @@ import { AgentEntity } from 'src/engine/metadata-modules/ai/ai-agent/entities/ag
import { createEmptyAllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/constant/create-empty-all-flat-entity-maps.constant';
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
import { LogicFunctionRuntime } from 'src/engine/metadata-modules/logic-function/logic-function.entity';
import { LogicFunctionService } from 'src/engine/metadata-modules/logic-function/logic-function.service';
import { LogicFunctionService } from 'src/engine/metadata-modules/logic-function/services/logic-function.service';
import { type FlatLogicFunction } from 'src/engine/metadata-modules/logic-function/types/flat-logic-function.type';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity';
@@ -36,8 +36,8 @@ describe('WorkflowVersionStepOperationsWorkspaceService', () => {
beforeEach(async () => {
logicFunctionService = {
createOneLogicFunction: jest.fn(),
deleteOneLogicFunction: jest.fn(),
createOne: jest.fn(),
destroyOne: jest.fn(),
duplicateLogicFunction: jest.fn(),
} as unknown as jest.Mocked<LogicFunctionService>;
@@ -154,10 +154,9 @@ describe('WorkflowVersionStepOperationsWorkspaceService', () => {
workspaceId: mockWorkspaceId,
});
expect(logicFunctionService.deleteOneLogicFunction).toHaveBeenCalledWith({
expect(logicFunctionService.destroyOne).toHaveBeenCalledWith({
id: 'function-id',
workspaceId: mockWorkspaceId,
softDelete: false,
});
});
@@ -265,9 +264,7 @@ describe('WorkflowVersionStepOperationsWorkspaceService', () => {
httpRouteTriggerSettings: null,
};
logicFunctionService.createOneLogicFunction.mockResolvedValue(
mockFlatLogicFunction,
);
logicFunctionService.createOne.mockResolvedValue(mockFlatLogicFunction);
const result = await service.runStepCreationSideEffectsAndBuildStep({
type: WorkflowActionType.CODE,
@@ -21,7 +21,7 @@ import { AiAgentRoleService } from 'src/engine/metadata-modules/ai/ai-agent-role
import { AgentEntity } from 'src/engine/metadata-modules/ai/ai-agent/entities/agent.entity';
import { DEFAULT_SMART_MODEL } from 'src/engine/metadata-modules/ai/ai-models/constants/ai-models.const';
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
import { LogicFunctionService } from 'src/engine/metadata-modules/logic-function/logic-function.service';
import { LogicFunctionService } from 'src/engine/metadata-modules/logic-function/services/logic-function.service';
import { findFlatLogicFunctionOrThrow } from 'src/engine/metadata-modules/logic-function/utils/find-flat-logic-function-or-throw.util';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity';
@@ -86,10 +86,9 @@ export class WorkflowVersionStepOperationsWorkspaceService {
}) {
switch (step.type) {
case WorkflowActionType.CODE: {
await this.logicFunctionService.deleteOneLogicFunction({
await this.logicFunctionService.destroyOne({
id: step.settings.input.logicFunctionId,
workspaceId,
softDelete: false,
});
break;
}
@@ -152,14 +151,13 @@ export class WorkflowVersionStepOperationsWorkspaceService {
switch (type) {
case WorkflowActionType.CODE: {
const newLogicFunction =
await this.logicFunctionService.createOneLogicFunction(
{
name: 'A Logic Function Code Workflow Step',
description: '',
},
workspaceId,
);
const newLogicFunction = await this.logicFunctionService.createOne({
input: {
name: 'A Logic Function Code Workflow Step',
description: '',
},
workspaceId,
});
if (!isDefined(newLogicFunction)) {
throw new WorkflowVersionStepException(