chore(types, api): support shipping option type api endpoints (#13191)
* chore(types, api): support shipping option type api endpoints * core flows * api * typos * compiler errors * integration tests * remove metadata * changeset * modify test * upsert * change remote query * minor to patch * description optional * description optional * woops my bad * my bad again --------- Co-authored-by: william bouchard <williambouchard@williams-MacBook-Pro.local>
This commit is contained in:
1 parent
aa27240b7f
commit
34c3c14e0a
29 files changed
+1240
-105
No files matched your search
@@ -0,0 +1,79 @@
|
||||
import {
|
||||
deleteShippingOptionTypesWorkflow,
|
||||
updateShippingOptionTypesWorkflow,
|
||||
} from "@medusajs/core-flows"
|
||||
import {
|
||||
AuthenticatedMedusaRequest,
|
||||
MedusaResponse,
|
||||
} from "@medusajs/framework/http"
|
||||
|
||||
import { refetchShippingOptionType } from "../helpers"
|
||||
import {
|
||||
AdminGetShippingOptionTypeParamsType,
|
||||
AdminUpdateShippingOptionTypeType,
|
||||
} from "../validators"
|
||||
import { HttpTypes } from "@medusajs/framework/types"
|
||||
import { MedusaError } from "@medusajs/framework/utils"
|
||||
|
||||
export const GET = async (
|
||||
req: AuthenticatedMedusaRequest<AdminGetShippingOptionTypeParamsType>,
|
||||
res: MedusaResponse<HttpTypes.AdminShippingOptionTypeResponse>
|
||||
) => {
|
||||
const shippingOptionType = await refetchShippingOptionType(
|
||||
req.params.id,
|
||||
req.scope,
|
||||
req.queryConfig.fields
|
||||
)
|
||||
|
||||
res.status(200).json({ shipping_option_type: shippingOptionType })
|
||||
}
|
||||
|
||||
export const POST = async (
|
||||
req: AuthenticatedMedusaRequest<AdminUpdateShippingOptionTypeType>,
|
||||
res: MedusaResponse<HttpTypes.AdminShippingOptionTypeResponse>
|
||||
) => {
|
||||
const existingShippingOptionType = await refetchShippingOptionType(
|
||||
req.params.id,
|
||||
req.scope,
|
||||
["id"]
|
||||
)
|
||||
|
||||
if (!existingShippingOptionType) {
|
||||
throw new MedusaError(
|
||||
MedusaError.Types.NOT_FOUND,
|
||||
`Shipping option type with id "${req.params.id}" not found`
|
||||
)
|
||||
}
|
||||
|
||||
const { result } = await updateShippingOptionTypesWorkflow(req.scope).run({
|
||||
input: {
|
||||
selector: { id: req.params.id },
|
||||
update: req.validatedBody,
|
||||
},
|
||||
})
|
||||
|
||||
const shippingOptionType = await refetchShippingOptionType(
|
||||
result[0].id,
|
||||
req.scope,
|
||||
req.queryConfig.fields
|
||||
)
|
||||
|
||||
res.status(200).json({ shipping_option_type: shippingOptionType })
|
||||
}
|
||||
|
||||
export const DELETE = async (
|
||||
req: AuthenticatedMedusaRequest,
|
||||
res: MedusaResponse<HttpTypes.AdminShippingOptionTypeDeleteResponse>
|
||||
) => {
|
||||
const id = req.params.id
|
||||
|
||||
await deleteShippingOptionTypesWorkflow(req.scope).run({
|
||||
input: { ids: [id] },
|
||||
})
|
||||
|
||||
res.status(200).json({
|
||||
id,
|
||||
object: "shipping_option_type",
|
||||
deleted: true,
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import { MedusaContainer } from "@medusajs/framework/types"
|
||||
import { ContainerRegistrationKeys } from "@medusajs/framework/utils"
|
||||
|
||||
export const refetchShippingOptionType = async (
|
||||
shippingOptionTypeId: string,
|
||||
scope: MedusaContainer,
|
||||
fields: string[]
|
||||
) => {
|
||||
const query = scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||
const { data: shippingOptionTypes } = await query.graph({
|
||||
entity: "shipping_option_type",
|
||||
fields: fields,
|
||||
filters: { id: shippingOptionTypeId },
|
||||
})
|
||||
return shippingOptionTypes[0]
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
import * as QueryConfig from "./query-config"
|
||||
import { MiddlewareRoute } from "@medusajs/framework/http"
|
||||
import {
|
||||
validateAndTransformBody,
|
||||
validateAndTransformQuery,
|
||||
} from "@medusajs/framework"
|
||||
import {
|
||||
AdminCreateShippingOptionType,
|
||||
AdminGetShippingOptionTypeParams,
|
||||
AdminGetShippingOptionTypesParams,
|
||||
AdminUpdateShippingOptionType,
|
||||
} from "./validators"
|
||||
|
||||
export const adminShippingOptionTypeRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
{
|
||||
method: ["GET"],
|
||||
matcher: "/admin/shipping-option-types",
|
||||
middlewares: [
|
||||
validateAndTransformQuery(
|
||||
AdminGetShippingOptionTypesParams,
|
||||
QueryConfig.listShippingOptionTypesTransformQueryConfig
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
method: ["GET"],
|
||||
matcher: "/admin/shipping-option-types/:id",
|
||||
middlewares: [
|
||||
validateAndTransformQuery(
|
||||
AdminGetShippingOptionTypeParams,
|
||||
QueryConfig.retrieveShippingOptionTypeTransformQueryConfig
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
method: ["POST"],
|
||||
matcher: "/admin/shipping-option-types",
|
||||
middlewares: [
|
||||
validateAndTransformBody(AdminCreateShippingOptionType),
|
||||
validateAndTransformQuery(
|
||||
AdminGetShippingOptionTypeParams,
|
||||
QueryConfig.retrieveShippingOptionTypeTransformQueryConfig
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
method: ["POST"],
|
||||
matcher: "/admin/shipping-option-types/:id",
|
||||
middlewares: [
|
||||
validateAndTransformBody(AdminUpdateShippingOptionType),
|
||||
validateAndTransformQuery(
|
||||
AdminGetShippingOptionTypeParams,
|
||||
QueryConfig.retrieveShippingOptionTypeTransformQueryConfig
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
method: ["DELETE"],
|
||||
matcher: "/admin/shipping-option-types/:id",
|
||||
middlewares: [],
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,19 @@
|
||||
export const defaultAdminShippingOptionTypeFields = [
|
||||
"id",
|
||||
"label",
|
||||
"code",
|
||||
"description",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
]
|
||||
|
||||
export const retrieveShippingOptionTypeTransformQueryConfig = {
|
||||
defaults: defaultAdminShippingOptionTypeFields,
|
||||
isList: false,
|
||||
}
|
||||
|
||||
export const listShippingOptionTypesTransformQueryConfig = {
|
||||
...retrieveShippingOptionTypeTransformQueryConfig,
|
||||
defaultLimit: 20,
|
||||
isList: true,
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
import {
|
||||
AuthenticatedMedusaRequest,
|
||||
MedusaResponse,
|
||||
} from "@medusajs/framework/http"
|
||||
|
||||
import { ContainerRegistrationKeys } from "@medusajs/framework/utils"
|
||||
import { createShippingOptionTypesWorkflow } from "@medusajs/core-flows"
|
||||
import { refetchShippingOptionType } from "./helpers"
|
||||
import { HttpTypes } from "@medusajs/framework/types"
|
||||
|
||||
export const GET = async (
|
||||
req: AuthenticatedMedusaRequest<HttpTypes.AdminShippingOptionTypeListParams>,
|
||||
res: MedusaResponse<HttpTypes.AdminShippingOptionTypeListResponse>
|
||||
) => {
|
||||
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
const { data: shippingOptionTypes, metadata } = await query.graph({
|
||||
entity: "shipping_option_type",
|
||||
fields: req.queryConfig.fields,
|
||||
filters: req.filterableFields,
|
||||
pagination: req.queryConfig.pagination,
|
||||
})
|
||||
|
||||
res.json({
|
||||
shipping_option_types: shippingOptionTypes,
|
||||
count: metadata!.count,
|
||||
offset: metadata!.skip,
|
||||
limit: metadata!.take,
|
||||
})
|
||||
}
|
||||
|
||||
export const POST = async (
|
||||
req: AuthenticatedMedusaRequest<HttpTypes.AdminCreateShippingOptionType>,
|
||||
res: MedusaResponse<HttpTypes.AdminShippingOptionTypeResponse>
|
||||
) => {
|
||||
const input = [req.validatedBody]
|
||||
|
||||
const { result } = await createShippingOptionTypesWorkflow(req.scope).run({
|
||||
input: { shipping_option_types: input },
|
||||
})
|
||||
|
||||
const shippingOptionType = await refetchShippingOptionType(
|
||||
result[0].id,
|
||||
req.scope,
|
||||
req.queryConfig.fields
|
||||
)
|
||||
|
||||
res.status(200).json({ shipping_option_type: shippingOptionType })
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
import { z } from "zod"
|
||||
import {
|
||||
createFindParams,
|
||||
createOperatorMap,
|
||||
createSelectParams,
|
||||
} from "../../utils/validators"
|
||||
import { applyAndAndOrOperators } from "../../utils/common-validators"
|
||||
|
||||
export type AdminGetShippingOptionTypeParamsType = z.infer<
|
||||
typeof AdminGetShippingOptionTypeParams
|
||||
>
|
||||
export const AdminGetShippingOptionTypeParams = createSelectParams()
|
||||
|
||||
export const AdminGetShippingOptionTypesParamsFields = z.object({
|
||||
q: z.string().optional(),
|
||||
id: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
label: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
code: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
description: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
created_at: createOperatorMap().optional(),
|
||||
updated_at: createOperatorMap().optional(),
|
||||
deleted_at: createOperatorMap().optional(),
|
||||
})
|
||||
|
||||
export type AdminGetShippingOptionTypesParamsType = z.infer<
|
||||
typeof AdminGetShippingOptionTypesParams
|
||||
>
|
||||
export const AdminGetShippingOptionTypesParams = createFindParams({
|
||||
limit: 10,
|
||||
offset: 0,
|
||||
})
|
||||
.merge(AdminGetShippingOptionTypesParamsFields)
|
||||
.merge(applyAndAndOrOperators(AdminGetShippingOptionTypesParamsFields))
|
||||
|
||||
export type AdminCreateShippingOptionTypeType = z.infer<
|
||||
typeof AdminCreateShippingOptionType
|
||||
>
|
||||
export const AdminCreateShippingOptionType = z
|
||||
.object({
|
||||
label: z.string(),
|
||||
code: z.string(),
|
||||
description: z.string().optional(),
|
||||
})
|
||||
.strict()
|
||||
|
||||
export type AdminUpdateShippingOptionTypeType = z.infer<
|
||||
typeof AdminUpdateShippingOptionType
|
||||
>
|
||||
export const AdminUpdateShippingOptionType = z
|
||||
.object({
|
||||
label: z.string().optional(),
|
||||
code: z.string().optional(),
|
||||
description: z.string().optional(),
|
||||
})
|
||||
.strict()
|
||||
@@ -79,7 +79,7 @@ export const AdminUpdateShippingOptionRule = z
|
||||
export const AdminCreateShippingOptionTypeObject = z
|
||||
.object({
|
||||
label: z.string(),
|
||||
description: z.string(),
|
||||
description: z.string().optional(),
|
||||
code: z.string(),
|
||||
})
|
||||
.strict()
|
||||
|
||||
@@ -60,6 +60,7 @@ import { storeProductRoutesMiddlewares } from "./store/products/middlewares"
|
||||
import { storeRegionRoutesMiddlewares } from "./store/regions/middlewares"
|
||||
import { storeReturnReasonRoutesMiddlewares } from "./store/return-reasons/middlewares"
|
||||
import { storeShippingOptionRoutesMiddlewares } from "./store/shipping-options/middlewares"
|
||||
import { adminShippingOptionTypeRoutesMiddlewares } from "./admin/shipping-option-types/middlewares"
|
||||
|
||||
export default defineMiddlewares([
|
||||
...storeRoutesMiddlewares,
|
||||
@@ -103,6 +104,7 @@ export default defineMiddlewares([
|
||||
...adminDraftOrderRoutesMiddlewares,
|
||||
...adminSalesChannelRoutesMiddlewares,
|
||||
...adminStockLocationRoutesMiddlewares,
|
||||
...adminShippingOptionTypeRoutesMiddlewares,
|
||||
...adminProductTypeRoutesMiddlewares,
|
||||
...adminProductTagRoutesMiddlewares,
|
||||
...adminUploadRoutesMiddlewares,
|
||||
|
||||
Reference in new issue
Block a user