feat(medusa, core-flows, fulfillment): calculate SO price endpoint (#10532)
**What** - endpoint + flow for fetching calculated price for a shipping option --- CLOSES CMRC-777
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
import { HttpTypes } from "@medusajs/framework/types"
|
||||
import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http"
|
||||
import { calculateShippingOptionsPricesWorkflow } from "@medusajs/core-flows"
|
||||
import { ContainerRegistrationKeys } from "@medusajs/framework/utils"
|
||||
|
||||
export const POST = async (
|
||||
req: MedusaRequest<HttpTypes.StoreCalculateShippingOptionPrice>,
|
||||
res: MedusaResponse<HttpTypes.StoreShippingOptionResponse>
|
||||
) => {
|
||||
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
const { result } = await calculateShippingOptionsPricesWorkflow(
|
||||
req.scope
|
||||
).run({
|
||||
input: {
|
||||
shipping_options: [{ id: req.params.id, data: req.validatedBody.data }],
|
||||
cart_id: req.validatedBody.cart_id,
|
||||
},
|
||||
})
|
||||
|
||||
const { data } = await query.graph({
|
||||
entity: "shipping_option",
|
||||
fields: req.remoteQueryConfig.fields,
|
||||
filters: { id: req.params.id },
|
||||
})
|
||||
|
||||
const shippingOption = data[0]
|
||||
const priceData = result[0]
|
||||
|
||||
res.status(200).json({ shipping_option: { ...shippingOption, ...priceData } })
|
||||
}
|
||||
@@ -1,7 +1,15 @@
|
||||
import { MiddlewareRoute } from "@medusajs/framework/http"
|
||||
import {
|
||||
MiddlewareRoute,
|
||||
validateAndTransformBody,
|
||||
} from "@medusajs/framework/http"
|
||||
import { validateAndTransformQuery } from "@medusajs/framework"
|
||||
import { listTransformQueryConfig } from "./query-config"
|
||||
import { StoreGetShippingOptions } from "./validators"
|
||||
import {
|
||||
StoreCalculateShippingOptionPrice,
|
||||
StoreGetShippingOptions,
|
||||
StoreGetShippingOptionsParams,
|
||||
} from "./validators"
|
||||
import * as QueryConfig from "./query-config"
|
||||
|
||||
export const storeShippingOptionRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
{
|
||||
@@ -14,4 +22,15 @@ export const storeShippingOptionRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
method: ["POST"],
|
||||
matcher: "/store/shipping-options/:id/calculate",
|
||||
middlewares: [
|
||||
validateAndTransformQuery(
|
||||
StoreGetShippingOptionsParams,
|
||||
QueryConfig.retrieveTransformQueryConfig
|
||||
),
|
||||
validateAndTransformBody(StoreCalculateShippingOptionPrice),
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
@@ -12,3 +12,8 @@ export const listTransformQueryConfig = {
|
||||
defaultLimit: 20,
|
||||
isList: true,
|
||||
}
|
||||
|
||||
export const retrieveTransformQueryConfig = {
|
||||
defaults: defaultStoreShippingOptionsFields,
|
||||
isList: false,
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { z } from "zod"
|
||||
import { applyAndAndOrOperators } from "../../utils/common-validators"
|
||||
import { createFindParams } from "../../utils/validators"
|
||||
import { createFindParams, createSelectParams } from "../../utils/validators"
|
||||
|
||||
export const StoreGetShippingOptionsParams = createSelectParams()
|
||||
|
||||
export const StoreGetShippingOptionsFields = z
|
||||
.object({
|
||||
@@ -18,3 +20,11 @@ export const StoreGetShippingOptions = createFindParams({
|
||||
})
|
||||
.merge(StoreGetShippingOptionsFields)
|
||||
.merge(applyAndAndOrOperators(StoreGetShippingOptionsFields))
|
||||
|
||||
export type StoreCalculateShippingOptionPriceType = z.infer<
|
||||
typeof StoreCalculateShippingOptionPrice
|
||||
>
|
||||
export const StoreCalculateShippingOptionPrice = z.object({
|
||||
cart_id: z.string(),
|
||||
data: z.record(z.string(), z.unknown()),
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user