Browse Source

perf(core): Correctly optimized OrderItem persistence

Michael Bromley 4 years ago
parent
commit
5c879e7145

+ 0 - 2
packages/core/e2e/order-taxes.e2e-spec.ts

@@ -1,7 +1,6 @@
 /* tslint:disable:no-non-null-assertion */
 import { summate } from '@vendure/common/lib/shared-utils';
 import { createErrorResultGuard, createTestEnvironment, ErrorResultGuard } from '@vendure/testing';
-import gql from 'graphql-tag';
 import path from 'path';
 
 import { initialData } from '../../../e2e-common/e2e-initial-data';
@@ -11,7 +10,6 @@ import { testSuccessfulPaymentMethod } from './fixtures/test-payment-methods';
 import { GetProductsWithVariantPrices, UpdateChannel } from './graphql/generated-e2e-admin-types';
 import {
     AddItemToOrder,
-    AdjustmentType,
     GetActiveOrderWithPriceData,
     TestOrderFragmentFragment,
     UpdatedOrderFragment,

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

@@ -170,7 +170,9 @@ export class OrderModifier {
                 .values(newOrderItems)
                 .execute();
             newOrderItems.forEach((item, i) => (item.id = identifiers[i].id));
-            orderLine.items.push(...newOrderItems);
+            orderLine.items = await this.connection
+                .getRepository(ctx, OrderItem)
+                .find({ where: { line: orderLine } });
         } else if (quantity < currentQuantity) {
             if (order.active) {
                 // When an Order is still active, it is fine to just delete

+ 1 - 0
packages/core/src/service/services/order.service.ts

@@ -1339,6 +1339,7 @@ export class OrderService {
             .getRepository(ctx, OrderItem)
             .createQueryBuilder()
             .insert()
+            .into(OrderItem, [...updateFields, 'id', 'lineId'])
             .values(updatedItems)
             .orUpdate({
                 conflict_target: ['id'],