400 workflows webhooks trigger (#11041)

https://github.com/user-attachments/assets/dc0ece22-4d87-417f-b9e1-a11c3fd52ce8
This commit is contained in:
martmull
2025-03-20 11:12:52 +01:00
committed by GitHub
parent bc94891a27
commit d99f027e8d
30 changed files with 399 additions and 49 deletions

View File

@ -59,6 +59,7 @@ export class WorkflowSchemaWorkspaceService {
objectMetadataRepository: this.objectMetadataRepository,
});
}
case WorkflowTriggerType.WEBHOOK:
case WorkflowTriggerType.CRON: {
return {};
}

View File

@ -10,7 +10,9 @@ export enum WorkflowTriggerExceptionCode {
INVALID_INPUT = 'INVALID_INPUT',
INVALID_WORKFLOW_TRIGGER = 'INVALID_WORKFLOW_TRIGGER',
INVALID_WORKFLOW_VERSION = 'INVALID_WORKFLOW_VERSION',
INVALID_WORKFLOW_STATUS = 'INVALID_WORKFLOW_STATUS',
INVALID_ACTION_TYPE = 'INVALID_ACTION_TYPE',
NOT_FOUND = 'NOT_FOUND',
FORBIDDEN = 'FORBIDDEN',
INTERNAL_ERROR = 'INTERNAL_ERROR',
}

View File

@ -4,6 +4,7 @@ export enum WorkflowTriggerType {
DATABASE_EVENT = 'DATABASE_EVENT',
MANUAL = 'MANUAL',
CRON = 'CRON',
WEBHOOK = 'WEBHOOK',
}
type BaseWorkflowTriggerSettings = {
@ -58,9 +59,14 @@ export type WorkflowCronTrigger = BaseTrigger & {
) & { outputSchema: object };
};
export type WorkflowWebhookTrigger = BaseTrigger & {
type: WorkflowTriggerType.WEBHOOK;
};
export type WorkflowManualTriggerSettings = WorkflowManualTrigger['settings'];
export type WorkflowTrigger =
| WorkflowDatabaseEventTrigger
| WorkflowManualTrigger
| WorkflowCronTrigger;
| WorkflowCronTrigger
| WorkflowWebhookTrigger;

View File

@ -69,6 +69,7 @@ function assertTriggerSettingsAreValid(
assertDatabaseEventTriggerSettingsAreValid(settings);
break;
case WorkflowTriggerType.MANUAL:
case WorkflowTriggerType.WEBHOOK:
break;
case WorkflowTriggerType.CRON:
assertCronTriggerSettingsAreValid(settings);

View File

@ -4,11 +4,9 @@ import { InjectRepository } from '@nestjs/typeorm';
import { EntityManager, Repository } from 'typeorm';
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
import { buildCreatedByFromFullNameMetadata } from 'src/engine/core-modules/actor/utils/build-created-by-from-full-name-metadata.util';
import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator';
import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants';
import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service';
import { User } from 'src/engine/core-modules/user/user.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { ScopedWorkspaceContextFactory } from 'src/engine/twenty-orm/factories/scoped-workspace-context.factory';
import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository';
@ -37,6 +35,7 @@ import { WorkflowTriggerType } from 'src/modules/workflow/workflow-trigger/types
import { assertVersionCanBeActivated } from 'src/modules/workflow/workflow-trigger/utils/assert-version-can-be-activated.util';
import { computeCronPatternFromSchedule } from 'src/modules/workflow/workflow-trigger/utils/compute-cron-pattern-from-schedule';
import { assertNever } from 'src/utils/assert';
import { ActorMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type';
@Injectable()
export class WorkflowTriggerWorkspaceService {
@ -66,12 +65,15 @@ export class WorkflowTriggerWorkspaceService {
return workspaceId;
}
async runWorkflowVersion(
workflowVersionId: string,
payload: object,
workspaceMemberId: string,
{ firstName, lastName }: User,
) {
async runWorkflowVersion({
workflowVersionId,
payload,
createdBy,
}: {
workflowVersionId: string;
payload: object;
createdBy: ActorMetadata;
}) {
await this.workflowCommonWorkspaceService.getWorkflowVersionOrFail(
workflowVersionId,
);
@ -80,10 +82,7 @@ export class WorkflowTriggerWorkspaceService {
this.getWorkspaceId(),
workflowVersionId,
payload,
buildCreatedByFromFullNameMetadata({
fullNameMetadata: { firstName, lastName },
workspaceMemberId,
}),
createdBy,
);
}
@ -342,6 +341,7 @@ export class WorkflowTriggerWorkspaceService {
return;
case WorkflowTriggerType.MANUAL:
case WorkflowTriggerType.WEBHOOK:
return;
case WorkflowTriggerType.CRON: {
const pattern = computeCronPatternFromSchedule(workflowVersion.trigger);
@ -384,6 +384,7 @@ export class WorkflowTriggerWorkspaceService {
return;
case WorkflowTriggerType.MANUAL:
case WorkflowTriggerType.WEBHOOK:
return;
case WorkflowTriggerType.CRON:
await this.messageQueueService.removeCron({