Browse Source

perf(core): Improve order quantity update performanc

Thomas Blommaert 5 years ago
parent
commit
3c208372d2

+ 10 - 10
packages/core/src/service/helpers/order-modifier/order-modifier.ts

@@ -150,18 +150,18 @@ export class OrderModifier {
             if (!orderLine.items) {
                 orderLine.items = [];
             }
+            const newOrderItems = [];
             for (let i = currentQuantity; i < quantity; i++) {
-                const orderItem = await this.connection.getRepository(ctx, OrderItem).save(
-                    new OrderItem({
-                        listPrice: orderLine.productVariant.price,
-                        listPriceIncludesTax: orderLine.productVariant.priceIncludesTax,
-                        adjustments: [],
-                        taxLines: [],
-                        line: orderLine,
-                    }),
-                );
-                orderLine.items.push(orderItem);
+                newOrderItems.push(new OrderItem({
+                    listPrice: orderLine.productVariant.price,
+                    listPriceIncludesTax: orderLine.productVariant.priceIncludesTax,
+                    adjustments: [],
+                    taxLines: [],
+                    line: orderLine,
+                }));
             }
+            await this.connection.getRepository(ctx, OrderItem).createQueryBuilder().insert().values(newOrderItems);
+            orderLine.items = orderLine.items.concat(newOrderItems);
         } else if (quantity < currentQuantity) {
             if (order.active) {
                 // When an Order is still active, it is fine to just delete

+ 2 - 2
packages/core/src/service/services/order.service.ts

@@ -1329,8 +1329,8 @@ export class OrderService {
             updatedOrderLine ? [updatedOrderLine] : [],
         );
         await this.connection.getRepository(ctx, Order).save(order, { reload: false });
-        await this.connection.getRepository(ctx, OrderItem).save(updatedItems, { reload: false });
-        await this.connection.getRepository(ctx, ShippingLine).save(order.shippingLines, { reload: false });
+        await this.connection.getRepository(ctx, OrderItem).createQueryBuilder().insert().values(updatedItems);
+        await this.connection.getRepository(ctx, ShippingLine).createQueryBuilder().insert().values(order.shippingLines);
         return order;
     }