Feat(medusa, core-flows, types): add reservation endpoints (#7018)
* add reservation endpoints * add changeset
This commit is contained in:
@@ -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)
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user