feat(*): shipping options update API (#6987)

**What**
- Update the `updateShippingOptions` module service API to follow the newest convention
- Add upsert support for shipping options
- update shipping options workflow
- update shipping options api end point and validation
- update shipping options all integration tests

FIXES CORE-1926
This commit is contained in:
Adrien de Peretti authored and GitHub committed 2024-04-07 16:28:59 +00:00
1 parent f65fbff535
commit f132929c7e
20 files changed
+916 -74

No files matched your search

@@ -0,0 +1,44 @@
import {
ContainerRegistrationKeys,
remoteQueryObjectFromString,
} from "@medusajs/utils"
import { AdminShippingOptionRetrieveResponse } from "@medusajs/types"
import { AdminUpdateShippingOptionType } from "../validators"
import { updateShippingOptionsWorkflow } from "@medusajs/core-flows"
import {
AuthenticatedMedusaRequest,
MedusaResponse,
} from "../../../../types/routing"
export const POST = async (
req: AuthenticatedMedusaRequest<AdminUpdateShippingOptionType>,
res: MedusaResponse<AdminShippingOptionRetrieveResponse>
) => {
const shippingOptionPayload = req.validatedBody
const workflow = updateShippingOptionsWorkflow(req.scope)
const { result, errors } = await workflow.run({
input: [shippingOptionPayload],
throwOnError: false,
})
if (Array.isArray(errors) && errors[0]) {
throw errors[0].error
}
const shippingOptionId = result[0].id
const query = remoteQueryObjectFromString({
entryPoint: "shipping_options",
variables: {
id: shippingOptionId,
},
fields: req.remoteQueryConfig.fields,
})
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
const [shippingOption] = await remoteQuery(query)
res.status(200).json({ shipping_option: shippingOption })
}
@@ -5,6 +5,7 @@ import {
AdminGetShippingOptionParams,
AdminShippingOptionRulesBatchAdd,
AdminShippingOptionRulesBatchRemove,
AdminUpdateShippingOption,
} from "./validators"
import { retrieveTransformQueryConfig } from "./query-config"
import { validateAndTransformBody } from "../../utils/validate-body"
@@ -28,6 +29,18 @@ export const adminShippingOptionRoutesMiddlewares: MiddlewareRoute[] = [
],
},
{
method: ["POST"],
matcher: "/admin/shipping-options/:id",
middlewares: [
validateAndTransformQuery(
AdminGetShippingOptionParams,
retrieveTransformQueryConfig
),
validateAndTransformBody(AdminUpdateShippingOption),
],
},
{
method: ["POST"],
matcher: "/admin/shipping-options/:id/rules/batch/add",
@@ -43,7 +43,7 @@ export type AdminShippingOptionRulesBatchRemoveType = z.infer<
* SHIPPING OPTIONS
*/
export const AdminCreateShippingOptionType = z
export const AdminCreateShippingOptionTypeObject = z
.object({
label: z.string(),
description: z.string(),
@@ -74,7 +74,7 @@ export const AdminCreateShippingOption = z
data: z.record(z.unknown()).optional(),
price_type: z.nativeEnum(ShippingOptionPriceTypeEnum),
provider_id: z.string(),
type: AdminCreateShippingOptionType,
type: AdminCreateShippingOptionTypeObject,
prices: AdminCreateShippingOptionPriceWithCurrency.or(
AdminCreateShippingOptionPriceWithRegion
).array(),
@@ -85,3 +85,18 @@ export const AdminCreateShippingOption = z
export type AdminCreateShippingOptionType = z.infer<
typeof AdminCreateShippingOption
>
export const AdminUpdateShippingOption = z
.object({
id: z.string(),
name: z.string().optional(),
data: z.record(z.unknown()).optional(),
price_type: z.nativeEnum(ShippingOptionPriceTypeEnum).optional(),
provider_id: z.string().optional(),
type: AdminCreateShippingOptionTypeObject.optional(),
})
.strict()
export type AdminUpdateShippingOptionType = z.infer<
typeof AdminUpdateShippingOption
>