Feat(medusa, core-flows, types): add reservation endpoints (#7018)

* add reservation endpoints

* add changeset
This commit is contained in:
Philip Korsholm
2024-04-09 18:40:00 +02:00
committed by GitHub
parent 78f603e4f1
commit f175cac4af
24 changed files with 1204 additions and 1 deletions
+1
View File
@@ -16,6 +16,7 @@ export * from "./price-list"
export * from "./pricing"
export * from "./product"
export * from "./promotion"
export * from "./reservation"
export * from "./region"
export * from "./sales-channel"
export * from "./shipping-options"
@@ -0,0 +1,2 @@
export * from "./steps"
export * from "./workflows"
@@ -0,0 +1,32 @@
import { IInventoryServiceNext, InventoryNext } from "@medusajs/types"
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
export const createReservationsStepId = "create-reservations-step"
export const createReservationsStep = createStep(
createReservationsStepId,
async (data: InventoryNext.CreateReservationItemInput[], { container }) => {
const service = container.resolve<IInventoryServiceNext>(
ModuleRegistrationName.INVENTORY
)
const created = await service.createReservationItems(data)
return new StepResponse(
created,
created.map((reservation) => reservation.id)
)
},
async (createdIds, { container }) => {
if (!createdIds?.length) {
return
}
const service = container.resolve<IInventoryServiceNext>(
ModuleRegistrationName.INVENTORY
)
await service.deleteReservationItems(createdIds)
}
)
@@ -0,0 +1,29 @@
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
import { IInventoryServiceNext } from "@medusajs/types"
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
export const deleteReservationsStepId = "delete-reservations"
export const deleteReservationsStep = createStep(
deleteReservationsStepId,
async (ids: string[], { container }) => {
const service = container.resolve<IInventoryServiceNext>(
ModuleRegistrationName.INVENTORY
)
await service.softDeleteReservationItems(ids)
return new StepResponse(void 0, ids)
},
async (prevIds, { container }) => {
if (!prevIds?.length) {
return
}
const service = container.resolve<IInventoryServiceNext>(
ModuleRegistrationName.INVENTORY
)
await service.restoreReservationItems(prevIds)
}
)
@@ -0,0 +1,3 @@
export * from "./create-reservations"
export * from "./delete-reservations"
export * from "./update-reservations"
@@ -0,0 +1,54 @@
import {
IInventoryServiceNext,
InventoryNext,
UpdateRuleTypeDTO,
} from "@medusajs/types"
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
import {
convertItemResponseToUpdateRequest,
getSelectsAndRelationsFromObjectArray,
} from "@medusajs/utils"
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
export const updateReservationsStepId = "update-reservations-step"
export const updateReservationsStep = createStep(
updateReservationsStepId,
async (data: InventoryNext.UpdateReservationItemInput[], { container }) => {
const inventoryModuleService = container.resolve<IInventoryServiceNext>(
ModuleRegistrationName.INVENTORY
)
const { selects, relations } = getSelectsAndRelationsFromObjectArray(data)
const dataBeforeUpdate = await inventoryModuleService.listReservationItems(
{ id: data.map((d) => d.id) },
{ relations, select: selects }
)
const updatedReservations =
await inventoryModuleService.updateReservationItems(data)
return new StepResponse(updatedReservations, {
dataBeforeUpdate,
selects,
relations,
})
},
async (revertInput, { container }) => {
if (!revertInput) {
return
}
const { dataBeforeUpdate = [], selects, relations } = revertInput
const inventoryModuleService = container.resolve<IInventoryServiceNext>(
ModuleRegistrationName.INVENTORY
)
await inventoryModuleService.updateReservationItems(
dataBeforeUpdate.map((data) =>
convertItemResponseToUpdateRequest(data, selects, relations)
)
)
}
)
@@ -0,0 +1,14 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import { WorkflowTypes } from "@medusajs/types"
import { createReservationsStep } from "../steps"
export const createReservationsWorkflowId = "create-reservations-workflow"
export const createReservationsWorkflow = createWorkflow(
createReservationsWorkflowId,
(
input: WorkflowData<WorkflowTypes.ReservationWorkflow.CreateReservationsWorkflowInput>
): WorkflowData<WorkflowTypes.ReservationWorkflow.CreateReservationsWorkflowOutput> => {
return createReservationsStep(input.reservations)
}
)
@@ -0,0 +1,13 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import { deleteReservationsStep } from "../steps"
type WorkflowInput = { ids: string[] }
export const deleteReservationsWorkflowId = "delete-reservations"
export const deleteReservationsWorkflow = createWorkflow(
deleteReservationsWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => {
return deleteReservationsStep(input.ids)
}
)
@@ -0,0 +1,3 @@
export * from "./create-reservations"
export * from "./delete-reservations"
export * from "./update-reservations"
@@ -0,0 +1,14 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import { WorkflowTypes } from "@medusajs/types"
import { updateReservationsStep } from "../steps"
export const updateReservationsWorkflowId = "update-reservations-workflow"
export const updateReservationsWorkflow = createWorkflow(
updateReservationsWorkflowId,
(
input: WorkflowData<WorkflowTypes.ReservationWorkflow.UpdateReservationsWorkflowInput>
): WorkflowData<WorkflowTypes.ReservationWorkflow.UpdateReservationsWorkflowOutput> => {
return updateReservationsStep(input.updates)
}
)