feat(cart): POST /store/carts/:id (#6274)

Depends on:
- #6262 
- #6273
This commit is contained in:
Oli Juhl
2024-02-14 16:03:02 +01:00
committed by GitHub
parent 6500f18b9b
commit 1ed5f918c3
17 changed files with 378 additions and 49 deletions

View File

@@ -1,2 +1,3 @@
export * from "./create-carts";
export * from "./create-carts"
export * from "./update-carts"

View File

@@ -0,0 +1,61 @@
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
import {
CartDTO,
FilterableCartProps,
ICartModuleService,
UpdateCartDataDTO,
} from "@medusajs/types"
import { getSelectsAndRelationsFromObjectArray } from "@medusajs/utils"
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
type UpdateCartsStepInput = {
selector: FilterableCartProps
update: UpdateCartDataDTO
}
export const updateCartsStepId = "update-carts"
export const updateCartsStep = createStep(
updateCartsStepId,
async (data: UpdateCartsStepInput, { container }) => {
const service = container.resolve<ICartModuleService>(
ModuleRegistrationName.CART
)
const { selects, relations } = getSelectsAndRelationsFromObjectArray([
data.update,
])
const prevCarts = await service.list(data.selector, {
select: selects,
relations,
})
const updatedCarts = await service.update(
data.selector as Partial<CartDTO>,
data.update
)
return new StepResponse(updatedCarts, prevCarts)
},
async (previousCarts, { container }) => {
if (!previousCarts?.length) {
return
}
const service = container.resolve<ICartModuleService>(
ModuleRegistrationName.CART
)
const toRestore = previousCarts.map((c) => ({
id: c.id,
region_id: c.region_id,
customer_id: c.customer_id,
sales_channel_id: c.sales_channel_id,
email: c.email,
currency_code: c.currency_code,
metadata: c.metadata,
}))
await service.update(toRestore)
}
)

View File

@@ -1,2 +1,3 @@
export * from "./create-carts";
export * from "./create-carts"
export * from "./update-carts"

View File

@@ -0,0 +1,20 @@
import {
CartDTO,
FilterableCartProps,
UpdateCartDataDTO,
} from "@medusajs/types"
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import { updateCartsStep } from "../steps/update-carts"
type WorkflowInput = {
selector: FilterableCartProps
update: UpdateCartDataDTO
}
export const updateCartsWorkflowId = "update-carts"
export const updateCartsWorkflow = createWorkflow(
updateCartsWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<CartDTO[]> => {
return updateCartsStep(input)
}
)