feat: workflow delay action (Pause - Wait/Sleep/Delay) (#14915)
## Description - This PR focuses on issue https://github.com/orgs/twentyhq/projects/1/views/33?pane=issue&itemId=93150683&issue=twentyhq%7Ccore-team-issues%7C20 - added Workflow delay as a Flow action - for V1 added Type 1: Resume at a specific date or time ## Visual Appearance <img width="1792" height="1038" alt="Screenshot 2025-10-09 at 5 46 18 PM" src="https://github.com/user-attachments/assets/e62980e9-59c7-4e5a-b8ec-1e848a462d3f" /> <img width="1792" height="1037" alt="Screenshot 2025-10-09 at 5 46 35 PM" src="https://github.com/user-attachments/assets/7c3f4e39-ab0a-40ed-97a8-4f0cdb86f295" /> --------- Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>
This commit is contained in:
co-authored by
Thomas Trompette
parent
11564f135e
commit
4e5783eaf4
+3
-1
@@ -20,6 +20,7 @@ import { type MessageQueueWorkerOptions } from 'src/engine/core-modules/message-
|
||||
|
||||
import { type MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants';
|
||||
import { getJobKey } from 'src/engine/core-modules/message-queue/utils/get-job-key.util';
|
||||
import { MESSAGE_QUEUE_PRIORITY } from 'src/engine/core-modules/message-queue/message-queue-priority.constant';
|
||||
|
||||
export type BullMQDriverOptions = QueueOptions;
|
||||
|
||||
@@ -167,10 +168,11 @@ export class BullMQDriver implements MessageQueueDriver, OnModuleDestroy {
|
||||
|
||||
const queueOptions: JobsOptions = {
|
||||
jobId: options?.id ? `${options.id}-${v4()}` : undefined, // We add V4() to id to make sure ids are uniques so we can add a waiting job when a job related with the same option.id is running
|
||||
priority: options?.priority,
|
||||
priority: options?.priority ?? MESSAGE_QUEUE_PRIORITY[queueName],
|
||||
attempts: 1 + (options?.retryLimit || 0),
|
||||
removeOnComplete: true,
|
||||
removeOnFail: 100,
|
||||
delay: options?.delay,
|
||||
};
|
||||
|
||||
await this.queueMap[queueName].add(jobName, data, queueOptions);
|
||||
|
||||
+1
@@ -2,6 +2,7 @@ export interface QueueJobOptions {
|
||||
id?: string;
|
||||
priority?: number;
|
||||
retryLimit?: number;
|
||||
delay?: number;
|
||||
}
|
||||
|
||||
export interface QueueCronJobOptions extends QueueJobOptions {
|
||||
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants';
|
||||
|
||||
export const MESSAGE_QUEUE_PRIORITY = {
|
||||
[MessageQueue.billingQueue]: 1,
|
||||
[MessageQueue.entityEventsToDbQueue]: 1,
|
||||
[MessageQueue.emailQueue]: 1,
|
||||
[MessageQueue.workflowQueue]: 2,
|
||||
[MessageQueue.webhookQueue]: 2,
|
||||
[MessageQueue.messagingQueue]: 2,
|
||||
[MessageQueue.delayedJobsQueue]: 3,
|
||||
[MessageQueue.calendarQueue]: 4,
|
||||
[MessageQueue.contactCreationQueue]: 4,
|
||||
[MessageQueue.taskAssignedQueue]: 4,
|
||||
[MessageQueue.serverlessFunctionQueue]: 4,
|
||||
[MessageQueue.workspaceQueue]: 5,
|
||||
[MessageQueue.triggerQueue]: 5,
|
||||
[MessageQueue.deleteCascadeQueue]: 6,
|
||||
[MessageQueue.cronQueue]: 7,
|
||||
};
|
||||
+1
@@ -14,6 +14,7 @@ export enum MessageQueue {
|
||||
workspaceQueue = 'workspace-queue',
|
||||
entityEventsToDbQueue = 'entity-events-to-db-queue',
|
||||
workflowQueue = 'workflow-queue',
|
||||
delayedJobsQueue = 'delayed-jobs-queue',
|
||||
deleteCascadeQueue = 'delete-cascade-queue',
|
||||
serverlessFunctionQueue = 'serverless-function-queue',
|
||||
triggerQueue = 'trigger-queue',
|
||||
|
||||
Reference in New Issue
Block a user