feat(core-flows,medusa,types): cancel fulfillments API (#7095)
what: - adds POST cancel fulfillments endpoint RESOLVES CORE-1972
This commit is contained in:
1 parent
ccb50bb3da
commit
62b9dcc6c1
13 files changed
+202
-9
No files matched your search
@@ -0,0 +1,30 @@
|
||||
import { cancelFulfillmentWorkflow } from "@medusajs/core-flows"
|
||||
import {
|
||||
AuthenticatedMedusaRequest,
|
||||
MedusaResponse,
|
||||
} from "../../../../../types/routing"
|
||||
import { refetchFulfillment } from "../../helpers"
|
||||
import { AdminCancelFulfillmentType } from "../../validators"
|
||||
|
||||
export const POST = async (
|
||||
req: AuthenticatedMedusaRequest<AdminCancelFulfillmentType>,
|
||||
res: MedusaResponse
|
||||
) => {
|
||||
const { id } = req.params
|
||||
const { errors } = await cancelFulfillmentWorkflow(req.scope).run({
|
||||
input: { id },
|
||||
throwOnError: false,
|
||||
})
|
||||
|
||||
if (Array.isArray(errors) && errors[0]) {
|
||||
throw errors[0].error
|
||||
}
|
||||
|
||||
const fulfillment = await refetchFulfillment(
|
||||
id,
|
||||
req.scope,
|
||||
req.remoteQueryConfig.fields
|
||||
)
|
||||
|
||||
res.status(200).json({ fulfillment })
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
import { MedusaContainer } from "@medusajs/types"
|
||||
import {
|
||||
ContainerRegistrationKeys,
|
||||
remoteQueryObjectFromString,
|
||||
} from "@medusajs/utils"
|
||||
|
||||
export const refetchFulfillment = async (
|
||||
fulfillmentId: string,
|
||||
scope: MedusaContainer,
|
||||
fields: string[]
|
||||
) => {
|
||||
const remoteQuery = scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
|
||||
const queryObject = remoteQueryObjectFromString({
|
||||
entryPoint: "fulfillments",
|
||||
variables: {
|
||||
filters: { id: fulfillmentId },
|
||||
},
|
||||
fields: fields,
|
||||
})
|
||||
|
||||
const [fulfillment] = await remoteQuery(queryObject)
|
||||
|
||||
return fulfillment
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
import { MiddlewareRoute } from "../../../types/middlewares"
|
||||
import { authenticate } from "../../../utils/authenticate-middleware"
|
||||
import { validateAndTransformBody } from "../../utils/validate-body"
|
||||
import { validateAndTransformQuery } from "../../utils/validate-query"
|
||||
import * as QueryConfig from "./query-config"
|
||||
import { AdminCancelFulfillment, AdminFulfillmentParams } from "./validators"
|
||||
|
||||
export const adminFulfillmentsRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
{
|
||||
method: "ALL",
|
||||
matcher: "/admin/fulfillments*",
|
||||
middlewares: [authenticate("admin", ["session", "bearer", "api-key"])],
|
||||
},
|
||||
{
|
||||
method: ["POST"],
|
||||
matcher: "/admin/fulfillments/:id/cancel",
|
||||
middlewares: [
|
||||
validateAndTransformBody(AdminCancelFulfillment),
|
||||
validateAndTransformQuery(
|
||||
AdminFulfillmentParams,
|
||||
QueryConfig.retrieveTransformQueryConfig
|
||||
),
|
||||
],
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,24 @@
|
||||
export const defaultAdminFulfillmentsFields = [
|
||||
"id",
|
||||
"location_id",
|
||||
"packed_at",
|
||||
"shipped_at",
|
||||
"delivered_at",
|
||||
"canceled_at",
|
||||
"data",
|
||||
"provider_id",
|
||||
"shipping_option_id",
|
||||
"metadata",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
]
|
||||
|
||||
export const retrieveTransformQueryConfig = {
|
||||
defaults: defaultAdminFulfillmentsFields,
|
||||
isList: false,
|
||||
}
|
||||
|
||||
export const listTransformQueryConfig = {
|
||||
...retrieveTransformQueryConfig,
|
||||
isList: true,
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import { z } from "zod"
|
||||
import { createSelectParams } from "../../utils/validators"
|
||||
|
||||
export const AdminFulfillmentParams = createSelectParams()
|
||||
|
||||
export const AdminCancelFulfillment = z.object({})
|
||||
export type AdminCancelFulfillmentType = z.infer<typeof AdminCancelFulfillment>
|
||||
@@ -7,14 +7,15 @@ import { adminCustomerGroupRoutesMiddlewares } from "./admin/customer-groups/mid
|
||||
import { adminCustomerRoutesMiddlewares } from "./admin/customers/middlewares"
|
||||
import { adminDraftOrderRoutesMiddlewares } from "./admin/draft-orders/middlewares"
|
||||
import { adminFulfillmentSetsRoutesMiddlewares } from "./admin/fulfillment-sets/middlewares"
|
||||
import { adminFulfillmentsRoutesMiddlewares } from "./admin/fulfillments/middlewares"
|
||||
import { adminInventoryRoutesMiddlewares } from "./admin/inventory-items/middlewares"
|
||||
import { adminInviteRoutesMiddlewares } from "./admin/invites/middlewares"
|
||||
import { adminPaymentRoutesMiddlewares } from "./admin/payments/middlewares"
|
||||
import { adminPriceListsRoutesMiddlewares } from "./admin/price-lists/middlewares"
|
||||
import { adminPricingRoutesMiddlewares } from "./admin/pricing/middlewares"
|
||||
import { adminProductCategoryRoutesMiddlewares } from "./admin/product-categories/middlewares"
|
||||
import { adminProductRoutesMiddlewares } from "./admin/products/middlewares"
|
||||
import { adminProductTypeRoutesMiddlewares } from "./admin/product-types/middlewares"
|
||||
import { adminProductRoutesMiddlewares } from "./admin/products/middlewares"
|
||||
import { adminPromotionRoutesMiddlewares } from "./admin/promotions/middlewares"
|
||||
import { adminRegionRoutesMiddlewares } from "./admin/regions/middlewares"
|
||||
import { adminReservationRoutesMiddlewares } from "./admin/reservations/middlewares"
|
||||
@@ -74,5 +75,6 @@ export const config: MiddlewaresConfig = {
|
||||
...adminProductCategoryRoutesMiddlewares,
|
||||
...adminReservationRoutesMiddlewares,
|
||||
...adminShippingProfilesMiddlewares,
|
||||
...adminFulfillmentsRoutesMiddlewares,
|
||||
],
|
||||
}
|
||||
Reference in new issue
Block a user