@unchainedshop/core-orders 3.0.0-alpha2 → 3.0.0-alpha4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/lib/db/OrderDeliveriesCollection.d.ts +1 -1
  2. package/lib/db/OrderDeliveriesCollection.d.ts.map +1 -1
  3. package/lib/db/OrderDiscountsCollection.d.ts +1 -1
  4. package/lib/db/OrderDiscountsCollection.d.ts.map +1 -1
  5. package/lib/db/OrderPaymentsCollection.d.ts +1 -1
  6. package/lib/db/OrderPaymentsCollection.d.ts.map +1 -1
  7. package/lib/db/OrderPositionsCollection.d.ts +1 -1
  8. package/lib/db/OrderPositionsCollection.d.ts.map +1 -1
  9. package/lib/db/OrdersCollection.d.ts +1 -1
  10. package/lib/db/OrdersCollection.d.ts.map +1 -1
  11. package/lib/director/OrderDiscountAdapter.d.ts +1 -1
  12. package/lib/director/OrderDiscountAdapter.d.ts.map +1 -1
  13. package/lib/director/OrderDiscountAdapter.js.map +1 -1
  14. package/lib/director/OrderDiscountDirector.d.ts +1 -1
  15. package/lib/director/OrderDiscountDirector.d.ts.map +1 -1
  16. package/lib/director/OrderPricingAdapter.d.ts +20 -2
  17. package/lib/director/OrderPricingAdapter.d.ts.map +1 -1
  18. package/lib/director/OrderPricingAdapter.js.map +1 -1
  19. package/lib/director/OrderPricingDirector.d.ts +16 -1
  20. package/lib/director/OrderPricingDirector.d.ts.map +1 -1
  21. package/lib/director/OrderPricingDirector.js.map +1 -1
  22. package/lib/director/OrderPricingSheet.d.ts +34 -2
  23. package/lib/director/OrderPricingSheet.d.ts.map +1 -1
  24. package/lib/director/OrderPricingSheet.js +9 -2
  25. package/lib/director/OrderPricingSheet.js.map +1 -1
  26. package/lib/module/configureOrderDeliveriesModule.d.ts +31 -1
  27. package/lib/module/configureOrderDeliveriesModule.d.ts.map +1 -1
  28. package/lib/module/configureOrderDeliveriesModule.js +15 -9
  29. package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
  30. package/lib/module/configureOrderDiscountsModule.d.ts +21 -1
  31. package/lib/module/configureOrderDiscountsModule.d.ts.map +1 -1
  32. package/lib/module/configureOrderDiscountsModule.js +19 -15
  33. package/lib/module/configureOrderDiscountsModule.js.map +1 -1
  34. package/lib/module/configureOrderPaymentsModule.d.ts +45 -1
  35. package/lib/module/configureOrderPaymentsModule.d.ts.map +1 -1
  36. package/lib/module/configureOrderPaymentsModule.js +5 -8
  37. package/lib/module/configureOrderPaymentsModule.js.map +1 -1
  38. package/lib/module/configureOrderPositionsModule.d.ts +57 -1
  39. package/lib/module/configureOrderPositionsModule.d.ts.map +1 -1
  40. package/lib/module/configureOrderPositionsModule.js.map +1 -1
  41. package/lib/module/configureOrdersModule-mutations.d.ts +31 -5
  42. package/lib/module/configureOrdersModule-mutations.d.ts.map +1 -1
  43. package/lib/module/configureOrdersModule-mutations.js +5 -9
  44. package/lib/module/configureOrdersModule-mutations.js.map +1 -1
  45. package/lib/module/configureOrdersModule-processing.d.ts +22 -4
  46. package/lib/module/configureOrdersModule-processing.d.ts.map +1 -1
  47. package/lib/module/configureOrdersModule-processing.js +15 -20
  48. package/lib/module/configureOrdersModule-processing.js.map +1 -1
  49. package/lib/module/configureOrdersModule-queries.d.ts +23 -3
  50. package/lib/module/configureOrdersModule-queries.d.ts.map +1 -1
  51. package/lib/module/configureOrdersModule-queries.js +89 -5
  52. package/lib/module/configureOrdersModule-queries.js.map +1 -1
  53. package/lib/module/configureOrdersModule-transformations.d.ts +15 -1
  54. package/lib/module/configureOrdersModule-transformations.d.ts.map +1 -1
  55. package/lib/module/configureOrdersModule-transformations.js +4 -5
  56. package/lib/module/configureOrdersModule-transformations.js.map +1 -1
  57. package/lib/module/configureOrdersModule.d.ts +21 -2
  58. package/lib/module/configureOrdersModule.d.ts.map +1 -1
  59. package/lib/module/configureOrdersModule.js +2 -2
  60. package/lib/module/configureOrdersModule.js.map +1 -1
  61. package/lib/orders-index.d.ts +10 -12
  62. package/lib/orders-index.d.ts.map +1 -1
  63. package/lib/orders-index.js +10 -11
  64. package/lib/orders-index.js.map +1 -1
  65. package/lib/orders-settings.d.ts +18 -1
  66. package/lib/orders-settings.d.ts.map +1 -1
  67. package/lib/orders-settings.js.map +1 -1
  68. package/lib/service/migrateOrderCartService.d.ts +8 -1
  69. package/lib/service/migrateOrderCartService.d.ts.map +1 -1
  70. package/lib/service/migrateOrderCartService.js.map +1 -1
  71. package/lib/service/nextUserCartService.d.ts +9 -1
  72. package/lib/service/nextUserCartService.d.ts.map +1 -1
  73. package/lib/service/nextUserCartService.js.map +1 -1
  74. package/lib/service/orderServices.d.ts +6 -1
  75. package/lib/service/orderServices.d.ts.map +1 -1
  76. package/lib/service/orderServices.js.map +1 -1
  77. package/lib/types.d.ts +116 -0
  78. package/lib/types.d.ts.map +1 -0
  79. package/lib/types.js +25 -0
  80. package/lib/types.js.map +1 -0
  81. package/package.json +7 -9
  82. package/src/db/OrderDeliveriesCollection.ts +1 -1
  83. package/src/db/OrderDiscountsCollection.ts +1 -1
  84. package/src/db/OrderPaymentsCollection.ts +1 -1
  85. package/src/db/OrderPositionsCollection.ts +1 -1
  86. package/src/db/OrdersCollection.ts +1 -1
  87. package/src/director/OrderDiscountAdapter.ts +1 -1
  88. package/src/director/OrderPricingAdapter.ts +26 -6
  89. package/src/director/OrderPricingDirector.ts +21 -5
  90. package/src/director/OrderPricingSheet.ts +25 -6
  91. package/src/module/buildFindSelector.test.ts +77 -72
  92. package/src/module/configureOrderDeliveriesModule.ts +81 -15
  93. package/src/module/configureOrderDiscountsModule.ts +70 -19
  94. package/src/module/configureOrderPaymentsModule.ts +93 -14
  95. package/src/module/configureOrderPositionsModule.ts +72 -1
  96. package/src/module/configureOrdersModule-mutations.ts +47 -14
  97. package/src/module/configureOrdersModule-processing.ts +53 -26
  98. package/src/module/configureOrdersModule-queries.ts +121 -13
  99. package/src/module/configureOrdersModule-transformations.ts +28 -6
  100. package/src/module/configureOrdersModule.ts +36 -15
  101. package/src/orders-index.ts +12 -16
  102. package/src/orders-settings.ts +20 -1
  103. package/src/service/migrateOrderCartService.ts +12 -1
  104. package/src/service/nextUserCartService.ts +13 -1
  105. package/src/service/orderServices.ts +7 -3
  106. package/src/types.ts +129 -0
  107. package/lib/db/OrderDeliveriesSchema.d.ts +0 -3
  108. package/lib/db/OrderDeliveriesSchema.d.ts.map +0 -1
  109. package/lib/db/OrderDeliveriesSchema.js +0 -20
  110. package/lib/db/OrderDeliveriesSchema.js.map +0 -1
  111. package/lib/db/OrderDiscountsSchema.d.ts +0 -3
  112. package/lib/db/OrderDiscountsSchema.d.ts.map +0 -1
  113. package/lib/db/OrderDiscountsSchema.js +0 -12
  114. package/lib/db/OrderDiscountsSchema.js.map +0 -1
  115. package/lib/db/OrderPaymentsSchema.d.ts +0 -3
  116. package/lib/db/OrderPaymentsSchema.d.ts.map +0 -1
  117. package/lib/db/OrderPaymentsSchema.js +0 -20
  118. package/lib/db/OrderPaymentsSchema.js.map +0 -1
  119. package/lib/db/OrderPositionsSchema.d.ts +0 -3
  120. package/lib/db/OrderPositionsSchema.d.ts.map +0 -1
  121. package/lib/db/OrderPositionsSchema.js +0 -37
  122. package/lib/db/OrderPositionsSchema.js.map +0 -1
  123. package/lib/db/OrdersSchema.d.ts +0 -3
  124. package/lib/db/OrdersSchema.d.ts.map +0 -1
  125. package/lib/db/OrdersSchema.js +0 -30
  126. package/lib/db/OrdersSchema.js.map +0 -1
  127. package/src/db/OrderDeliveriesSchema.ts +0 -24
  128. package/src/db/OrderDiscountsSchema.ts +0 -15
  129. package/src/db/OrderPaymentsSchema.ts +0 -24
  130. package/src/db/OrderPositionsSchema.ts +0 -41
  131. package/src/db/OrdersSchema.ts +0 -34
package/lib/types.js ADDED
@@ -0,0 +1,25 @@
1
+ export var OrderStatus;
2
+ (function (OrderStatus) {
3
+ OrderStatus["PENDING"] = "PENDING";
4
+ OrderStatus["CONFIRMED"] = "CONFIRMED";
5
+ OrderStatus["FULLFILLED"] = "FULLFILLED";
6
+ OrderStatus["REJECTED"] = "REJECTED";
7
+ })(OrderStatus || (OrderStatus = {}));
8
+ export var OrderDiscountTrigger;
9
+ (function (OrderDiscountTrigger) {
10
+ OrderDiscountTrigger["USER"] = "USER";
11
+ OrderDiscountTrigger["SYSTEM"] = "SYSTEM";
12
+ })(OrderDiscountTrigger || (OrderDiscountTrigger = {}));
13
+ export var OrderDeliveryStatus;
14
+ (function (OrderDeliveryStatus) {
15
+ OrderDeliveryStatus["OPEN"] = "OPEN";
16
+ OrderDeliveryStatus["DELIVERED"] = "DELIVERED";
17
+ OrderDeliveryStatus["RETURNED"] = "RETURNED";
18
+ })(OrderDeliveryStatus || (OrderDeliveryStatus = {}));
19
+ export var OrderPaymentStatus;
20
+ (function (OrderPaymentStatus) {
21
+ OrderPaymentStatus["OPEN"] = "OPEN";
22
+ OrderPaymentStatus["PAID"] = "PAID";
23
+ OrderPaymentStatus["REFUNDED"] = "REFUNDED";
24
+ })(OrderPaymentStatus || (OrderPaymentStatus = {}));
25
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAYA,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,kCAAmB,CAAA;IACnB,sCAAuB,CAAA;IACvB,wCAAyB,CAAA;IACzB,oCAAqB,CAAA;AACvB,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB;AAoCD,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,qCAAa,CAAA;IACb,yCAAiB,CAAA;AACnB,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAqBD,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,oCAAa,CAAA;IACb,8CAAuB,CAAA;IACvB,4CAAqB,CAAA;AACvB,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED,MAAM,CAAN,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC5B,mCAAa,CAAA;IACb,mCAAa,CAAA;IACb,2CAAqB,CAAA;AACvB,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,QAI7B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/core-orders",
3
- "version": "3.0.0-alpha2",
3
+ "version": "3.0.0-alpha4",
4
4
  "main": "lib/orders-index.js",
5
5
  "exports": {
6
6
  ".": "./lib/orders-index.js",
@@ -32,16 +32,14 @@
32
32
  "homepage": "https://github.com/unchainedshop/unchained#readme",
33
33
  "dependencies": {
34
34
  "@kontsedal/locco": "0.1.0",
35
- "@unchainedshop/events": "^3.0.0-alpha2",
36
- "@unchainedshop/logger": "^3.0.0-alpha2",
37
- "@unchainedshop/utils": "^3.0.0-alpha2",
38
- "simpl-schema": "^3.4.6"
35
+ "@unchainedshop/events": "^3.0.0-alpha4",
36
+ "@unchainedshop/logger": "^3.0.0-alpha4",
37
+ "@unchainedshop/utils": "^3.0.0-alpha4"
39
38
  },
40
39
  "devDependencies": {
41
- "@types/node": "^20.14.12",
42
- "@unchainedshop/types": "^3.0.0-alpha2",
40
+ "@types/node": "^22.7.8",
43
41
  "jest": "^29.7.0",
44
- "ts-jest": "^29.2.3",
45
- "typescript": "^5.5.4"
42
+ "ts-jest": "^29.2.5",
43
+ "typescript": "^5.6.3"
46
44
  }
47
45
  }
@@ -1,5 +1,5 @@
1
1
  import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { OrderDelivery } from '@unchainedshop/types/orders.deliveries.js';
2
+ import { OrderDelivery } from '@unchainedshop/core-orders';
3
3
 
4
4
  export const OrderDeliveriesCollection = async (db: mongodb.Db) => {
5
5
  const OrderDeliveries = db.collection<OrderDelivery>('order_deliveries');
@@ -1,5 +1,5 @@
1
1
  import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { OrderDiscount } from '@unchainedshop/types/orders.discounts.js';
2
+ import { OrderDiscount } from '@unchainedshop/core-orders';
3
3
 
4
4
  export const OrderDiscountsCollection = async (db: mongodb.Db) => {
5
5
  const OrderDiscounts = db.collection<OrderDiscount>('order_discounts');
@@ -1,5 +1,5 @@
1
1
  import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { OrderPayment } from '@unchainedshop/types/orders.payments.js';
2
+ import { OrderPayment } from '@unchainedshop/core-orders';
3
3
 
4
4
  export const OrderPaymentsCollection = async (db: mongodb.Db) => {
5
5
  const OrderPayments = db.collection<OrderPayment>('order_payments');
@@ -1,5 +1,5 @@
1
1
  import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { OrderPosition } from '@unchainedshop/types/orders.positions.js';
2
+ import { OrderPosition } from '@unchainedshop/core-orders';
3
3
 
4
4
  export const OrderPositionsCollection = async (db: mongodb.Db) => {
5
5
  const OrderPositions = db.collection<OrderPosition>('order_positions');
@@ -1,5 +1,5 @@
1
1
  import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { Order } from '@unchainedshop/types/orders.js';
2
+ import { Order } from '../types.js';
3
3
 
4
4
  export const OrdersCollection = async (db: mongodb.Db) => {
5
5
  const Orders = db.collection<Order>('orders');
@@ -1,6 +1,6 @@
1
- import { IDiscountAdapter } from '@unchainedshop/types/discount.js';
2
1
  import { BaseDiscountAdapter } from '@unchainedshop/utils';
3
2
  import { OrderDiscountConfiguration } from './OrderDiscountConfiguration.js';
3
+ import { IDiscountAdapter } from '@unchainedshop/utils';
4
4
 
5
5
  export const OrderDiscountAdapter: Omit<
6
6
  IDiscountAdapter<OrderDiscountConfiguration>,
@@ -1,11 +1,31 @@
1
- import {
2
- IOrderPricingSheet,
1
+ import { BasePricingAdapter, IPricingAdapter, BasePricingAdapterContext } from '@unchainedshop/utils';
2
+ import { IOrderPricingSheet, OrderPricingCalculation, OrderPricingSheet } from './OrderPricingSheet.js';
3
+ import { Order, OrderDelivery, OrderDiscount, OrderPayment, OrderPosition } from '../types.js';
4
+ import { User } from '@unchainedshop/core-users';
5
+
6
+ export interface OrderPricingAdapterContext extends BasePricingAdapterContext {
7
+ currency?: string;
8
+ discounts: Array<OrderDiscount>;
9
+ order: Order;
10
+ orderDelivery: OrderDelivery;
11
+ orderPositions: Array<OrderPosition>;
12
+ orderPayment: OrderPayment;
13
+ user: User;
14
+ }
15
+
16
+ export interface OrderPricingContext {
17
+ order: Order;
18
+ orderDelivery: OrderDelivery;
19
+ orderPositions: Array<OrderPosition>;
20
+ orderPayment: OrderPayment;
21
+ }
22
+
23
+ export type IOrderPricingAdapter<DiscountConfiguration = unknown> = IPricingAdapter<
3
24
  OrderPricingAdapterContext,
4
25
  OrderPricingCalculation,
5
- } from '@unchainedshop/types/orders.pricing.js';
6
- import { IPricingAdapter } from '@unchainedshop/types/pricing.js';
7
- import { BasePricingAdapter } from '@unchainedshop/utils';
8
- import { OrderPricingSheet } from './OrderPricingSheet.js';
26
+ IOrderPricingSheet,
27
+ DiscountConfiguration
28
+ >;
9
29
 
10
30
  const basePricingAdapter = BasePricingAdapter<OrderPricingAdapterContext, OrderPricingCalculation>();
11
31
 
@@ -1,12 +1,28 @@
1
+ import { BasePricingDirector, PricingDiscount, IPricingDirector } from '@unchainedshop/utils';
2
+ import { IOrderPricingSheet, OrderPricingCalculation, OrderPricingSheet } from './OrderPricingSheet.js';
3
+ import { Order, OrderDelivery, OrderPayment, OrderPosition } from '../types.js';
1
4
  import {
2
5
  IOrderPricingAdapter,
3
- IOrderPricingDirector,
4
6
  OrderPricingAdapterContext,
5
- OrderPricingCalculation,
6
7
  OrderPricingContext,
7
- } from '@unchainedshop/types/orders.pricing.js';
8
- import { BasePricingDirector } from '@unchainedshop/utils';
9
- import { OrderPricingSheet } from './OrderPricingSheet.js';
8
+ } from './OrderPricingAdapter.js';
9
+
10
+ export type OrderPrice = { _id?: string; amount: number; currency: string };
11
+
12
+ export type OrderPricingDiscount = PricingDiscount & {
13
+ delivery?: OrderDelivery;
14
+ item?: OrderPosition;
15
+ order?: Order;
16
+ payment?: OrderPayment;
17
+ };
18
+
19
+ export type IOrderPricingDirector<DiscountConfiguration = unknown> = IPricingDirector<
20
+ OrderPricingContext,
21
+ OrderPricingCalculation,
22
+ OrderPricingAdapterContext,
23
+ IOrderPricingSheet,
24
+ IOrderPricingAdapter<DiscountConfiguration>
25
+ >;
10
26
 
11
27
  const baseDirector = BasePricingDirector<
12
28
  OrderPricingContext,
@@ -1,10 +1,29 @@
1
- import { BasePricingSheet } from '@unchainedshop/utils';
2
1
  import {
3
- OrderPricingCalculation,
4
- OrderPricingRowCategory,
5
- IOrderPricingSheet,
6
- } from '@unchainedshop/types/orders.pricing.js';
7
- import { IBasePricingSheet, PricingSheetParams } from '@unchainedshop/types/pricing.js';
2
+ BasePricingSheet,
3
+ IPricingSheet,
4
+ IBasePricingSheet,
5
+ PricingCalculation,
6
+ PricingSheetParams,
7
+ } from '@unchainedshop/utils';
8
+
9
+ export interface OrderPricingCalculation extends PricingCalculation {
10
+ discountId?: string;
11
+ }
12
+
13
+ export enum OrderPricingRowCategory {
14
+ Items = 'ITEMS',
15
+ Discounts = 'DISCOUNTS',
16
+ Taxes = 'TAXES',
17
+ Delivery = 'DELIVERY',
18
+ Payment = 'PAYMENT',
19
+ }
20
+
21
+ export interface IOrderPricingSheet extends IPricingSheet<OrderPricingCalculation> {
22
+ addDelivery: (params: { amount: number; taxAmount: number; meta?: any }) => void;
23
+ addDiscount: (params: { amount: number; taxAmount: number; discountId: string; meta?: any }) => void;
24
+ addItems: (params: { amount: number; taxAmount: number; meta?: any }) => void;
25
+ addPayment: (params: { amount: number; taxAmount: number; meta?: any }) => void;
26
+ }
8
27
 
9
28
  export const OrderPricingSheet = (
10
29
  params: PricingSheetParams<OrderPricingCalculation>,
@@ -1,105 +1,110 @@
1
- import {buildFindByIdSelector as buildFindByIdSelectorForDelivery} from "./configureOrderDeliveriesModule.js"
2
- import {buildFindByIdSelector as buildFindByIdSelectorForDiscount } from "./configureOrderDiscountsModule.js"
3
- import {buildFindByIdSelector as buildFindByIdSelectorForPayment, buildFindByContextDataSelector } from "./configureOrderPaymentsModule.js"
4
- import {buildFindByIdSelector as buildFindByIdSelectorForPosition } from "./configureOrderPositionsModule.js"
5
- import {buildFindSelector as buildFindSelectorForOrder} from "./configureOrdersModule-queries.js"
6
-
1
+ import { OrderStatus } from '../types.js';
2
+ import { buildFindByIdSelector as buildFindByIdSelectorForDelivery } from './configureOrderDeliveriesModule.js';
3
+ import { buildFindByIdSelector as buildFindByIdSelectorForDiscount } from './configureOrderDiscountsModule.js';
4
+ import {
5
+ buildFindByIdSelector as buildFindByIdSelectorForPayment,
6
+ buildFindByContextDataSelector,
7
+ } from './configureOrderPaymentsModule.js';
8
+ import { buildFindByIdSelector as buildFindByIdSelectorForPosition } from './configureOrderPositionsModule.js';
9
+ import { buildFindSelector as buildFindSelectorForOrder } from './configureOrdersModule-queries.js';
7
10
 
8
11
  describe('OrderPosition', () => {
9
- describe('buildFindSelector', () => {
10
- it('Return filter object when passed no argument', async () => {
11
- expect(buildFindSelectorForOrder({})).toEqual({ status: { '$ne': null } })
12
-
12
+ describe('buildFindSelector', () => {
13
+ it('Return filter object when passed no argument', () => {
14
+ expect(buildFindSelectorForOrder({})).toEqual({ status: { $ne: null } });
13
15
  });
14
16
 
15
- it('Return filter object when passed no argument includeCarts, queryString, status, userId and (status should take precedence over includeCarts', async () => {
16
- expect(buildFindSelectorForOrder({includeCarts: false, queryString: "hello world", status: 'CONFIRMED', userId: "admin-id"})).toEqual({
17
+ it('Return filter object when passed no argument includeCarts, queryString, status, userId and (status should take precedence over includeCarts', () => {
18
+ expect(
19
+ buildFindSelectorForOrder({
20
+ includeCarts: false,
21
+ queryString: 'hello world',
22
+ status: [OrderStatus.CONFIRMED],
23
+ userId: 'admin-id',
24
+ }),
25
+ ).toEqual({
17
26
  userId: 'admin-id',
18
- status: 'CONFIRMED',
19
- '$text': { '$search': 'hello world' }
20
- }
21
- )
22
-
27
+ status: {
28
+ $in: ['CONFIRMED'],
29
+ },
30
+ $text: { $search: 'hello world' },
31
+ });
23
32
  });
24
33
 
25
- it('Return filter object when passed no argument includeCarts, queryString, userId ', async () => {
26
- expect(buildFindSelectorForOrder({includeCarts: true, queryString: "hello world", userId: "admin-id"})).toEqual( {
34
+ it('Return filter object when passed no argument includeCarts, queryString, userId ', () => {
35
+ expect(
36
+ buildFindSelectorForOrder({
37
+ includeCarts: true,
38
+ queryString: 'hello world',
39
+ userId: 'admin-id',
40
+ }),
41
+ ).toEqual({
27
42
  userId: 'admin-id',
28
-
29
- '$text': { '$search': 'hello world' }
30
- }
31
- )
32
-
43
+
44
+ $text: { $search: 'hello world' },
45
+ });
33
46
  });
34
47
 
35
- it('Return filter object when passed no argument queryString, userId ', async () => {
36
- expect(buildFindSelectorForOrder({ queryString: "hello world", userId: "admin-id"})).toEqual( {
48
+ it('Return filter object when passed no argument queryString, userId ', () => {
49
+ expect(buildFindSelectorForOrder({ queryString: 'hello world', userId: 'admin-id' })).toEqual({
37
50
  userId: 'admin-id',
38
- '$text': { '$search': 'hello world' },
39
- status: { '$ne': null },
40
- }
41
- )
42
-
51
+ $text: { $search: 'hello world' },
52
+ status: { $ne: null },
53
+ });
43
54
  });
44
55
 
45
- it('Return filter object when passed no argument queryString ', async () => {
46
- expect(buildFindSelectorForOrder({ queryString: "hello world"})).toEqual( {
47
- '$text': { '$search': 'hello world' },
48
- status: { '$ne': null },
49
- })
50
-
56
+ it('Return filter object when passed no argument queryString ', () => {
57
+ expect(buildFindSelectorForOrder({ queryString: 'hello world' })).toEqual({
58
+ $text: { $search: 'hello world' },
59
+ status: { $ne: null },
60
+ });
51
61
  });
52
-
53
- })
54
-
62
+ });
55
63
  });
56
64
 
57
65
  describe('OrderDelivery', () => {
58
-
59
- describe('buildFindByIdSelector', () => {
60
- it('Return correct db _id selector', async () => {
61
-
62
- expect(buildFindByIdSelectorForDelivery('order-delivery-id')).toEqual({ _id: 'order-delivery-id' })
66
+ describe('buildFindByIdSelector', () => {
67
+ it('Return correct db _id selector', () => {
68
+ expect(buildFindByIdSelectorForDelivery('order-delivery-id')).toEqual({
69
+ _id: 'order-delivery-id',
70
+ });
63
71
  });
64
- })
65
-
72
+ });
66
73
  });
67
74
 
68
-
69
75
  describe('OrderDiscount', () => {
70
-
71
- describe('buildFindByIdSelector', () => {
72
- it('Return correct db _id selector', async () => {
73
-
74
- expect(buildFindByIdSelectorForDiscount('order-discount-id')).toEqual({ _id: 'order-discount-id' })
76
+ describe('buildFindByIdSelector', () => {
77
+ it('Return correct db _id selector', () => {
78
+ expect(buildFindByIdSelectorForDiscount('order-discount-id')).toEqual({
79
+ _id: 'order-discount-id',
80
+ });
75
81
  });
76
- })
77
-
82
+ });
78
83
  });
79
84
 
80
85
  describe('OrderPayment', () => {
81
-
82
- describe('buildFindByIdSelector', () => {
83
- it('Return correct db _id selector', async () => {
84
-
85
- expect(buildFindByIdSelectorForPayment('order-payment-id')).toEqual({ _id: 'order-payment-id' })
86
+ describe('buildFindByIdSelector', () => {
87
+ it('Return correct db _id selector', () => {
88
+ expect(buildFindByIdSelectorForPayment('order-payment-id')).toEqual({ _id: 'order-payment-id' });
86
89
  });
87
- })
90
+ });
88
91
 
89
- describe('buildFindByContextDataSelector', () => {
90
- it('Return correct db context field selector object', async () => {
91
- expect(buildFindByContextDataSelector({'first': 'first value', 'second': 'second value'})).toEqual({ 'context.first': 'first value', 'context.second': 'second value' })
92
+ describe('buildFindByContextDataSelector', () => {
93
+ it('Return correct db context field selector object', () => {
94
+ expect(buildFindByContextDataSelector({ first: 'first value', second: 'second value' })).toEqual({
95
+ 'context.first': 'first value',
96
+ 'context.second': 'second value',
92
97
  });
93
- })
94
-
98
+ });
99
+ });
95
100
  });
96
101
 
97
-
98
102
  describe('OrderPosition', () => {
99
- describe('buildFindByIdSelector', () => {
100
- it('Return correct db _id selector', async () => {
101
- expect(buildFindByIdSelectorForPosition('order-position-id')).toEqual({ _id: 'order-position-id' })
103
+ describe('buildFindByIdSelector', () => {
104
+ it('Return correct db _id selector', () => {
105
+ expect(buildFindByIdSelectorForPosition('order-position-id')).toEqual({
106
+ _id: 'order-position-id',
107
+ });
102
108
  });
103
- })
104
-
109
+ });
105
110
  });
@@ -1,12 +1,65 @@
1
- import { ModuleMutations } from '@unchainedshop/types/core.js';
2
- import { mongodb, generateDbFilterById, generateDbMutations } from '@unchainedshop/mongodb';
3
- import {
4
- OrderDeliveriesModule,
5
- OrderDelivery,
6
- OrderDeliveryStatus,
7
- } from '@unchainedshop/types/orders.deliveries.js';
1
+ import { UnchainedCore } from '@unchainedshop/core';
2
+ import { mongodb, generateDbFilterById, generateDbObjectId } from '@unchainedshop/mongodb';
8
3
  import { emit, registerEvents } from '@unchainedshop/events';
9
- import { OrderDeliveriesSchema } from '../db/OrderDeliveriesSchema.js';
4
+ import { Order, OrderDelivery, OrderDeliveryStatus, OrderDiscount } from '../types.js';
5
+ import { DeliveryLocation, IDeliveryPricingSheet } from '@unchainedshop/core-delivery';
6
+ import { DeliveryDirector } from '@unchainedshop/core-delivery';
7
+ import { OrderPricingDiscount } from '../director/OrderPricingDirector.js';
8
+
9
+ export type OrderDeliveriesModule = {
10
+ // Queries
11
+ findDelivery: (
12
+ params: { orderDeliveryId: string },
13
+ options?: mongodb.FindOptions,
14
+ ) => Promise<OrderDelivery>;
15
+
16
+ // Transformations
17
+ discounts: (
18
+ orderDelivery: OrderDelivery,
19
+ params: { order: Order; orderDiscount: OrderDiscount },
20
+ unchainedAPI: UnchainedCore,
21
+ ) => Array<OrderPricingDiscount>;
22
+ isBlockingOrderConfirmation: (
23
+ orderDelivery: OrderDelivery,
24
+ unchainedAPI: UnchainedCore,
25
+ ) => Promise<boolean>;
26
+ isBlockingOrderFullfillment: (orderDelivery: OrderDelivery) => boolean;
27
+ normalizedStatus: (orderDelivery: OrderDelivery) => string;
28
+ pricingSheet: (
29
+ orderDelivery: OrderDelivery,
30
+ currency: string,
31
+ unchainedAPI: UnchainedCore,
32
+ ) => IDeliveryPricingSheet;
33
+
34
+ // Mutations
35
+ create: (doc: OrderDelivery) => Promise<OrderDelivery>;
36
+ delete: (orderDeliveryId: string) => Promise<number>;
37
+
38
+ markAsDelivered: (orderDelivery: OrderDelivery) => Promise<void>;
39
+
40
+ activePickUpLocation: (
41
+ orderDelivery: OrderDelivery,
42
+ unchainedAPI: UnchainedCore,
43
+ ) => Promise<DeliveryLocation | null>;
44
+
45
+ send: (
46
+ orderDelivery: OrderDelivery,
47
+ params: { order: Order; deliveryContext?: any },
48
+ unchainedAPI: UnchainedCore,
49
+ ) => Promise<OrderDelivery>;
50
+
51
+ updateContext: (orderDeliveryId: string, context: any) => Promise<OrderDelivery | null>;
52
+
53
+ updateStatus: (
54
+ orderDeliveryId: string,
55
+ params: { status: OrderDeliveryStatus; info?: string },
56
+ ) => Promise<OrderDelivery>;
57
+
58
+ updateCalculation: (
59
+ orderDelivery: OrderDelivery,
60
+ unchainedAPI: UnchainedCore,
61
+ ) => Promise<OrderDelivery>;
62
+ };
10
63
 
11
64
  const ORDER_DELIVERY_EVENTS: string[] = ['ORDER_DELIVER', 'ORDER_UPDATE_DELIVERY'];
12
65
 
@@ -20,11 +73,6 @@ export const configureOrderDeliveriesModule = ({
20
73
  }): OrderDeliveriesModule => {
21
74
  registerEvents(ORDER_DELIVERY_EVENTS);
22
75
 
23
- const mutations = generateDbMutations<OrderDelivery>(OrderDeliveries, OrderDeliveriesSchema, {
24
- permanentlyDeleteByDefault: true,
25
- hasCreateOnly: false,
26
- }) as ModuleMutations<OrderDelivery>;
27
-
28
76
  const normalizedStatus: OrderDeliveriesModule['normalizedStatus'] = (orderDelivery) => {
29
77
  return orderDelivery.status === null
30
78
  ? OrderDeliveryStatus.OPEN
@@ -91,6 +139,22 @@ export const configureOrderDeliveriesModule = ({
91
139
 
92
140
  return !isAutoReleaseAllowed;
93
141
  },
142
+
143
+ activePickUpLocation: async (orderDelivery, unchainedAPI) => {
144
+ const { orderPickUpLocationId } = orderDelivery.context || {};
145
+
146
+ const provider = await unchainedAPI.modules.delivery.findProvider({
147
+ deliveryProviderId: orderDelivery.deliveryProviderId,
148
+ });
149
+ const director = await DeliveryDirector.actions(
150
+ provider,
151
+ { orderDelivery: orderDelivery },
152
+ unchainedAPI,
153
+ );
154
+
155
+ return director.pickUpLocationById(orderPickUpLocationId);
156
+ },
157
+
94
158
  isBlockingOrderFullfillment: (orderDelivery) => {
95
159
  if (orderDelivery.status === OrderDeliveryStatus.DELIVERED) return false;
96
160
  return true;
@@ -108,7 +172,9 @@ export const configureOrderDeliveriesModule = ({
108
172
  // Mutations
109
173
 
110
174
  create: async (doc) => {
111
- const orderDeliveryId = await mutations.create({
175
+ const { insertedId: orderDeliveryId } = await OrderDeliveries.insertOne({
176
+ _id: generateDbObjectId(),
177
+ created: new Date(),
112
178
  ...doc,
113
179
  context: doc.context || {},
114
180
  status: null,
@@ -119,7 +185,7 @@ export const configureOrderDeliveriesModule = ({
119
185
  },
120
186
 
121
187
  delete: async (orderDeliveryId) => {
122
- const deletedCount = await mutations.delete(orderDeliveryId);
188
+ const { deletedCount } = await OrderDeliveries.deleteOne({ _id: orderDeliveryId });
123
189
  return deletedCount;
124
190
  },
125
191
 
@@ -1,10 +1,50 @@
1
- import { ModuleMutations, UnchainedCore } from '@unchainedshop/types/core.js';
2
- import { OrderDiscount, OrderDiscountsModule } from '@unchainedshop/types/orders.discounts.js';
1
+ import { UnchainedCore } from '@unchainedshop/core';
3
2
  import { emit, registerEvents } from '@unchainedshop/events';
4
- import { generateDbFilterById, generateDbMutations, mongodb } from '@unchainedshop/mongodb';
5
- import { OrderDiscountsSchema } from '../db/OrderDiscountsSchema.js';
3
+ import { generateDbFilterById, generateDbObjectId, mongodb } from '@unchainedshop/mongodb';
6
4
  import { OrderDiscountTrigger } from '../db/OrderDiscountTrigger.js';
7
5
  import { OrderDiscountDirector } from '../director/OrderDiscountDirector.js';
6
+ import { Order, OrderDiscount } from '../types.js';
7
+ import {
8
+ IPricingSheet,
9
+ PricingCalculation,
10
+ DiscountAdapterActions,
11
+ DiscountContext,
12
+ } from '@unchainedshop/utils';
13
+
14
+ export type OrderDiscountsModule = {
15
+ // Queries
16
+ findOrderDiscount: (
17
+ params: { discountId: string },
18
+ options?: mongodb.FindOptions,
19
+ ) => Promise<OrderDiscount>;
20
+ findOrderDiscounts: (params: { orderId: string }) => Promise<Array<OrderDiscount>>;
21
+
22
+ // Transformations
23
+ interface: (
24
+ orderDiscount: OrderDiscount,
25
+ unchainedAPI: UnchainedCore,
26
+ ) => Promise<DiscountAdapterActions<any>>;
27
+
28
+ isValid: (orderDiscount: OrderDiscount, unchainedAPI: UnchainedCore) => Promise<boolean>;
29
+
30
+ // Adapter
31
+ configurationForPricingAdapterKey: (
32
+ orderDiscount: OrderDiscount,
33
+ adapterKey: string,
34
+ calculationSheet: IPricingSheet<PricingCalculation>,
35
+ pricingContext: DiscountContext & UnchainedCore,
36
+ ) => Promise<any>;
37
+
38
+ // Mutations
39
+ createManualOrderDiscount: (
40
+ params: { code: string; order: Order },
41
+ unchainedAPI: UnchainedCore,
42
+ ) => Promise<OrderDiscount>;
43
+
44
+ create: (doc: OrderDiscount) => Promise<OrderDiscount>;
45
+ update: (orderDiscountId: string, doc: OrderDiscount) => Promise<OrderDiscount>;
46
+ delete: (orderDiscountId: string, unchainedAPI: UnchainedCore) => Promise<OrderDiscount>;
47
+ };
8
48
 
9
49
  const ORDER_DISCOUNT_EVENTS: string[] = [
10
50
  'ORDER_CREATE_DISCOUNT',
@@ -28,11 +68,6 @@ export const configureOrderDiscountsModule = ({
28
68
  }): OrderDiscountsModule => {
29
69
  registerEvents(ORDER_DISCOUNT_EVENTS);
30
70
 
31
- const mutations = generateDbMutations<OrderDiscount>(OrderDiscounts, OrderDiscountsSchema, {
32
- permanentlyDeleteByDefault: true,
33
- hasCreateOnly: false,
34
- }) as ModuleMutations<OrderDiscount>;
35
-
36
71
  const getAdapter = async (orderDiscount: OrderDiscount, unchainedAPI: UnchainedCore) => {
37
72
  const order = await unchainedAPI.modules.orders.findOrder({
38
73
  orderId: orderDiscount.orderId,
@@ -47,7 +82,12 @@ export const configureOrderDiscountsModule = ({
47
82
 
48
83
  const createDiscount: OrderDiscountsModule['create'] = async (doc) => {
49
84
  const normalizedTrigger = doc.trigger || OrderDiscountTrigger.USER;
50
- const discountId = await mutations.create({ ...doc, trigger: normalizedTrigger });
85
+ const { insertedId: discountId } = await OrderDiscounts.insertOne({
86
+ _id: generateDbObjectId(),
87
+ created: new Date(),
88
+ ...doc,
89
+ trigger: normalizedTrigger,
90
+ });
51
91
  const discount = await OrderDiscounts.findOne(buildFindByIdSelector(discountId));
52
92
  return discount;
53
93
  };
@@ -67,12 +107,16 @@ export const configureOrderDiscountsModule = ({
67
107
  };
68
108
 
69
109
  const updateDiscount: OrderDiscountsModule['update'] = async (orderDiscountId, doc) => {
70
- await mutations.update(orderDiscountId, {
71
- $set: doc,
72
- });
73
-
74
- const selector = buildFindByIdSelector(orderDiscountId);
75
- const discount = await OrderDiscounts.findOne(selector, {});
110
+ const discount = await OrderDiscounts.findOneAndUpdate(
111
+ generateDbFilterById(orderDiscountId),
112
+ {
113
+ $set: {
114
+ updated: new Date(),
115
+ ...doc,
116
+ },
117
+ },
118
+ { returnDocument: 'after' },
119
+ );
76
120
  await emit('ORDER_UPDATE_DISCOUNT', { discount });
77
121
  return discount;
78
122
  };
@@ -200,10 +244,17 @@ export const configureOrderDiscountsModule = ({
200
244
  delete: deleteDiscount,
201
245
 
202
246
  update: async (orderDiscountId, doc) => {
203
- await mutations.update(orderDiscountId, doc);
247
+ const discount = await OrderDiscounts.findOneAndUpdate(
248
+ generateDbFilterById(orderDiscountId),
249
+ {
250
+ $set: {
251
+ updated: new Date(),
252
+ ...doc,
253
+ },
254
+ },
255
+ { returnDocument: 'after' },
256
+ );
204
257
 
205
- const selector = buildFindByIdSelector(orderDiscountId);
206
- const discount = await OrderDiscounts.findOne(selector, {});
207
258
  await emit('ORDER_UPDATE_DISCOUNT', { discount });
208
259
  return discount;
209
260
  },