Просмотр исходного кода

chore(core): Fix circular dependencies & get all core tests passing

Michael Bromley 3 лет назад
Родитель
Сommit
4ae558038d
48 измененных файлов с 190 добавлено и 186 удалено
  1. 1 2
      packages/core/src/api/config/generate-active-order-types.ts
  2. 1 1
      packages/core/src/api/decorators/relations.decorator.ts
  3. 1 1
      packages/core/src/api/resolvers/admin/asset.resolver.ts
  4. 2 1
      packages/core/src/api/resolvers/admin/draft-order.resolver.ts
  5. 1 1
      packages/core/src/api/resolvers/entity/collection-entity.resolver.ts
  6. 2 1
      packages/core/src/api/resolvers/entity/fulfillment-line-entity.resolver.ts
  7. 3 1
      packages/core/src/api/resolvers/entity/refund-line-entity.resolver.ts
  8. 1 1
      packages/core/src/api/resolvers/entity/shipping-method-entity.resolver.ts
  9. 3 2
      packages/core/src/api/resolvers/entity/zone-entity.resolver.ts
  10. 2 1
      packages/core/src/config/catalog/product-variant-price-calculation-strategy.ts
  11. 8 3
      packages/core/src/config/config-helpers.ts
  12. 1 1
      packages/core/src/config/fulfillment/default-fulfillment-process.ts
  13. 1 1
      packages/core/src/config/order/active-order-strategy.ts
  14. 1 1
      packages/core/src/config/order/changed-price-handling-strategy.ts
  15. 4 1
      packages/core/src/config/order/default-order-process.ts
  16. 6 1
      packages/core/src/config/order/order-seller-strategy.ts
  17. 1 1
      packages/core/src/config/promotion/promotion-condition.ts
  18. 3 1
      packages/core/src/config/shipping-method/default-shipping-line-assignment-strategy.ts
  19. 3 2
      packages/core/src/config/shipping-method/shipping-line-assignment-strategy.ts
  20. 1 1
      packages/core/src/connection/remove-custom-fields-with-eager-relations.ts
  21. 1 1
      packages/core/src/connection/transactional-connection.ts
  22. 16 10
      packages/core/src/entity/order-line/order-line.entity.ts
  23. 69 83
      packages/core/src/entity/order/order.entity.spec.ts
  24. 1 1
      packages/core/src/entity/run-entity-metadata-modifiers.ts
  25. 1 1
      packages/core/src/entity/seller/seller.entity.ts
  26. 2 1
      packages/core/src/plugin/default-search-plugin/api/fulltext-search.resolver.ts
  27. 3 3
      packages/core/src/service/helpers/active-order/active-order.service.ts
  28. 1 1
      packages/core/src/service/helpers/list-query-builder/connection-utils.ts
  29. 1 1
      packages/core/src/service/helpers/list-query-builder/list-query-builder.ts
  30. 1 1
      packages/core/src/service/helpers/list-query-builder/parse-sort-params.spec.ts
  31. 1 1
      packages/core/src/service/helpers/list-query-builder/parse-sort-params.ts
  32. 8 33
      packages/core/src/service/helpers/order-calculator/order-calculator.spec.ts
  33. 1 1
      packages/core/src/service/helpers/order-modifier/order-modifier.ts
  34. 7 4
      packages/core/src/service/helpers/order-splitter/order-splitter.ts
  35. 2 2
      packages/core/src/service/helpers/order-state-machine/order-state-machine.ts
  36. 1 1
      packages/core/src/service/helpers/request-context/request-context.service.ts
  37. 1 1
      packages/core/src/service/helpers/utils/get-user-channels-permissions.ts
  38. 2 1
      packages/core/src/service/helpers/utils/order-utils.ts
  39. 1 1
      packages/core/src/service/services/administrator.service.ts
  40. 1 1
      packages/core/src/service/services/customer.service.ts
  41. 1 1
      packages/core/src/service/services/facet.service.ts
  42. 2 1
      packages/core/src/service/services/fulfillment.service.ts
  43. 4 1
      packages/core/src/service/services/order.service.ts
  44. 7 2
      packages/core/src/service/services/payment.service.ts
  45. 3 2
      packages/core/src/service/services/product-option-group.service.ts
  46. 2 2
      packages/core/src/service/services/product-option.service.ts
  47. 3 3
      packages/core/src/service/services/tax-rate.service.ts
  48. 1 0
      packages/core/src/testing/order-test-utils.ts

+ 1 - 2
packages/core/src/api/config/generate-active-order-types.ts

@@ -5,12 +5,11 @@ import {
     GraphQLInputFieldConfigMap,
     GraphQLInputObjectType,
     GraphQLSchema,
-    GraphQLObjectType,
     isInputObjectType,
 } from 'graphql';
 
 import { InternalServerError } from '../../common/error/errors';
-import { ActiveOrderStrategy, ACTIVE_ORDER_INPUT_FIELD_NAME } from '../../config/index';
+import { ActiveOrderStrategy, ACTIVE_ORDER_INPUT_FIELD_NAME } from '../../config/order/active-order-strategy';
 
 /**
  * This function is responsible for constructing the `ActiveOrderInput` GraphQL input type.

+ 1 - 1
packages/core/src/api/decorators/relations.decorator.ts

@@ -6,7 +6,7 @@ import { getMetadataArgsStorage } from 'typeorm';
 
 import { CalculatedColumnDefinition, CALCULATED_PROPERTIES } from '../../common/calculated-decorator';
 import { EntityRelationPaths, InternalServerError, TtlCache } from '../../common/index';
-import { VendureEntity } from '../../entity/index';
+import { VendureEntity } from '../../entity/base/base.entity';
 
 // tslint:disable-next-line:no-var-requires
 const graphqlFields = require('graphql-fields');

+ 1 - 1
packages/core/src/api/resolvers/admin/asset.resolver.ts

@@ -12,8 +12,8 @@ import {
 } from '@vendure/common/lib/generated-types';
 import { PaginatedList } from '@vendure/common/lib/shared-types';
 
+import { Administrator } from '../../../entity/administrator/administrator.entity';
 import { Asset } from '../../../entity/asset/asset.entity';
-import { Administrator } from '../../../entity/index';
 import { AssetService } from '../../../service/services/asset.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';

+ 2 - 1
packages/core/src/api/resolvers/admin/draft-order.resolver.ts

@@ -27,7 +27,8 @@ import {
 
 import { ErrorResultUnion, isGraphQlErrorResult, UserInputError } from '../../../common/index';
 import { TransactionalConnection } from '../../../connection/index';
-import { Customer, Order } from '../../../entity/index';
+import { Customer } from '../../../entity/customer/customer.entity';
+import { Order } from '../../../entity/order/order.entity';
 import { CustomerService, OrderService } from '../../../service/index';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';

+ 1 - 1
packages/core/src/api/resolvers/entity/collection-entity.resolver.ts

@@ -9,7 +9,7 @@ import { PaginatedList } from '@vendure/common/lib/shared-types';
 
 import { ListQueryOptions } from '../../../common/types/common-types';
 import { Translated } from '../../../common/types/locale-types';
-import { CollectionFilter } from '../../../config/index';
+import { CollectionFilter } from '../../../config/catalog/collection-filter';
 import { Asset, Collection, Product, ProductVariant } from '../../../entity';
 import { LocaleStringHydrator } from '../../../service/helpers/locale-string-hydrator/locale-string-hydrator';
 import { AssetService } from '../../../service/services/asset.service';

+ 2 - 1
packages/core/src/api/resolvers/entity/fulfillment-line-entity.resolver.ts

@@ -2,7 +2,8 @@ import { Parent, ResolveField, Resolver } from '@nestjs/graphql';
 
 import { TransactionalConnection } from '../../../connection/index';
 import { Fulfillment } from '../../../entity/fulfillment/fulfillment.entity';
-import { FulfillmentLine, OrderLine } from '../../../entity/index';
+import { FulfillmentLine } from '../../../entity/order-line-reference/fulfillment-line.entity';
+import { OrderLine } from '../../../entity/order-line/order-line.entity';
 import { RequestContext } from '../../common/request-context';
 import { Ctx } from '../../decorators/request-context.decorator';
 

+ 3 - 1
packages/core/src/api/resolvers/entity/refund-line-entity.resolver.ts

@@ -1,7 +1,9 @@
 import { Parent, ResolveField, Resolver } from '@nestjs/graphql';
 
 import { TransactionalConnection } from '../../../connection/index';
-import { OrderLine, Refund, RefundLine } from '../../../entity/index';
+import { RefundLine } from '../../../entity/order-line-reference/refund-line.entity';
+import { OrderLine } from '../../../entity/order-line/order-line.entity';
+import { Refund } from '../../../entity/refund/refund.entity';
 import { RequestContext } from '../../common/request-context';
 import { Ctx } from '../../decorators/request-context.decorator';
 

+ 1 - 1
packages/core/src/api/resolvers/entity/shipping-method-entity.resolver.ts

@@ -1,6 +1,6 @@
 import { Parent, ResolveField, Resolver } from '@nestjs/graphql';
 
-import { ShippingMethod } from '../../../entity/index';
+import { ShippingMethod } from '../../../entity/shipping-method/shipping-method.entity';
 import { LocaleStringHydrator } from '../../../service/helpers/locale-string-hydrator/locale-string-hydrator';
 import { RequestContext } from '../../common/request-context';
 import { Ctx } from '../../decorators/request-context.decorator';

+ 3 - 2
packages/core/src/api/resolvers/entity/zone-entity.resolver.ts

@@ -1,7 +1,8 @@
 import { Parent, ResolveField, Resolver } from '@nestjs/graphql';
 
-import { Country, Zone } from '../../../entity/index';
-import { ZoneService } from '../../../service/index';
+import { Country } from '../../../entity/country/country.entity';
+import { Zone } from '../../../entity/zone/zone.entity';
+import { ZoneService } from '../../../service/services/zone.service';
 import { RequestContext } from '../../common/request-context';
 import { Ctx } from '../../decorators/request-context.decorator';
 

+ 2 - 1
packages/core/src/config/catalog/product-variant-price-calculation-strategy.ts

@@ -1,7 +1,8 @@
 import { RequestContext } from '../../api/common/request-context';
 import { PriceCalculationResult } from '../../common/types/common-types';
 import { InjectableStrategy } from '../../common/types/injectable-strategy';
-import { TaxCategory, Zone } from '../../entity/index';
+import { TaxCategory } from '../../entity/tax-category/tax-category.entity';
+import { Zone } from '../../entity/zone/zone.entity';
 
 /**
  * @description

+ 8 - 3
packages/core/src/config/config-helpers.ts

@@ -1,14 +1,13 @@
-import { defaultConfig } from './default-config';
 import { mergeConfig } from './merge-config';
 import { PartialVendureConfig, RuntimeVendureConfig } from './vendure-config';
 
-let activeConfig = defaultConfig;
+let activeConfig: RuntimeVendureConfig;
 
 /**
  * Reset the activeConfig object back to the initial default state.
  */
 export function resetConfig() {
-    activeConfig = defaultConfig;
+    activeConfig = require('./default-config').defaultConfig;
 }
 
 /**
@@ -16,6 +15,9 @@ export function resetConfig() {
  * bootstrapping the app.
  */
 export function setConfig(userConfig: PartialVendureConfig): void {
+    if (!activeConfig) {
+        activeConfig = require('./default-config').defaultConfig;
+    }
     activeConfig = mergeConfig(activeConfig, userConfig);
 }
 
@@ -25,5 +27,8 @@ export function setConfig(userConfig: PartialVendureConfig): void {
  * should be used to access config settings.
  */
 export function getConfig(): Readonly<RuntimeVendureConfig> {
+    if (!activeConfig) {
+        activeConfig = require('./default-config').defaultConfig;
+    }
     return activeConfig;
 }

+ 1 - 1
packages/core/src/config/fulfillment/default-fulfillment-process.ts

@@ -3,7 +3,7 @@ import { ID } from '@vendure/common/lib/shared-types';
 
 import { RequestContext } from '../../api/common/request-context';
 import { awaitPromiseOrObservable, InternalServerError, isGraphQlErrorResult } from '../../common/index';
-import { Fulfillment } from '../../entity/index';
+import { Fulfillment } from '../../entity/fulfillment/fulfillment.entity';
 import { Order } from '../../entity/order/order.entity';
 import { orderItemsAreDelivered, orderItemsAreShipped } from '../../service/helpers/utils/order-utils';
 import { FulfillmentState, OrderState } from '../../service/index';

+ 1 - 1
packages/core/src/config/order/active-order-strategy.ts

@@ -2,7 +2,7 @@ import { DocumentNode } from 'graphql';
 
 import { RequestContext } from '../../api/index';
 import { InjectableStrategy } from '../../common/index';
-import { Order } from '../../entity/index';
+import { Order } from '../../entity/order/order.entity';
 
 export const ACTIVE_ORDER_INPUT_FIELD_NAME = 'activeOrderInput';
 

+ 1 - 1
packages/core/src/config/order/changed-price-handling-strategy.ts

@@ -1,7 +1,7 @@
 import { RequestContext } from '../../api/common/request-context';
 import { PriceCalculationResult } from '../../common/types/common-types';
 import { InjectableStrategy } from '../../common/types/injectable-strategy';
-import { OrderLine } from '../../entity/index';
+import { OrderLine } from '../../entity/order-line/order-line.entity';
 import { Order } from '../../entity/order/order.entity';
 
 /**

+ 4 - 1
packages/core/src/config/order/default-order-process.ts

@@ -4,8 +4,11 @@ import { unique } from '@vendure/common/lib/unique';
 
 import { RequestContext } from '../../api/index';
 import { TransactionalConnection } from '../../connection/transactional-connection';
-import { Order, OrderLine, Payment, ProductVariant } from '../../entity/index';
+import { OrderLine } from '../../entity/order-line/order-line.entity';
 import { OrderModification } from '../../entity/order-modification/order-modification.entity';
+import { Order } from '../../entity/order/order.entity';
+import { Payment } from '../../entity/payment/payment.entity';
+import { ProductVariant } from '../../entity/product-variant/product-variant.entity';
 import { OrderPlacedEvent } from '../../event-bus/events/order-placed-event';
 import { OrderState } from '../../service/helpers/order-state-machine/order-state';
 import {

+ 6 - 1
packages/core/src/config/order/order-seller-strategy.ts

@@ -2,7 +2,12 @@ import { ID } from '@vendure/common/lib/shared-types';
 
 import { RequestContext } from '../../api/index';
 import { InjectableStrategy } from '../../common/index';
-import { Channel, Order, OrderLine, Payment, ShippingLine, Surcharge } from '../../entity/index';
+import { Channel } from '../../entity/channel/channel.entity';
+import { OrderLine } from '../../entity/order-line/order-line.entity';
+import { Order } from '../../entity/order/order.entity';
+import { Payment } from '../../entity/payment/payment.entity';
+import { ShippingLine } from '../../entity/shipping-line/shipping-line.entity';
+import { Surcharge } from '../../entity/surcharge/surcharge.entity';
 import { OrderState } from '../../service/index';
 
 /**

+ 1 - 1
packages/core/src/config/promotion/promotion-condition.ts

@@ -7,8 +7,8 @@ import {
     ConfigurableOperationDef,
     ConfigurableOperationDefOptions,
 } from '../../common/configurable-operation';
-import { Promotion } from '../../entity/index';
 import { Order } from '../../entity/order/order.entity';
+import { Promotion } from '../../entity/promotion/promotion.entity';
 
 export type PromotionConditionState = Record<string, unknown>;
 

+ 3 - 1
packages/core/src/config/shipping-method/default-shipping-line-assignment-strategy.ts

@@ -1,5 +1,7 @@
 import { RequestContext } from '../../api/index';
-import { Order, OrderLine, ShippingLine } from '../../entity/index';
+import { OrderLine } from '../../entity/order-line/order-line.entity';
+import { Order } from '../../entity/order/order.entity';
+import { ShippingLine } from '../../entity/shipping-line/shipping-line.entity';
 
 import { ShippingLineAssignmentStrategy } from './shipping-line-assignment-strategy';
 

+ 3 - 2
packages/core/src/config/shipping-method/shipping-line-assignment-strategy.ts

@@ -1,7 +1,8 @@
 import { RequestContext } from '../../api/index';
 import { InjectableStrategy } from '../../common/index';
-import { Order, OrderLine, ShippingLine } from '../../entity/index';
-
+import { OrderLine } from '../../entity/order-line/order-line.entity';
+import { Order } from '../../entity/order/order.entity';
+import { ShippingLine } from '../../entity/shipping-line/shipping-line.entity';
 /**
  * @description
  * This strategy is used to assign a given {@link ShippingLine} to one or more {@link OrderLine}s of the Order.

+ 1 - 1
packages/core/src/connection/remove-custom-fields-with-eager-relations.ts

@@ -1,6 +1,6 @@
 import { SelectQueryBuilder } from 'typeorm';
 
-import { Logger } from '../config/index';
+import { Logger } from '../config/logger/vendure-logger';
 
 /**
  * This is a work-around for this issue: https://github.com/vendure-ecommerce/vendure/issues/1664

+ 1 - 1
packages/core/src/connection/transactional-connection.ts

@@ -16,7 +16,7 @@ import { RequestContext } from '../api/common/request-context';
 import { TRANSACTION_MANAGER_KEY } from '../common/constants';
 import { EntityNotFoundError } from '../common/error/errors';
 import { ChannelAware, SoftDeletable } from '../common/types/common-types';
-import { Logger } from '../config/index';
+import { Logger } from '../config/logger/vendure-logger';
 import { VendureEntity } from '../entity/base/base.entity';
 
 import { removeCustomFieldsWithEagerRelations } from './remove-custom-fields-with-eager-relations';

+ 16 - 10
packages/core/src/entity/order-line/order-line.entity.ts

@@ -188,8 +188,7 @@ export class OrderLine extends VendureEntity implements HasCustomFields {
      */
     @Calculated()
     get proratedUnitPrice(): number {
-        const result = this.listPrice + this.getAdjustmentsTotal();
-        return this.listPriceIncludesTax ? netPriceOf(result, this.taxRate) : result;
+        return Math.round(this._proratedUnitPrice());
     }
 
     /**
@@ -198,6 +197,15 @@ export class OrderLine extends VendureEntity implements HasCustomFields {
      */
     @Calculated()
     get proratedUnitPriceWithTax(): number {
+        return Math.round(this._proratedUnitPriceWithTax());
+    }
+
+    private _proratedUnitPrice(): number {
+        const result = this.listPrice + this.getAdjustmentsTotal();
+        return this.listPriceIncludesTax ? netPriceOf(result, this.taxRate) : result;
+    }
+
+    private _proratedUnitPriceWithTax(): number {
         const result = this.listPrice + this.getAdjustmentsTotal();
         return this.listPriceIncludesTax ? result : grossPriceOf(result, this.taxRate);
     }
@@ -220,12 +228,10 @@ export class OrderLine extends VendureEntity implements HasCustomFields {
         if (!this.adjustments || this.quantity === 0) {
             return 0;
         }
-        return Math.round(
-            this.adjustments
-                .filter(adjustment => (type ? adjustment.type === type : true))
-                .map(adjustment => adjustment.amount / Math.max(this.orderPlacedQuantity, this.quantity))
-                .reduce((total, a) => total + a, 0),
-        );
+        return this.adjustments
+            .filter(adjustment => (type ? adjustment.type === type : true))
+            .map(adjustment => adjustment.amount / Math.max(this.orderPlacedQuantity, this.quantity))
+            .reduce((total, a) => total + a, 0);
     }
 
     @Calculated()
@@ -316,7 +322,7 @@ export class OrderLine extends VendureEntity implements HasCustomFields {
      */
     @Calculated()
     get proratedLinePrice(): number {
-        return this.proratedUnitPrice * this.quantity;
+        return this._proratedUnitPrice() * this.quantity;
     }
 
     /**
@@ -325,7 +331,7 @@ export class OrderLine extends VendureEntity implements HasCustomFields {
      */
     @Calculated()
     get proratedLinePriceWithTax(): number {
-        return this.proratedUnitPriceWithTax * this.quantity;
+        return this._proratedUnitPriceWithTax() * this.quantity;
     }
 
     @Calculated()

+ 69 - 83
packages/core/src/entity/order/order.entity.spec.ts

@@ -25,8 +25,7 @@ describe('Order entity methods', () => {
                     },
                 ],
             });
-            order.lines[0].items.forEach(i => (i.taxLines = [{ taxRate: 5, description: 'tax a' }]));
-            order.lines[1].items.forEach(i => (i.taxLines = [{ taxRate: 5, description: 'tax a' }]));
+            order.lines.forEach(i => (i.taxLines = [{ taxRate: 5, description: 'tax a' }]));
 
             expect(order.taxSummary).toEqual([
                 {
@@ -56,8 +55,8 @@ describe('Order entity methods', () => {
                     },
                 ],
             });
-            order.lines[0].items.forEach(i => (i.taxLines = [{ taxRate: 5, description: 'tax a' }]));
-            order.lines[1].items.forEach(i => (i.taxLines = [{ taxRate: 7.5, description: 'tax b' }]));
+            order.lines[0].taxLines = [{ taxRate: 5, description: 'tax a' }];
+            order.lines[1].taxLines = [{ taxRate: 7.5, description: 'tax b' }];
 
             expect(order.taxSummary).toEqual([
                 {
@@ -93,20 +92,14 @@ describe('Order entity methods', () => {
                     },
                 ],
             });
-            order.lines[0].items.forEach(
-                i =>
-                    (i.taxLines = [
-                        { taxRate: 5, description: 'tax a' },
-                        { taxRate: 7.5, description: 'tax b' },
-                    ]),
-            );
-            order.lines[1].items.forEach(
-                i =>
-                    (i.taxLines = [
-                        { taxRate: 5, description: 'tax a' },
-                        { taxRate: 7.5, description: 'tax b' },
-                    ]),
-            );
+            order.lines[0].taxLines = [
+                { taxRate: 5, description: 'tax a' },
+                { taxRate: 7.5, description: 'tax b' },
+            ];
+            order.lines[1].taxLines = [
+                { taxRate: 5, description: 'tax a' },
+                { taxRate: 7.5, description: 'tax b' },
+            ];
 
             expect(order.taxSummary).toEqual([
                 {
@@ -142,34 +135,30 @@ describe('Order entity methods', () => {
                     },
                 ],
             });
-            order.lines[0].items.forEach(i => {
-                i.taxLines = [
-                    { taxRate: 5, description: 'tax a' },
-                    { taxRate: 7.5, description: 'tax b' },
-                ];
-                i.adjustments = [
-                    {
-                        amount: -30,
-                        adjustmentSource: 'some order discount',
-                        description: 'some order discount',
-                        type: AdjustmentType.DISTRIBUTED_ORDER_PROMOTION,
-                    },
-                ];
-            });
-            order.lines[1].items.forEach(i => {
-                i.taxLines = [
-                    { taxRate: 5, description: 'tax a' },
-                    { taxRate: 7.5, description: 'tax b' },
-                ];
-                i.adjustments = [
-                    {
-                        amount: -100,
-                        adjustmentSource: 'some order discount',
-                        description: 'some order discount',
-                        type: AdjustmentType.DISTRIBUTED_ORDER_PROMOTION,
-                    },
-                ];
-            });
+            order.lines[0].taxLines = [
+                { taxRate: 5, description: 'tax a' },
+                { taxRate: 7.5, description: 'tax b' },
+            ];
+            order.lines[0].adjustments = [
+                {
+                    amount: -60,
+                    adjustmentSource: 'some order discount',
+                    description: 'some order discount',
+                    type: AdjustmentType.DISTRIBUTED_ORDER_PROMOTION,
+                },
+            ];
+            order.lines[1].taxLines = [
+                { taxRate: 5, description: 'tax a' },
+                { taxRate: 7.5, description: 'tax b' },
+            ];
+            order.lines[1].adjustments = [
+                {
+                    amount: -100,
+                    adjustmentSource: 'some order discount',
+                    description: 'some order discount',
+                    type: AdjustmentType.DISTRIBUTED_ORDER_PROMOTION,
+                },
+            ];
 
             expect(order.taxSummary).toEqual([
                 {
@@ -205,40 +194,37 @@ describe('Order entity methods', () => {
                     },
                 ],
             });
-            order.lines[0].items.forEach(i => {
-                i.taxLines = [
-                    { taxRate: 5, description: 'tax a' },
-                    { taxRate: 7.5, description: 'tax b' },
-                ];
-                i.adjustments = [
-                    {
-                        amount: -30,
-                        adjustmentSource: 'some order discount',
-                        description: 'some order discount',
-                        type: AdjustmentType.DISTRIBUTED_ORDER_PROMOTION,
-                    },
-                    {
-                        amount: -125,
-                        adjustmentSource: 'some item discount',
-                        description: 'some item discount',
-                        type: AdjustmentType.PROMOTION,
-                    },
-                ];
-            });
-            order.lines[1].items.forEach(i => {
-                i.taxLines = [
-                    { taxRate: 5, description: 'tax a' },
-                    { taxRate: 7.5, description: 'tax b' },
-                ];
-                i.adjustments = [
-                    {
-                        amount: -100,
-                        adjustmentSource: 'some order discount',
-                        description: 'some order discount',
-                        type: AdjustmentType.DISTRIBUTED_ORDER_PROMOTION,
-                    },
-                ];
-            });
+            order.lines[0].taxLines = [
+                { taxRate: 5, description: 'tax a' },
+                { taxRate: 7.5, description: 'tax b' },
+            ];
+            order.lines[0].adjustments = [
+                {
+                    amount: -60,
+                    adjustmentSource: 'some order discount',
+                    description: 'some order discount',
+                    type: AdjustmentType.DISTRIBUTED_ORDER_PROMOTION,
+                },
+                {
+                    amount: -250,
+                    adjustmentSource: 'some item discount',
+                    description: 'some item discount',
+                    type: AdjustmentType.PROMOTION,
+                },
+            ];
+
+            order.lines[1].taxLines = [
+                { taxRate: 5, description: 'tax a' },
+                { taxRate: 7.5, description: 'tax b' },
+            ];
+            order.lines[1].adjustments = [
+                {
+                    amount: -100,
+                    adjustmentSource: 'some order discount',
+                    description: 'some order discount',
+                    type: AdjustmentType.DISTRIBUTED_ORDER_PROMOTION,
+                },
+            ];
 
             expect(order.taxSummary).toEqual([
                 {
@@ -269,7 +255,7 @@ describe('Order entity methods', () => {
                     },
                 ],
             });
-            order.lines[0].items.forEach(i => (i.taxLines = [{ taxRate: 0, description: 'zero-rate' }]));
+            order.lines[0].taxLines = [{ taxRate: 0, description: 'zero-rate' }];
 
             expect(order.taxSummary).toEqual([
                 {
@@ -299,8 +285,8 @@ describe('Order entity methods', () => {
                     },
                 ],
             });
-            order.lines[0].items.forEach(i => (i.taxLines = [{ taxRate: 5, description: 'tax a' }]));
-            order.lines[1].items.forEach(i => (i.taxLines = [{ taxRate: 5, description: 'tax a' }]));
+            order.lines[0].taxLines = [{ taxRate: 5, description: 'tax a' }];
+            order.lines[1].taxLines = [{ taxRate: 5, description: 'tax a' }];
             order.shippingLines = [
                 new ShippingLine({
                     listPrice: 500,

+ 1 - 1
packages/core/src/entity/run-entity-metadata-modifiers.ts

@@ -1,6 +1,6 @@
 import { getMetadataArgsStorage } from 'typeorm';
 
-import { VendureConfig } from '../config/index';
+import { VendureConfig } from '../config/vendure-config';
 
 export async function runEntityMetadataModifiers(config: VendureConfig) {
     if (config.entityOptions?.metadataModifiers?.length) {

+ 1 - 1
packages/core/src/entity/seller/seller.entity.ts

@@ -2,7 +2,7 @@ import { DeepPartial } from '@vendure/common/lib/shared-types';
 import { Column, Entity } from 'typeorm';
 
 import { SoftDeletable } from '../../common/types/common-types';
-import { HasCustomFields } from '../../config/index';
+import { HasCustomFields } from '../../config/custom-field/custom-field-types';
 import { VendureEntity } from '../base/base.entity';
 import { CustomSellerFields } from '../custom-entity-fields';
 

+ 2 - 1
packages/core/src/plugin/default-search-plugin/api/fulltext-search.resolver.ts

@@ -12,7 +12,8 @@ import { Allow } from '../../../api/decorators/allow.decorator';
 import { Ctx } from '../../../api/decorators/request-context.decorator';
 import { SearchResolver as BaseSearchResolver } from '../../../api/resolvers/admin/search.resolver';
 import { InternalServerError } from '../../../common/error/errors';
-import { Collection, FacetValue } from '../../../entity/index';
+import { Collection } from '../../../entity/collection/collection.entity';
+import { FacetValue } from '../../../entity/facet-value/facet-value.entity';
 import { FulltextSearchService } from '../fulltext-search.service';
 import { SearchJobBufferService } from '../search-job-buffer/search-job-buffer.service';
 

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

@@ -1,9 +1,9 @@
 import { Injectable } from '@nestjs/common';
 
 import { RequestContext } from '../../../api/common/request-context';
-import { InternalServerError, UserInputError } from '../../../common/index';
-import { ConfigService } from '../../../config/index';
-import { TransactionalConnection } from '../../../connection/index';
+import { InternalServerError, UserInputError } from '../../../common/error/errors';
+import { ConfigService } from '../../../config/config.service';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { Order } from '../../../entity/order/order.entity';
 import { OrderService } from '../../services/order.service';
 import { SessionService } from '../../services/session.service';

+ 1 - 1
packages/core/src/service/helpers/list-query-builder/connection-utils.ts

@@ -3,7 +3,7 @@ import { Connection } from 'typeorm';
 import { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata';
 
 import { Translation } from '../../../common/index';
-import { VendureEntity } from '../../../entity/index';
+import { VendureEntity } from '../../../entity/base/base.entity';
 
 /**
  * @description

+ 1 - 1
packages/core/src/service/helpers/list-query-builder/list-query-builder.ts

@@ -19,7 +19,7 @@ import { RequestContext } from '../../../api/common/request-context';
 import { UserInputError } from '../../../common/error/errors';
 import { ListQueryOptions, NullOptionals, SortParameter } from '../../../common/types/common-types';
 import { ConfigService } from '../../../config/config.service';
-import { CustomFields } from '../../../config/index';
+import { CustomFields } from '../../../config/custom-field/custom-field-types';
 import { Logger } from '../../../config/logger/vendure-logger';
 import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { VendureEntity } from '../../../entity/base/base.entity';

+ 1 - 1
packages/core/src/service/helpers/list-query-builder/parse-sort-params.spec.ts

@@ -4,7 +4,7 @@ import { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata';
 import { RelationMetadata } from 'typeorm/metadata/RelationMetadata';
 
 import { SortParameter } from '../../../common/types/common-types';
-import { CustomFieldConfig } from '../../../config/index';
+import { CustomFieldConfig } from '../../../config/custom-field/custom-field-types';
 import { ProductTranslation } from '../../../entity/product/product-translation.entity';
 import { Product } from '../../../entity/product/product.entity';
 import { I18nError } from '../../../i18n/i18n-error';

+ 1 - 1
packages/core/src/service/helpers/list-query-builder/parse-sort-params.ts

@@ -5,7 +5,7 @@ import { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata';
 
 import { UserInputError } from '../../../common/error/errors';
 import { NullOptionals, SortParameter } from '../../../common/types/common-types';
-import { CustomFieldConfig } from '../../../config/index';
+import { CustomFieldConfig } from '../../../config/custom-field/custom-field-types';
 import { VendureEntity } from '../../../entity/base/base.entity';
 
 import { escapeCalculatedColumnExpression, getColumnMetadata } from './connection-utils';

+ 8 - 33
packages/core/src/service/helpers/order-calculator/order-calculator.spec.ts

@@ -239,7 +239,7 @@ describe('OrderCalculator', () => {
             code: 'percentage_item_action',
             description: [{ languageCode: LanguageCode.en, value: '' }],
             args: { discount: { type: 'int' } },
-            async execute(ctx, orderItem, orderLine, args) {
+            async execute(ctx, orderLine, args) {
                 const unitPrice = ctx.channel.pricesIncludeTax
                     ? orderLine.unitPriceWithTax
                     : orderLine.unitPrice;
@@ -507,13 +507,7 @@ describe('OrderCalculator', () => {
 
                     // increase the quantity to 2, which will take the total over the minimum set by the
                     // condition.
-                    order.lines[0].items.push(
-                        new OrderItem({
-                            listPrice: 500,
-                            taxLines: [],
-                            adjustments: [],
-                        }),
-                    );
+                    order.lines[0].quantity = 2;
 
                     await orderCalculator.applyPriceAdjustments(ctx, order, [promotion], [order.lines[0]]);
 
@@ -545,14 +539,7 @@ describe('OrderCalculator', () => {
 
                     // increase the quantity to 2, which will take the total over the minimum set by the
                     // condition.
-                    order.lines[0].items.push(
-                        new OrderItem({
-                            listPrice: 500,
-                            listPriceIncludesTax: true,
-                            taxLines: [],
-                            adjustments: [],
-                        }),
-                    );
+                    order.lines[0].quantity = 2;
 
                     await orderCalculator.applyPriceAdjustments(ctx, order, [promotion], [order.lines[0]]);
 
@@ -866,7 +853,7 @@ describe('OrderCalculator', () => {
 
                 // increase the quantity to 3, which will trigger the first promotion and thus
                 // bring the order total below the threshold for the second promotion.
-                order.lines[0].items.push(new OrderItem({ listPrice: 500, taxLines: [], adjustments: [] }));
+                order.lines[0].quantity = 3;
 
                 await orderCalculator.applyPriceAdjustments(
                     ctx,
@@ -909,14 +896,7 @@ describe('OrderCalculator', () => {
                     assertOrderTotalsAddUp(order);
 
                     // increase the quantity to 3, which will trigger both promotions
-                    order.lines[0].items.push(
-                        new OrderItem({
-                            listPrice: 800,
-                            listPriceIncludesTax: false,
-                            taxLines: [],
-                            adjustments: [],
-                        }),
-                    );
+                    order.lines[0].quantity = 3;
 
                     await orderCalculator.applyPriceAdjustments(
                         ctx,
@@ -1054,8 +1034,8 @@ describe('OrderCalculator', () => {
                     code: 'percentage_item_action',
                     description: [{ languageCode: LanguageCode.en, value: '' }],
                     args: { discount: { type: 'int' } },
-                    async execute(ctx, orderItem, orderLine, args) {
-                        if (orderItem.listPrice === 1000) {
+                    async execute(ctx, orderLine, args) {
+                        if (orderLine.listPrice === 1000) {
                             const unitPrice = ctx.channel.pricesIncludeTax
                                 ? orderLine.unitPriceWithTax
                                 : orderLine.unitPrice;
@@ -1600,12 +1580,7 @@ function createTestModule() {
  */
 function assertOrderTotalsAddUp(order: Order) {
     for (const line of order.lines) {
-        const itemUnitPriceSum = summate(line.items, 'unitPrice');
-        expect(line.linePrice).toBe(itemUnitPriceSum);
-        const itemUnitPriceWithTaxSum = summate(line.items, 'unitPriceWithTax');
-        expect(line.linePriceWithTax).toBe(itemUnitPriceWithTaxSum);
-
-        const pricesIncludeTax = line.firstItem?.listPriceIncludesTax;
+        const pricesIncludeTax = line.listPriceIncludesTax;
 
         if (pricesIncludeTax) {
             const lineDiscountsAmountWithTaxSum = summate(line.discounts, 'amountWithTax');

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

@@ -36,7 +36,7 @@ import { ConfigService } from '../../../config/config.service';
 import { CustomFieldConfig } from '../../../config/custom-field/custom-field-types';
 import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { VendureEntity } from '../../../entity/base/base.entity';
-import { FulfillmentLine } from '../../../entity/index';
+import { FulfillmentLine } from '../../../entity/order-line-reference/fulfillment-line.entity';
 import { OrderModificationLine } from '../../../entity/order-line-reference/order-modification-line.entity';
 import { OrderLine } from '../../../entity/order-line/order-line.entity';
 import { OrderModification } from '../../../entity/order-modification/order-modification.entity';

+ 7 - 4
packages/core/src/service/helpers/order-splitter/order-splitter.ts

@@ -2,10 +2,13 @@ import { Injectable } from '@nestjs/common';
 import { OrderType } from '@vendure/common/lib/generated-types';
 import { pick } from '@vendure/common/lib/pick';
 
-import { RequestContext } from '../../../api/index';
-import { ConfigService } from '../../../config/index';
-import { TransactionalConnection } from '../../../connection/index';
-import { Channel, Order, OrderLine, ShippingLine } from '../../../entity/index';
+import { RequestContext } from '../../../api/common/request-context';
+import { ConfigService } from '../../../config/config.service';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
+import { Channel } from '../../../entity/channel/channel.entity';
+import { OrderLine } from '../../../entity/order-line/order-line.entity';
+import { Order } from '../../../entity/order/order.entity';
+import { ShippingLine } from '../../../entity/shipping-line/shipping-line.entity';
 import { ChannelService } from '../../services/channel.service';
 import { OrderService } from '../../services/order.service';
 

+ 2 - 2
packages/core/src/service/helpers/order-state-machine/order-state-machine.ts

@@ -8,8 +8,8 @@ import { StateMachineConfig, Transitions } from '../../../common/finite-state-ma
 import { validateTransitionDefinition } from '../../../common/finite-state-machine/validate-transition-definition';
 import { awaitPromiseOrObservable } from '../../../common/utils';
 import { ConfigService } from '../../../config/config.service';
-import { OrderProcess } from '../../../config/index';
-import { TransactionalConnection } from '../../../connection/index';
+import { OrderProcess } from '../../../config/order/order-process';
+import { TransactionalConnection } from '../../../connection/transactional-connection';
 import { Order } from '../../../entity/order/order.entity';
 
 import { OrderState, OrderTransitionData } from './order-state';

+ 1 - 1
packages/core/src/service/helpers/request-context/request-context.service.ts

@@ -11,7 +11,7 @@ import { idsAreEqual } from '../../../common/utils';
 import { ConfigService } from '../../../config/config.service';
 import { CachedSession, CachedSessionUser } from '../../../config/session-cache/session-cache-strategy';
 import { Channel } from '../../../entity/channel/channel.entity';
-import { User } from '../../../entity/index';
+import { User } from '../../../entity/user/user.entity';
 import { ChannelService } from '../../services/channel.service';
 import { getUserChannelsPermissions } from '../utils/get-user-channels-permissions';
 

+ 1 - 1
packages/core/src/service/helpers/utils/get-user-channels-permissions.ts

@@ -2,7 +2,7 @@ import { Permission } from '@vendure/common/lib/generated-types';
 import { ID } from '@vendure/common/lib/shared-types';
 import { unique } from '@vendure/common/lib/unique';
 
-import { Role } from '../../../entity/index';
+import { Role } from '../../../entity/role/role.entity';
 import { User } from '../../../entity/user/user.entity';
 
 export interface UserChannelPermissions {

+ 2 - 1
packages/core/src/service/helpers/utils/order-utils.ts

@@ -6,7 +6,8 @@ import { unique } from '@vendure/common/lib/unique';
 import { RequestContext } from '../../../api/index';
 import { EntityNotFoundError, idsAreEqual } from '../../../common/index';
 import { TransactionalConnection } from '../../../connection/index';
-import { FulfillmentLine, OrderLine } from '../../../entity/index';
+import { FulfillmentLine } from '../../../entity/order-line-reference/fulfillment-line.entity';
+import { OrderLine } from '../../../entity/order-line/order-line.entity';
 import { Order } from '../../../entity/order/order.entity';
 import { FulfillmentState } from '../fulfillment-state-machine/fulfillment-state';
 import { PaymentState } from '../payment-state-machine/payment-state';

+ 1 - 1
packages/core/src/service/services/administrator.service.ts

@@ -15,7 +15,7 @@ import { ConfigService } from '../../config';
 import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Administrator } from '../../entity/administrator/administrator.entity';
 import { NativeAuthenticationMethod } from '../../entity/authentication-method/native-authentication-method.entity';
-import { Role } from '../../entity/index';
+import { Role } from '../../entity/role/role.entity';
 import { User } from '../../entity/user/user.entity';
 import { EventBus } from '../../event-bus';
 import { AdministratorEvent } from '../../event-bus/events/administrator-event';

+ 1 - 1
packages/core/src/service/services/customer.service.ts

@@ -47,7 +47,7 @@ import { Channel } from '../../entity/channel/channel.entity';
 import { CustomerGroup } from '../../entity/customer-group/customer-group.entity';
 import { Customer } from '../../entity/customer/customer.entity';
 import { HistoryEntry } from '../../entity/history-entry/history-entry.entity';
-import { Order } from '../../entity/index';
+import { Order } from '../../entity/order/order.entity';
 import { User } from '../../entity/user/user.entity';
 import { EventBus } from '../../event-bus/event-bus';
 import { AccountRegistrationEvent } from '../../event-bus/events/account-registration-event';

+ 1 - 1
packages/core/src/service/services/facet.service.ts

@@ -20,9 +20,9 @@ import { Translated } from '../../common/types/locale-types';
 import { assertFound, idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
 import { TransactionalConnection } from '../../connection/transactional-connection';
+import { FacetValue } from '../../entity/facet-value/facet-value.entity';
 import { FacetTranslation } from '../../entity/facet/facet-translation.entity';
 import { Facet } from '../../entity/facet/facet.entity';
-import { FacetValue } from '../../entity/index';
 import { EventBus } from '../../event-bus';
 import { FacetEvent } from '../../event-bus/events/facet-event';
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';

+ 2 - 1
packages/core/src/service/services/fulfillment.service.ts

@@ -13,7 +13,8 @@ import {
 import { ConfigService } from '../../config/config.service';
 import { TransactionalConnection } from '../../connection/transactional-connection';
 import { Fulfillment } from '../../entity/fulfillment/fulfillment.entity';
-import { FulfillmentLine, OrderLine } from '../../entity/index';
+import { FulfillmentLine } from '../../entity/order-line-reference/fulfillment-line.entity';
+import { OrderLine } from '../../entity/order-line/order-line.entity';
 import { Order } from '../../entity/order/order.entity';
 import { EventBus } from '../../event-bus/event-bus';
 import { FulfillmentEvent } from '../../event-bus/events/fulfillment-event';

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

@@ -79,10 +79,12 @@ import { assertFound, idsAreEqual } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
 import { removeCustomFieldsWithEagerRelations } from '../../connection/remove-custom-fields-with-eager-relations';
 import { TransactionalConnection } from '../../connection/transactional-connection';
+import { Channel } from '../../entity/channel/channel.entity';
 import { Customer } from '../../entity/customer/customer.entity';
 import { Fulfillment } from '../../entity/fulfillment/fulfillment.entity';
 import { HistoryEntry } from '../../entity/history-entry/history-entry.entity';
-import { Channel, FulfillmentLine, RefundLine, Session } from '../../entity/index';
+import { FulfillmentLine } from '../../entity/order-line-reference/fulfillment-line.entity';
+import { RefundLine } from '../../entity/order-line-reference/refund-line.entity';
 import { OrderLine } from '../../entity/order-line/order-line.entity';
 import { OrderModification } from '../../entity/order-modification/order-modification.entity';
 import { Order } from '../../entity/order/order.entity';
@@ -90,6 +92,7 @@ import { Payment } from '../../entity/payment/payment.entity';
 import { ProductVariant } from '../../entity/product-variant/product-variant.entity';
 import { Promotion } from '../../entity/promotion/promotion.entity';
 import { Refund } from '../../entity/refund/refund.entity';
+import { Session } from '../../entity/session/session.entity';
 import { ShippingLine } from '../../entity/shipping-line/shipping-line.entity';
 import { Allocation } from '../../entity/stock-movement/allocation.entity';
 import { Surcharge } from '../../entity/surcharge/surcharge.entity';

+ 7 - 2
packages/core/src/service/services/payment.service.ts

@@ -12,10 +12,15 @@ import {
 import { IneligiblePaymentMethodError } from '../../common/error/generated-graphql-shop-errors';
 import { PaymentMetadata } from '../../common/types/common-types';
 import { idsAreEqual } from '../../common/utils';
-import { Logger, PaymentMethodHandler } from '../../config/index';
+import { Logger } from '../../config/logger/vendure-logger';
+import { PaymentMethodHandler } from '../../config/payment/payment-method-handler';
 import { TransactionalConnection } from '../../connection/transactional-connection';
-import { Fulfillment, FulfillmentLine, OrderLine, PaymentMethod, RefundLine } from '../../entity/index';
+import { Fulfillment } from '../../entity/fulfillment/fulfillment.entity';
+import { FulfillmentLine } from '../../entity/order-line-reference/fulfillment-line.entity';
+import { RefundLine } from '../../entity/order-line-reference/refund-line.entity';
+import { OrderLine } from '../../entity/order-line/order-line.entity';
 import { Order } from '../../entity/order/order.entity';
+import { PaymentMethod } from '../../entity/payment-method/payment-method.entity';
 import { Payment } from '../../entity/payment/payment.entity';
 import { Refund } from '../../entity/refund/refund.entity';
 import { EventBus } from '../../event-bus/event-bus';

+ 3 - 2
packages/core/src/service/services/product-option-group.service.ts

@@ -11,11 +11,12 @@ import { RequestContext } from '../../api/common/request-context';
 import { RelationPaths } from '../../api/index';
 import { Translated } from '../../common/types/locale-types';
 import { assertFound, idsAreEqual } from '../../common/utils';
-import { Logger } from '../../config/index';
+import { Logger } from '../../config/logger/vendure-logger';
 import { TransactionalConnection } from '../../connection/transactional-connection';
-import { Product, ProductOption, ProductOptionTranslation, ProductVariant } from '../../entity/index';
 import { ProductOptionGroupTranslation } from '../../entity/product-option-group/product-option-group-translation.entity';
 import { ProductOptionGroup } from '../../entity/product-option-group/product-option-group.entity';
+import { ProductVariant } from '../../entity/product-variant/product-variant.entity';
+import { Product } from '../../entity/product/product.entity';
 import { EventBus } from '../../event-bus';
 import { ProductOptionGroupEvent } from '../../event-bus/events/product-option-group-event';
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';

+ 2 - 2
packages/core/src/service/services/product-option.service.ts

@@ -11,12 +11,12 @@ import { ID } from '@vendure/common/lib/shared-types';
 import { RequestContext } from '../../api/common/request-context';
 import { Translated } from '../../common/types/locale-types';
 import { assertFound } from '../../common/utils';
-import { Logger } from '../../config/index';
+import { Logger } from '../../config/logger/vendure-logger';
 import { TransactionalConnection } from '../../connection/transactional-connection';
-import { ProductVariant } from '../../entity/index';
 import { ProductOptionGroup } from '../../entity/product-option-group/product-option-group.entity';
 import { ProductOptionTranslation } from '../../entity/product-option/product-option-translation.entity';
 import { ProductOption } from '../../entity/product-option/product-option.entity';
+import { ProductVariant } from '../../entity/product-variant/product-variant.entity';
 import { EventBus } from '../../event-bus';
 import { ProductOptionEvent } from '../../event-bus/events/product-option-event';
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';

+ 3 - 3
packages/core/src/service/services/tax-rate.service.ts

@@ -8,12 +8,12 @@ import {
 import { ID, PaginatedList } from '@vendure/common/lib/shared-types';
 
 import { RequestContext } from '../../api/common/request-context';
-import { RelationPaths } from '../../api/index';
+import { RelationPaths } from '../../api/decorators/relations.decorator';
 import { EntityNotFoundError } from '../../common/error/errors';
-import { createSelfRefreshingCache, SelfRefreshingCache } from '../../common/index';
+import { createSelfRefreshingCache, SelfRefreshingCache } from '../../common/self-refreshing-cache';
 import { ListQueryOptions } from '../../common/types/common-types';
 import { assertFound } from '../../common/utils';
-import { ConfigService } from '../../config/index';
+import { ConfigService } from '../../config/config.service';
 import { TransactionalConnection } from '../../connection/transactional-connection';
 import { CustomerGroup } from '../../entity/customer-group/customer-group.entity';
 import { TaxCategory } from '../../entity/tax-category/tax-category.entity';

+ 1 - 0
packages/core/src/testing/order-test-utils.ts

@@ -144,6 +144,7 @@ export function createOrder(
             new OrderLine({
                 taxCategory,
                 quantity,
+                orderPlacedQuantity: 0,
                 listPrice,
                 listPriceIncludesTax: orderConfig.ctx.channel.pricesIncludeTax,
                 taxLines: [],