feat: Cart SalesChannel link + clean-up (#6418)

This commit is contained in:
Oli Juhl
2024-02-16 20:48:56 +01:00
committed by GitHub
parent 1df14de183
commit 1ba35b02dd
29 changed files with 276 additions and 919 deletions

View File

@@ -1,238 +0,0 @@
import {
TransactionStepsDefinition,
WorkflowManager,
} from "@medusajs/orchestration"
import { CartWorkflow } from "@medusajs/types"
import { Workflows } from "../../definitions"
import {
AddressHandlers,
CartHandlers,
CommonHandlers,
CustomerHandlers,
RegionHandlers,
SalesChannelHandlers,
} from "../../handlers"
import { exportWorkflow, pipe } from "@medusajs/workflows-sdk"
enum CreateCartActions {
setContext = "setContext",
attachLineItems = "attachLineItems",
attachToSalesChannel = "attachToSalesChannel",
findRegion = "findRegion",
findSalesChannel = "findSalesChannel",
createCart = "createCart",
findOrCreateAddresses = "findOrCreateAddresses",
findOrCreateCustomer = "findOrCreateCustomer",
removeCart = "removeCart",
removeAddresses = "removeAddresses",
}
const workflowAlias = "cart"
const getWorkflowInput = (alias = workflowAlias) => ({
inputAlias: workflowAlias,
invoke: {
from: workflowAlias,
alias,
},
})
const workflowSteps: TransactionStepsDefinition = {
next: [
{
action: CreateCartActions.findOrCreateCustomer,
noCompensation: true,
},
{
action: CreateCartActions.findSalesChannel,
noCompensation: true,
},
{
action: CreateCartActions.setContext,
noCompensation: true,
},
{
action: CreateCartActions.findRegion,
noCompensation: true,
next: {
action: CreateCartActions.findOrCreateAddresses,
noCompensation: true,
next: {
action: CreateCartActions.createCart,
next: [
{
action: CreateCartActions.attachLineItems,
noCompensation: true,
},
{ action: CreateCartActions.attachToSalesChannel },
],
},
},
},
],
}
const handlers = new Map([
[
CreateCartActions.findOrCreateCustomer,
{
invoke: pipe(
getWorkflowInput(
CustomerHandlers.findOrCreateCustomer.aliases.Customer
),
CustomerHandlers.findOrCreateCustomer
),
},
],
[
CreateCartActions.findSalesChannel,
{
invoke: pipe(
getWorkflowInput(
SalesChannelHandlers.findSalesChannel.aliases.SalesChannel
),
SalesChannelHandlers.findSalesChannel
),
},
],
[
CreateCartActions.setContext,
{
invoke: pipe(
getWorkflowInput(CommonHandlers.setContext.aliases.Context),
CommonHandlers.setContext
),
},
],
[
CreateCartActions.findRegion,
{
invoke: pipe(
getWorkflowInput(RegionHandlers.findRegion.aliases.Region),
RegionHandlers.findRegion
),
},
],
[
CreateCartActions.findOrCreateAddresses,
{
invoke: pipe(
{
invoke: [
getWorkflowInput(
AddressHandlers.findOrCreateAddresses.aliases.Addresses
).invoke,
{
from: CreateCartActions.findRegion,
alias: AddressHandlers.findOrCreateAddresses.aliases.Region,
},
],
},
AddressHandlers.findOrCreateAddresses
),
},
],
[
CreateCartActions.createCart,
{
invoke: pipe(
{
invoke: [
{
from: CreateCartActions.findSalesChannel,
alias: CartHandlers.createCart.aliases.SalesChannel,
},
{
from: CreateCartActions.findRegion,
alias: CartHandlers.createCart.aliases.Region,
},
{
from: CreateCartActions.setContext,
alias: CartHandlers.createCart.aliases.Context,
},
{
from: CreateCartActions.findOrCreateCustomer,
alias: CartHandlers.createCart.aliases.Customer,
},
{
from: CreateCartActions.findOrCreateAddresses,
alias: CartHandlers.createCart.aliases.Addresses,
},
],
},
CartHandlers.createCart
),
compensate: pipe(
{
invoke: [
{
from: CreateCartActions.createCart,
alias: CartHandlers.removeCart.aliases.Cart,
},
],
},
CartHandlers.removeCart
),
},
],
[
CreateCartActions.attachLineItems,
{
invoke: pipe(
{
invoke: [
getWorkflowInput(
CartHandlers.attachLineItemsToCart.aliases.LineItems
).invoke,
{
from: CreateCartActions.createCart,
alias: CartHandlers.attachLineItemsToCart.aliases.Cart,
},
],
},
CartHandlers.attachLineItemsToCart
),
},
],
[
CreateCartActions.attachToSalesChannel,
{
invoke: pipe(
{
invoke: [
{
from: CreateCartActions.createCart,
alias: CartHandlers.attachCartToSalesChannel.aliases.Cart,
},
{
from: CreateCartActions.findSalesChannel,
alias: CartHandlers.attachCartToSalesChannel.aliases.SalesChannel,
},
],
},
CartHandlers.attachCartToSalesChannel
),
compensate: pipe(
{
invoke: [
{
from: CreateCartActions.findSalesChannel,
alias:
CartHandlers.detachCartFromSalesChannel.aliases.SalesChannel,
},
],
},
CartHandlers.detachCartFromSalesChannel
),
},
],
])
WorkflowManager.register(Workflows.CreateCart, workflowSteps, handlers)
type CreateCartWorkflowOutput = Record<any, any>
export const createCart = exportWorkflow<
CartWorkflow.CreateCartWorkflowInputDTO,
CreateCartWorkflowOutput
>(Workflows.CreateCart, CreateCartActions.createCart)

View File

@@ -1,4 +1,3 @@
export * from "./create-cart"
export * from "./steps"
export * from "./workflows"

View File

@@ -6,12 +6,12 @@ import {
} from "@medusajs/workflows-sdk"
import { createCartsStep, findOneOrAnyRegionStep } from "../steps"
type WorkflowInput = CreateCartWorkflowInputDTO
export const createCartWorkflowId = "create-cart"
export const createCartWorkflow = createWorkflow(
createCartWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<CartDTO[]> => {
(
input: WorkflowData<CreateCartWorkflowInputDTO>
): WorkflowData<CartDTO[]> => {
const region = findOneOrAnyRegionStep({
regionId: input.region_id,
})