feat(orchestration,workflows): pipe oncomplete and workflow preparation (#4697)

* chore: pipe onComplete and workflow preparation step

* changeset

* fix: tests

---------

Co-authored-by: Adrien de Peretti <adrien.deperetti@gmail.com>
Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
Carlos R. L. Rodrigues
2023-08-08 08:06:47 -03:00
committed by GitHub
parent d1e298f5dc
commit c0ca002901
11 changed files with 205 additions and 20 deletions
@@ -1,5 +1,6 @@
import { isDefined } from "@medusajs/utils"
import { TransactionFlow } from "./transaction-orchestrator"
import { TransactionStepHandler } from "./transaction-step"
import { TransactionHandlerType, TransactionState } from "./types"
/**
@@ -79,11 +80,7 @@ export class DistributedTransaction {
constructor(
private flow: TransactionFlow,
public handler: (
actionId: string,
handlerType: TransactionHandlerType,
payload: TransactionPayload
) => Promise<unknown>,
public handler: TransactionStepHandler,
public payload?: any,
errors?: TransactionStepError[],
context?: TransactionContext
@@ -3,14 +3,13 @@ import {
TransactionCheckpoint,
TransactionPayload,
} from "./distributed-transaction"
import { TransactionStep, TransactionStepHandler } from "./transaction-step"
import {
TransactionHandlerType,
TransactionModel,
TransactionState,
TransactionStepStatus,
TransactionStepsDefinition,
} from "./types"
import { TransactionStep, TransactionStepHandler } from "./transaction-step"
import { EventEmitter } from "events"
@@ -366,7 +365,7 @@ export class TransactionOrchestrator extends EventEmitter {
if (!step.definition.async) {
execution.push(
transaction
.handler(step.definition.action + "", type, payload)
.handler(step.definition.action + "", type, payload, transaction)
.then(async (response) => {
await TransactionOrchestrator.setStepSuccess(
transaction,
@@ -387,7 +386,7 @@ export class TransactionOrchestrator extends EventEmitter {
execution.push(
transaction.saveCheckpoint().then(async () =>
transaction
.handler(step.definition.action + "", type, payload)
.handler(step.definition.action + "", type, payload, transaction)
.catch(async (error) => {
await TransactionOrchestrator.setStepFailure(
transaction,
@@ -1,15 +1,19 @@
import { TransactionPayload } from "./distributed-transaction"
import {
TransactionStepsDefinition,
TransactionStepStatus,
TransactionState,
DistributedTransaction,
TransactionPayload,
} from "./distributed-transaction"
import {
TransactionHandlerType,
TransactionState,
TransactionStepStatus,
TransactionStepsDefinition,
} from "./types"
export type TransactionStepHandler = (
actionId: string,
handlerType: TransactionHandlerType,
payload: TransactionPayload
payload: TransactionPayload,
transaction?: DistributedTransaction
) => Promise<unknown>
/**