From 1e04be90c8fbea5bec3e0e30d68ce1458d640041 Mon Sep 17 00:00:00 2001 From: Sebastian Rindom Date: Tue, 8 Sep 2020 12:02:26 +0200 Subject: [PATCH] fix: fulfillment api (#104) * fix: updates admin fulfillment endpoint * fix: adds shipment creation in admin * fix: adds shipment creation in admin * fix: missing await --- .../routes/admin/orders/create-fulfillment.js | 24 ++++++++++++++- .../routes/admin/orders/create-shipment.js | 30 +++++++++++++++++++ .../src/api/routes/admin/orders/index.js | 5 ++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 packages/medusa/src/api/routes/admin/orders/create-shipment.js diff --git a/packages/medusa/src/api/routes/admin/orders/create-fulfillment.js b/packages/medusa/src/api/routes/admin/orders/create-fulfillment.js index 0ff94bba8c..613592ea35 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-fulfillment.js +++ b/packages/medusa/src/api/routes/admin/orders/create-fulfillment.js @@ -1,9 +1,31 @@ +import { MedusaError, Validator } from "medusa-core-utils" + export default async (req, res) => { const { id } = req.params + const schema = Validator.object().keys({ + items: Validator.array() + .items({ + item_id: Validator.string().required(), + quantity: Validator.number().required(), + }) + .required(), + metadata: Validator.object().optional(), + }) + + const { value, error } = schema.validate(req.body) + if (error) { + throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) + } + try { const orderService = req.scope.resolve("orderService") - let order = await orderService.createFulfillment(id) + + let order = await orderService.createFulfillment( + id, + value.items, + value.metadata + ) order = await orderService.decorate(order, [], ["region"]) res.json({ order }) } catch (error) { diff --git a/packages/medusa/src/api/routes/admin/orders/create-shipment.js b/packages/medusa/src/api/routes/admin/orders/create-shipment.js new file mode 100644 index 0000000000..3c3b00f7da --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/create-shipment.js @@ -0,0 +1,30 @@ +import { MedusaError, Validator } from "medusa-core-utils" + +export default async (req, res) => { + const { id } = req.params + + const schema = Validator.object().keys({ + fulfillment_id: Validator.string().required(), + tracking_numbers: Validator.array() + .items(Validator.string()) + .optional(), + }) + + const { value, error } = schema.validate(req.body) + if (error) { + throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) + } + + try { + const orderService = req.scope.resolve("orderService") + let order = await orderService.createShipment( + id, + value.fulfillment_id, + value.tracking_numbers + ) + order = await orderService.decorate(order, [], ["region"]) + res.json({ order }) + } catch (error) { + throw error + } +} diff --git a/packages/medusa/src/api/routes/admin/orders/index.js b/packages/medusa/src/api/routes/admin/orders/index.js index d8a3a3b983..5fae795122 100644 --- a/packages/medusa/src/api/routes/admin/orders/index.js +++ b/packages/medusa/src/api/routes/admin/orders/index.js @@ -24,6 +24,11 @@ export default app => { "/:id/capture", middlewares.wrap(require("./capture-payment").default) ) + route.post( + "/:id/shipment", + middlewares.wrap(require("./create-shipment").default) + ) + route.post( "/:id/fulfillment", middlewares.wrap(require("./create-fulfillment").default)