From a93532e86da0e7916ea90ffd8bf04bf2a01aa67c Mon Sep 17 00:00:00 2001 From: Fikri Naufal Hamdi <18221096@std.stei.itb.ac.id> Date: Mon, 27 Nov 2023 02:42:32 +0700 Subject: [PATCH] feat: add api for inserting a bulk of order_product --- .../src/controller/OrderProductController.ts | 31 +++++++++++++++++++ backend/src/repository/OrderProductRepo.ts | 22 +++++++++++++ backend/src/router/OrderProductRouter.ts | 4 +++ 3 files changed, 57 insertions(+) diff --git a/backend/src/controller/OrderProductController.ts b/backend/src/controller/OrderProductController.ts index 0f6a21e..75a1756 100644 --- a/backend/src/controller/OrderProductController.ts +++ b/backend/src/controller/OrderProductController.ts @@ -24,6 +24,37 @@ class OrderProductController { } } + async createOrderProductBulk(req: Request, res: Response) { + try { + const newOrderProducts = req.body.map( + (orderProduct: OrderProduct) => { + const newOrderProduct = new OrderProduct(); + newOrderProduct.id_order = orderProduct.id_order; + newOrderProduct.id_product = orderProduct.id_product; + newOrderProduct.num_product = orderProduct.num_product; + + return newOrderProduct; + }, + ); + + console.log(newOrderProducts); + await new OrderProductRepo().createOrderProductBulk( + newOrderProducts, + ); + + res.status(201).json({ + status: "Created!", + message: "Successfully created order product batch!", + }); + } catch (error) { + console.log(error); + res.status(500).json({ + status: "Internal Server Error!", + message: "Internal Server Error!", + }); + } + } + async deleteOrderProduct(req: Request, res: Response) { try { const id_order = parseInt(req.params["id_order"]); diff --git a/backend/src/repository/OrderProductRepo.ts b/backend/src/repository/OrderProductRepo.ts index c83e977..ba0d916 100644 --- a/backend/src/repository/OrderProductRepo.ts +++ b/backend/src/repository/OrderProductRepo.ts @@ -76,6 +76,28 @@ export default class OrderProductRepo implements IOrderProductRepo { } } + async createOrderProductBulk( + orderProducts: readonly Partial<OrderProduct>[], + ): Promise<void> { + try { + console.log(orderProducts); + const newOrderProducts = orderProducts.map( + (orderProduct: Partial<OrderProduct>) => { + return { + id_order: orderProduct.id_order, + id_product: orderProduct.id_product, + num_product: orderProduct.num_product, + }; + }, + ); + await OrderProduct.bulkCreate(newOrderProducts); + } catch (error: any) { + throw new Error( + `Error while creating order product batch: ${error.message}`, + ); + } + } + async updateOrderProduct(orderProduct: OrderProduct): Promise<void> { try { const existingOrderProduct = await OrderProduct.findOne({ diff --git a/backend/src/router/OrderProductRouter.ts b/backend/src/router/OrderProductRouter.ts index 77a217e..cb07760 100644 --- a/backend/src/router/OrderProductRouter.ts +++ b/backend/src/router/OrderProductRouter.ts @@ -14,6 +14,10 @@ class OrderProductRoutes extends BaseRoutes { validate(createOrderProductSchema), OrderProductController.createOrderProduct, ); + this.router.post( + "/bulk", + OrderProductController.createOrderProductBulk, + ); this.router.patch( "/:orderId/:productId", validate(updateOrderProductSchema), -- GitLab