Browse Source

feat(core): Pass RequestContext to PriceCalculationStrategy

Closes #487

BREAKING CHANGE: The `PriceCalculationStrategy.calculateUnitPrice()` function
signature has changed: the first argument is now the RequestContext of the current request.
Michael Bromley 5 years ago
parent
commit
8a5832592d

+ 2 - 1
packages/core/e2e/fixtures/test-price-calculation-strategy.ts

@@ -1,10 +1,11 @@
-import { CalculatedPrice, PriceCalculationStrategy, ProductVariant } from '@vendure/core';
+import { CalculatedPrice, PriceCalculationStrategy, ProductVariant, RequestContext } from '@vendure/core';
 
 /**
  * Adds $5 for items with gift wrapping.
  */
 export class TestPriceCalculationStrategy implements PriceCalculationStrategy {
     calculateUnitPrice(
+        ctx: RequestContext,
         productVariant: ProductVariant,
         orderLineCustomFields: { [p: string]: any },
     ): CalculatedPrice | Promise<CalculatedPrice> {

+ 5 - 1
packages/core/src/config/order/default-price-calculation-strategy.ts

@@ -1,3 +1,4 @@
+import { RequestContext } from '../../api/common/request-context';
 import { ProductVariant } from '../../entity/product-variant/product-variant.entity';
 
 import { CalculatedPrice, PriceCalculationStrategy } from './price-calculation-strategy';
@@ -10,7 +11,10 @@ import { CalculatedPrice, PriceCalculationStrategy } from './price-calculation-s
  * @docsCategory orders
  */
 export class DefaultPriceCalculationStrategy implements PriceCalculationStrategy {
-    calculateUnitPrice(productVariant: ProductVariant): CalculatedPrice | Promise<CalculatedPrice> {
+    calculateUnitPrice(
+        ctx: RequestContext,
+        productVariant: ProductVariant,
+    ): CalculatedPrice | Promise<CalculatedPrice> {
         return productVariant;
     }
 }

+ 2 - 0
packages/core/src/config/order/price-calculation-strategy.ts

@@ -1,3 +1,4 @@
+import { RequestContext } from '../../api/common/request-context';
 import { InjectableStrategy } from '../../common/types/injectable-strategy';
 import { ProductVariant } from '../../entity/product-variant/product-variant.entity';
 
@@ -54,6 +55,7 @@ export interface PriceCalculationStrategy extends InjectableStrategy {
      * the price for a single unit.
      */
     calculateUnitPrice(
+        ctx: RequestContext,
         productVariant: ProductVariant,
         orderLineCustomFields: { [key: string]: any },
     ): CalculatedPrice | Promise<CalculatedPrice>;

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

@@ -378,6 +378,7 @@ export class OrderService {
                 }
                 const productVariant = orderLine.productVariant;
                 const calculatedPrice = await priceCalculationStrategy.calculateUnitPrice(
+                    ctx,
                     productVariant,
                     orderLine.customFields || {},
                 );