@node-ts/bus-workflow
Version:
A workflow engine for orchestrating logic flows in distributed applications.
56 lines (50 loc) • 2.35 kB
text/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>
}