Feat(core-flows, medusa): delete inventory item (#6708)

* initial get-inventory-item

* add exception throw test

* remove console log

* add changeset

* remove inventory item

* add changeset

* fix pr feedback

* use links

* use modules instead of property names
This commit is contained in:
Philip Korsholm
2024-03-19 10:40:18 +01:00
committed by GitHub
parent c20eb15cd9
commit 62d5803b20
9 changed files with 270 additions and 127 deletions

View File

@@ -0,0 +1,59 @@
import {
ContainerRegistrationKeys,
remoteQueryObjectFromString,
} from "@medusajs/utils"
import { ModuleRegistrationName, Modules } from "@medusajs/modules-sdk"
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
import { ILinkModule } from "@medusajs/types"
export const deatachInventoryItemStepId = "deattach-inventory-items-step"
export const deatachInventoryItemStep = createStep(
deatachInventoryItemStepId,
async (ids: string[], { container }) => {
const remoteLink = container.resolve(ContainerRegistrationKeys.REMOTE_LINK)
const linkModule: ILinkModule = remoteLink.getLinkModule(
Modules.PRODUCT,
"variant_id",
Modules.INVENTORY,
"inventory_item_id"
)
const links = (await linkModule.list(
{ inventory_item_id: ids },
{ select: ["variant_id", "inventory_item_id"] }
)) as { inventory_item_id: string; variant_id: string }[]
await remoteLink.dismiss(
links.map(({ inventory_item_id, variant_id }) => ({
[Modules.PRODUCT]: {
variant_id,
},
[Modules.INVENTORY]: {
inventory_item_id,
},
}))
)
return new StepResponse(void 0, links)
},
async (input, { container }) => {
if (!input?.length) {
return
}
const remoteLink = container.resolve(ContainerRegistrationKeys.REMOTE_LINK)
const linkDefinitions = input.map(({ inventory_item_id, variant_id }) => ({
[Modules.PRODUCT]: {
variant_id,
},
[Modules.INVENTORY]: {
inventory_item_id,
},
}))
const links = await remoteLink.create(linkDefinitions)
}
)

View File

@@ -0,0 +1,24 @@
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
export const deleteInventoryItemStepId = "delete-inventory-item-step"
export const deleteInventoryItemStep = createStep(
deleteInventoryItemStepId,
async (ids: string[], { container }) => {
const inventoryService = container.resolve(ModuleRegistrationName.INVENTORY)
await inventoryService.softDelete(ids)
return new StepResponse(void 0, ids)
},
async (prevInventoryItemIds, { container }) => {
if (!prevInventoryItemIds?.length) {
return
}
const inventoryService = container.resolve(ModuleRegistrationName.INVENTORY)
await inventoryService.restore(prevInventoryItemIds)
}
)

View File

@@ -1,3 +1,5 @@
export * from "./delete-inventory-items"
export * from "./deatach-inventory-items"
export * from "./attach-inventory-items"
export * from "./create-inventory-items"
export * from "./validate-singular-inventory-items-for-tags"

View File

@@ -0,0 +1,13 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import { deatachInventoryItemStep, deleteInventoryItemStep } from "../steps"
export const deleteInventoryItemWorkflowId = "delete-inventory-item-workflow"
export const deleteInventoryItemWorkflow = createWorkflow(
deleteInventoryItemWorkflowId,
(input: WorkflowData<string[]>): WorkflowData<string[]> => {
deleteInventoryItemStep(input)
deatachInventoryItemStep(input)
return input
}
)

View File

@@ -1,3 +1,4 @@
export * from "./delete-inventory-items"
export * from "./create-inventory-items"
export * from "./create-inventory-levels"
export * from "./delete-inventory-levels"