feat(core-flows): introduce a generic create entities step (#8553)
This commit is contained in:
50
packages/core/core-flows/src/common/steps/create-entities.ts
Normal file
50
packages/core/core-flows/src/common/steps/create-entities.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
export interface CreateEntitiesStepType {
|
||||
moduleRegistrationName: string
|
||||
invokeMethod: string
|
||||
compensateMethod: string
|
||||
entityIdentifier?: string
|
||||
data: any[]
|
||||
}
|
||||
|
||||
export const createEntitiesStepId = "create-entities-step"
|
||||
/**
|
||||
* This step creates entities for any given module or resource
|
||||
*/
|
||||
export const createEntitiesStep = createStep(
|
||||
createEntitiesStepId,
|
||||
async (input: CreateEntitiesStepType, { container }) => {
|
||||
const {
|
||||
moduleRegistrationName,
|
||||
invokeMethod,
|
||||
compensateMethod,
|
||||
entityIdentifier = "id",
|
||||
data = [],
|
||||
} = input
|
||||
|
||||
const module = container.resolve<any>(moduleRegistrationName)
|
||||
const created: any[] = data.length ? await module[invokeMethod](data) : []
|
||||
|
||||
return new StepResponse(created, {
|
||||
entityIdentifiers: created.map((c) => c[entityIdentifier]),
|
||||
moduleRegistrationName,
|
||||
compensateMethod,
|
||||
})
|
||||
},
|
||||
async (compensateInput, { container }) => {
|
||||
const {
|
||||
entityIdentifiers = [],
|
||||
moduleRegistrationName,
|
||||
compensateMethod,
|
||||
} = compensateInput!
|
||||
|
||||
if (!entityIdentifiers?.length) {
|
||||
return
|
||||
}
|
||||
|
||||
const module = container.resolve<any>(moduleRegistrationName)
|
||||
|
||||
await module[compensateMethod](entityIdentifiers)
|
||||
}
|
||||
)
|
||||
@@ -1,37 +0,0 @@
|
||||
import {
|
||||
CreateOrderChangeActionDTO,
|
||||
IOrderModuleService,
|
||||
} from "@medusajs/types"
|
||||
import { ModuleRegistrationName } from "@medusajs/utils"
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
export const createOrderChangeActionsStepId = "create-order-change-actions"
|
||||
/**
|
||||
* This step creates order change actions.
|
||||
*/
|
||||
export const createOrderChangeActionsStep = createStep(
|
||||
createOrderChangeActionsStepId,
|
||||
async (data: CreateOrderChangeActionDTO[], { container }) => {
|
||||
const service = container.resolve<IOrderModuleService>(
|
||||
ModuleRegistrationName.ORDER
|
||||
)
|
||||
|
||||
const created = await service.addOrderAction(data)
|
||||
|
||||
return new StepResponse(
|
||||
created,
|
||||
created.map((c) => c.id)
|
||||
)
|
||||
},
|
||||
async (ids, { container }) => {
|
||||
if (!ids?.length) {
|
||||
return
|
||||
}
|
||||
|
||||
const service = container.resolve<IOrderModuleService>(
|
||||
ModuleRegistrationName.ORDER
|
||||
)
|
||||
|
||||
await service.deleteOrderChangeActions(ids)
|
||||
}
|
||||
)
|
||||
@@ -10,7 +10,6 @@ export * from "./claim/delete-claims"
|
||||
export * from "./complete-orders"
|
||||
export * from "./create-line-items"
|
||||
export * from "./create-order-change"
|
||||
export * from "./create-order-change-actions"
|
||||
export * from "./create-orders"
|
||||
export * from "./decline-order-change"
|
||||
export * from "./delete-line-items"
|
||||
|
||||
@@ -13,13 +13,13 @@ import {
|
||||
transform,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import { createOrderChangeActionsStep } from "../../steps/create-order-change-actions"
|
||||
import { previewOrderChangeStep } from "../../steps/preview-order-change"
|
||||
import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { addOrderLineItemsWorkflow } from "../add-line-items"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
|
||||
/**
|
||||
* This step validates that a new item can be added to the claim.
|
||||
@@ -114,7 +114,9 @@ export const orderClaimAddNewItemWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
createOrderChangeActionsStep(orderChangeActionInput)
|
||||
createOrderChangeActionsWorkflow.runAsStep({
|
||||
input: orderChangeActionInput,
|
||||
})
|
||||
|
||||
return new WorkflowResponse(previewOrderChangeStep(orderClaim.order_id))
|
||||
}
|
||||
|
||||
@@ -13,12 +13,12 @@ import {
|
||||
transform,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import { createOrderChangeActionsStep } from "../../steps/create-order-change-actions"
|
||||
import { previewOrderChangeStep } from "../../steps/preview-order-change"
|
||||
import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
|
||||
/**
|
||||
* This step validates that claim items can be added to a claim.
|
||||
@@ -105,7 +105,9 @@ export const orderClaimItemWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
createOrderChangeActionsStep(orderChangeActionInput)
|
||||
createOrderChangeActionsWorkflow.runAsStep({
|
||||
input: orderChangeActionInput,
|
||||
})
|
||||
|
||||
return new WorkflowResponse(previewOrderChangeStep(orderClaim.order_id))
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ import {
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import { updateOrderClaimsStep } from "../../steps/claim/update-order-claims"
|
||||
import { createOrderChangeActionsStep } from "../../steps/create-order-change-actions"
|
||||
import { previewOrderChangeStep } from "../../steps/preview-order-change"
|
||||
import { createReturnsStep } from "../../steps/return/create-returns"
|
||||
import { updateOrderChangesStep } from "../../steps/update-order-changes"
|
||||
@@ -25,6 +24,7 @@ import {
|
||||
throwIfItemsDoesNotExistsInOrder,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
|
||||
/**
|
||||
* This step validates that items can be requested to return as part of a claim.
|
||||
@@ -181,7 +181,9 @@ export const orderClaimRequestItemReturnWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
createOrderChangeActionsStep(orderChangeActionInput)
|
||||
createOrderChangeActionsWorkflow.runAsStep({
|
||||
input: orderChangeActionInput,
|
||||
})
|
||||
|
||||
return new WorkflowResponse(previewOrderChangeStep(orderClaim.order_id))
|
||||
}
|
||||
|
||||
@@ -13,12 +13,12 @@ import {
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import { previewOrderChangeStep } from "../../steps"
|
||||
import { createOrderChangeActionsStep } from "../../steps/create-order-change-actions"
|
||||
import { createOrderShippingMethods } from "../../steps/create-order-shipping-methods"
|
||||
import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
|
||||
/**
|
||||
* This step confirms that a shipping method can be created for a claim.
|
||||
@@ -168,7 +168,9 @@ export const createClaimShippingMethodWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
createOrderChangeActionsStep([orderChangeActionInput])
|
||||
createOrderChangeActionsWorkflow.runAsStep({
|
||||
input: [orderChangeActionInput],
|
||||
})
|
||||
|
||||
return new WorkflowResponse(previewOrderChangeStep(order.id))
|
||||
}
|
||||
|
||||
@@ -2,12 +2,13 @@ import {
|
||||
CreateOrderChangeActionDTO,
|
||||
OrderChangeActionDTO,
|
||||
} from "@medusajs/types"
|
||||
import { ModuleRegistrationName } from "@medusajs/utils"
|
||||
import {
|
||||
WorkflowData,
|
||||
WorkflowResponse,
|
||||
createWorkflow,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { createOrderChangeActionsStep } from "../steps"
|
||||
import { createEntitiesStep } from "../../common/steps/create-entities"
|
||||
|
||||
export const createOrderChangeActionsWorkflowId = "create-order-change-actions"
|
||||
/**
|
||||
@@ -18,6 +19,13 @@ export const createOrderChangeActionsWorkflow = createWorkflow(
|
||||
(
|
||||
input: WorkflowData<CreateOrderChangeActionDTO[]>
|
||||
): WorkflowResponse<OrderChangeActionDTO[]> => {
|
||||
return new WorkflowResponse(createOrderChangeActionsStep(input))
|
||||
const orderChangeActions = createEntitiesStep({
|
||||
moduleRegistrationName: ModuleRegistrationName.ORDER,
|
||||
invokeMethod: "addOrderAction",
|
||||
compensateMethod: "deleteOrderChangeActions",
|
||||
data: input,
|
||||
})
|
||||
|
||||
return new WorkflowResponse(orderChangeActions)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -13,12 +13,12 @@ import {
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import { previewOrderChangeStep } from "../../steps"
|
||||
import { createOrderChangeActionsStep } from "../../steps/create-order-change-actions"
|
||||
import { createOrderShippingMethods } from "../../steps/create-order-shipping-methods"
|
||||
import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
|
||||
/**
|
||||
* This step validates that a shipping method can be created for an exchange.
|
||||
@@ -98,7 +98,11 @@ export const createExchangeShippingMethodWorkflow = createWorkflow(
|
||||
list: false,
|
||||
}).config({ name: "order-change-query" })
|
||||
|
||||
createExchangeShippingMethodValidationStep({ order, orderExchange, orderChange })
|
||||
createExchangeShippingMethodValidationStep({
|
||||
order,
|
||||
orderExchange,
|
||||
orderChange,
|
||||
})
|
||||
|
||||
const shippingMethodInput = transform(
|
||||
{
|
||||
@@ -168,7 +172,9 @@ export const createExchangeShippingMethodWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
createOrderChangeActionsStep([orderChangeActionInput])
|
||||
createOrderChangeActionsWorkflow.runAsStep({
|
||||
input: [orderChangeActionInput],
|
||||
})
|
||||
|
||||
return new WorkflowResponse(previewOrderChangeStep(order.id))
|
||||
}
|
||||
|
||||
@@ -13,13 +13,13 @@ import {
|
||||
transform,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import { createOrderChangeActionsStep } from "../../steps/create-order-change-actions"
|
||||
import { previewOrderChangeStep } from "../../steps/preview-order-change"
|
||||
import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { addOrderLineItemsWorkflow } from "../add-line-items"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
|
||||
/**
|
||||
* This step validates that new items can be added to an exchange.
|
||||
@@ -114,7 +114,9 @@ export const orderExchangeAddNewItemWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
createOrderChangeActionsStep(orderChangeActionInput)
|
||||
createOrderChangeActionsWorkflow.runAsStep({
|
||||
input: orderChangeActionInput,
|
||||
})
|
||||
|
||||
return new WorkflowResponse(previewOrderChangeStep(orderExchange.order_id))
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ import {
|
||||
when,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import { createOrderChangeActionsStep } from "../../steps/create-order-change-actions"
|
||||
import { updateOrderExchangesStep } from "../../steps/exchange/update-order-exchanges"
|
||||
import { previewOrderChangeStep } from "../../steps/preview-order-change"
|
||||
import { createReturnsStep } from "../../steps/return/create-returns"
|
||||
@@ -24,6 +23,7 @@ import {
|
||||
throwIfItemsDoesNotExistsInOrder,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
|
||||
/**
|
||||
* This step validates that items can be returned as part of an exchange.
|
||||
@@ -171,7 +171,9 @@ export const orderExchangeRequestItemReturnWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
createOrderChangeActionsStep(orderChangeActionInput)
|
||||
createOrderChangeActionsWorkflow.runAsStep({
|
||||
input: orderChangeActionInput,
|
||||
})
|
||||
|
||||
return new WorkflowResponse(previewOrderChangeStep(orderExchange.order_id))
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import {
|
||||
} from "@medusajs/types"
|
||||
import { ChangeActionType, OrderChangeStatus } from "@medusajs/utils"
|
||||
import {
|
||||
WorkflowData,
|
||||
WorkflowResponse,
|
||||
createStep,
|
||||
createWorkflow,
|
||||
@@ -14,12 +13,12 @@ import {
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import { previewOrderChangeStep } from "../../steps"
|
||||
import { createOrderChangeActionsStep } from "../../steps/create-order-change-actions"
|
||||
import { createOrderShippingMethods } from "../../steps/create-order-shipping-methods"
|
||||
import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
|
||||
/**
|
||||
* This step validates that a shipping method can be created for a return.
|
||||
@@ -100,7 +99,11 @@ export const createReturnShippingMethodWorkflow = createWorkflow(
|
||||
list: false,
|
||||
}).config({ name: "order-change-query" })
|
||||
|
||||
createReturnShippingMethodValidationStep({ order, orderReturn, orderChange })
|
||||
createReturnShippingMethodValidationStep({
|
||||
order,
|
||||
orderReturn,
|
||||
orderChange,
|
||||
})
|
||||
|
||||
const shippingMethodInput = transform(
|
||||
{
|
||||
@@ -172,7 +175,9 @@ export const createReturnShippingMethodWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
createOrderChangeActionsStep([orderChangeActionInput])
|
||||
createOrderChangeActionsWorkflow.runAsStep({
|
||||
input: [orderChangeActionInput],
|
||||
})
|
||||
|
||||
return new WorkflowResponse(previewOrderChangeStep(order.id))
|
||||
}
|
||||
|
||||
@@ -14,12 +14,12 @@ import {
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import { previewOrderChangeStep } from "../../steps"
|
||||
import { createOrderChangeActionsStep } from "../../steps/create-order-change-actions"
|
||||
import {
|
||||
throwIfIsCancelled,
|
||||
throwIfItemsDoesNotExistsInReturn,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
|
||||
/**
|
||||
* This step validates that a return request can have its items dismissed.
|
||||
@@ -85,7 +85,12 @@ export const dismissItemReturnRequestWorkflow = createWorkflow(
|
||||
list: false,
|
||||
}).config({ name: "order-change-query" })
|
||||
|
||||
dismissItemReturnRequestValidationStep({ order, items: input.items, orderReturn, orderChange })
|
||||
dismissItemReturnRequestValidationStep({
|
||||
order,
|
||||
items: input.items,
|
||||
orderReturn,
|
||||
orderChange,
|
||||
})
|
||||
|
||||
const orderChangeActionInput = transform(
|
||||
{ order, orderChange, orderReturn, items: input.items },
|
||||
@@ -107,7 +112,9 @@ export const dismissItemReturnRequestWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
createOrderChangeActionsStep(orderChangeActionInput)
|
||||
createOrderChangeActionsWorkflow.runAsStep({
|
||||
input: orderChangeActionInput,
|
||||
})
|
||||
|
||||
return new WorkflowResponse(previewOrderChangeStep(order.id))
|
||||
}
|
||||
|
||||
@@ -14,12 +14,12 @@ import {
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import { previewOrderChangeStep } from "../../steps"
|
||||
import { createOrderChangeActionsStep } from "../../steps/create-order-change-actions"
|
||||
import {
|
||||
throwIfIsCancelled,
|
||||
throwIfItemsDoesNotExistsInReturn,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
|
||||
/**
|
||||
* This step validates that a return's items can be marked as received.
|
||||
@@ -85,7 +85,12 @@ export const receiveItemReturnRequestWorkflow = createWorkflow(
|
||||
list: false,
|
||||
}).config({ name: "order-change-query" })
|
||||
|
||||
receiveItemReturnRequestValidationStep({ order, items: input.items, orderReturn, orderChange })
|
||||
receiveItemReturnRequestValidationStep({
|
||||
order,
|
||||
items: input.items,
|
||||
orderReturn,
|
||||
orderChange,
|
||||
})
|
||||
|
||||
const orderChangeActionInput = transform(
|
||||
{ order, orderChange, orderReturn, items: input.items },
|
||||
@@ -107,7 +112,9 @@ export const receiveItemReturnRequestWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
createOrderChangeActionsStep(orderChangeActionInput)
|
||||
createOrderChangeActionsWorkflow.runAsStep({
|
||||
input: orderChangeActionInput,
|
||||
})
|
||||
|
||||
return new WorkflowResponse(previewOrderChangeStep(order.id))
|
||||
}
|
||||
|
||||
@@ -14,13 +14,13 @@ import {
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import { previewOrderChangeStep } from "../../steps"
|
||||
import { createOrderChangeActionsStep } from "../../steps/create-order-change-actions"
|
||||
import {
|
||||
throwIfIsCancelled,
|
||||
throwIfItemsDoesNotExistsInOrder,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { validateReturnReasons } from "../../utils/validate-return-reason"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
|
||||
/**
|
||||
* This step validates that itens can be added to a return.
|
||||
@@ -91,7 +91,12 @@ export const requestItemReturnWorkflow = createWorkflow(
|
||||
list: false,
|
||||
}).config({ name: "order-change-query" })
|
||||
|
||||
requestItemReturnValidationStep({ order, items: input.items, orderReturn, orderChange })
|
||||
requestItemReturnValidationStep({
|
||||
order,
|
||||
items: input.items,
|
||||
orderReturn,
|
||||
orderChange,
|
||||
})
|
||||
|
||||
const orderChangeActionInput = transform(
|
||||
{ order, orderChange, orderReturn, items: input.items },
|
||||
@@ -115,7 +120,9 @@ export const requestItemReturnWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
createOrderChangeActionsStep(orderChangeActionInput)
|
||||
createOrderChangeActionsWorkflow.runAsStep({
|
||||
input: orderChangeActionInput,
|
||||
})
|
||||
|
||||
return new WorkflowResponse(previewOrderChangeStep(order.id))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user