@node-ts/bus-workflow
Version:
A workflow engine for orchestrating logic flows in distributed applications.
40 lines (39 loc) • 2.37 kB
TypeScript
import { Message, MessageAttributes } from '@node-ts/bus-messages';
import { ClassConstructor } from '@node-ts/bus-core';
import { WorkflowData } from '../workflow-data';
import { MessageWorkflowMapping } from '../message-workflow-mapping';
/**
* Infrastructure that provides the ability to persist workflow state for long running processes
*/
export interface Persistence {
/**
* If provided, initializes the persistence implementation. This is where database connections are
* started.
*/
initialize?(): Promise<void>;
/**
* If provided, will dispose any resources related to the persistence. This is where things like
* closing database connections should occur.
*/
dispose?(): Promise<void>;
/**
* Allows the persistence implementation to set up its internal structure to support the workflow data
* that it will be persisting. Typically for a database this could mean setting up the internal table
* schema to support persisting of each of the workflow data models.
*/
initializeWorkflow<TWorkflowData extends WorkflowData>(workflowDataConstructor: ClassConstructor<TWorkflowData>, messageWorkflowMappings: MessageWorkflowMapping<Message, WorkflowData>[]): Promise<void>;
/**
* Retrieves all workflow data models that match the given `messageMap` criteria
* @param workflowDataConstructor The workflow model type to retrieve
* @param messageMap How the message is mapped to workflow data models
* @param message The message to map to workflow data
* @param includeCompleted If completed workflow data items should also be returned. False by default
*/
getWorkflowData<WorkflowDataType extends WorkflowData, MessageType extends Message>(workflowDataConstructor: ClassConstructor<WorkflowDataType>, messageMap: MessageWorkflowMapping<MessageType, WorkflowDataType>, message: MessageType, messageOptions: MessageAttributes, includeCompleted?: boolean): Promise<WorkflowDataType[]>;
/**
* Saves a new workflow data model or updates an existing one. Persistence implementations should take care
* to observe the change in `$version` of the workflow data model when persisting to ensure race conditions
* don't occur.
*/
saveWorkflowData<WorkflowDataType extends WorkflowData>(workflowData: WorkflowDataType): Promise<void>;
}