feat: Add create location fulfillment set flow + API (#6945)

This commit is contained in:
Oli Juhl authored and GitHub committed 2024-04-05 19:27:38 +02:00
1 parent 01487970b2
commit 626aa09497
18 files changed
+291 -10

No files matched your search

@@ -0,0 +1,42 @@
import { createLocationFulfillmentSetWorkflow } from "@medusajs/core-flows"
import {
ContainerRegistrationKeys,
remoteQueryObjectFromString,
} from "@medusajs/utils"
import { z } from "zod"
import { MedusaRequest, MedusaResponse } from "../../../../../types/routing"
import { AdminCreateStockLocationFulfillmentSet } from "../../validators"
export const POST = async (
req: MedusaRequest<z.infer<typeof AdminCreateStockLocationFulfillmentSet>>,
res: MedusaResponse
) => {
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
const { errors } = await createLocationFulfillmentSetWorkflow(req.scope).run({
input: {
location_id: req.params.id,
fulfillment_set_data: {
name: req.validatedBody.name,
type: req.validatedBody.type,
},
},
throwOnError: false,
})
if (Array.isArray(errors) && errors[0]) {
throw errors[0].error
}
const [stock_location] = await remoteQuery(
remoteQueryObjectFromString({
entryPoint: "stock_locations",
variables: {
id: req.params.id,
},
fields: req.remoteQueryConfig.fields,
})
)
res.status(200).json({ stock_location })
}
@@ -1,6 +1,8 @@
import * as QueryConfig from "./query-config"
import { transformBody, transformQuery } from "../../../api/middlewares"
import {
AdminCreateStockLocationFulfillmentSet,
AdminGetStockLocationsLocationParams,
AdminGetStockLocationsParams,
AdminPostStockLocationsLocationParams,
@@ -9,11 +11,11 @@ import {
AdminPostStockLocationsReq,
AdminStockLocationsLocationSalesChannelBatchReq,
} from "./validators"
import { transformBody, transformQuery } from "../../../api/middlewares"
import { MiddlewareRoute } from "../../../types/middlewares"
import { applySalesChannelsFilter } from "./utils/apply-sales-channel-filter"
import { authenticate } from "../../../utils/authenticate-middleware"
import { validateAndTransformBody } from "../../utils/validate-body"
import { applySalesChannelsFilter } from "./utils/apply-sales-channel-filter"
export const adminStockLocationRoutesMiddlewares: MiddlewareRoute[] = [
{
@@ -75,4 +77,15 @@ export const adminStockLocationRoutesMiddlewares: MiddlewareRoute[] = [
),
],
},
{
method: ["POST"],
matcher: "/admin/stock-locations/:id/fulfillment-sets",
middlewares: [
validateAndTransformBody(AdminCreateStockLocationFulfillmentSet),
transformQuery(
AdminPostStockLocationsParams,
QueryConfig.retrieveTransformQueryConfig
),
],
},
]
@@ -1,4 +1,4 @@
import { FindParams, extendedFindParamsMixin } from "../../../types/common"
import { Transform, Type } from "class-transformer"
import {
IsNotEmpty,
IsObject,
@@ -6,8 +6,9 @@ import {
IsString,
ValidateNested,
} from "class-validator"
import { Transform, Type } from "class-transformer"
import { FindParams, extendedFindParamsMixin } from "../../../types/common"
import { z } from "zod"
import { IsType } from "../../../utils"
/**
@@ -286,3 +287,10 @@ export class AdminStockLocationsLocationSalesChannelBatchReq {
@IsString({ each: true })
sales_channel_ids: string[]
}
export const AdminCreateStockLocationFulfillmentSet = z
.object({
name: z.string(),
type: z.string(),
})
.strict()
+1 -1
View File
@@ -1,5 +1,5 @@
import type { Customer, User } from "../models"
import type { NextFunction, Request, Response } from "express"
import type { Customer, User } from "../models"
import { MedusaContainer, RequestQueryFields } from "@medusajs/types"
import { FindConfig } from "./common"