@unchainedshop/core-orders 3.0.0-alpha7 → 3.0.0-rc10

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 (141) hide show
  1. package/lib/db/OrderDeliveriesCollection.d.ts +21 -2
  2. package/lib/db/OrderDeliveriesCollection.d.ts.map +1 -1
  3. package/lib/db/OrderDeliveriesCollection.js +6 -0
  4. package/lib/db/OrderDeliveriesCollection.js.map +1 -1
  5. package/lib/db/OrderDiscountsCollection.d.ts +16 -2
  6. package/lib/db/OrderDiscountsCollection.d.ts.map +1 -1
  7. package/lib/db/OrderDiscountsCollection.js +5 -0
  8. package/lib/db/OrderDiscountsCollection.js.map +1 -1
  9. package/lib/db/OrderPaymentsCollection.d.ts +22 -2
  10. package/lib/db/OrderPaymentsCollection.d.ts.map +1 -1
  11. package/lib/db/OrderPaymentsCollection.js +6 -0
  12. package/lib/db/OrderPaymentsCollection.js.map +1 -1
  13. package/lib/db/OrderPositionsCollection.d.ts +22 -2
  14. package/lib/db/OrderPositionsCollection.d.ts.map +1 -1
  15. package/lib/db/OrderPositionsCollection.js.map +1 -1
  16. package/lib/db/OrdersCollection.d.ts +33 -2
  17. package/lib/db/OrdersCollection.d.ts.map +1 -1
  18. package/lib/db/OrdersCollection.js +8 -1
  19. package/lib/db/OrdersCollection.js.map +1 -1
  20. package/lib/module/buildFindSelector.d.ts +5 -0
  21. package/lib/module/buildFindSelector.d.ts.map +1 -0
  22. package/lib/module/buildFindSelector.js +18 -0
  23. package/lib/module/buildFindSelector.js.map +1 -0
  24. package/lib/module/configureOrderDeliveriesModule.d.ts +14 -27
  25. package/lib/module/configureOrderDeliveriesModule.d.ts.map +1 -1
  26. package/lib/module/configureOrderDeliveriesModule.js +8 -69
  27. package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
  28. package/lib/module/configureOrderDiscountsModule.d.ts +17 -18
  29. package/lib/module/configureOrderDiscountsModule.d.ts.map +1 -1
  30. package/lib/module/configureOrderDiscountsModule.js +34 -143
  31. package/lib/module/configureOrderDiscountsModule.js.map +1 -1
  32. package/lib/module/configureOrderPaymentsModule.d.ts +17 -37
  33. package/lib/module/configureOrderPaymentsModule.d.ts.map +1 -1
  34. package/lib/module/configureOrderPaymentsModule.js +16 -124
  35. package/lib/module/configureOrderPaymentsModule.js.map +1 -1
  36. package/lib/module/configureOrderPositionsModule.d.ts +22 -41
  37. package/lib/module/configureOrderPositionsModule.d.ts.map +1 -1
  38. package/lib/module/configureOrderPositionsModule.js +22 -85
  39. package/lib/module/configureOrderPositionsModule.js.map +1 -1
  40. package/lib/module/configureOrdersModule-mutations.d.ts +5 -11
  41. package/lib/module/configureOrdersModule-mutations.d.ts.map +1 -1
  42. package/lib/module/configureOrdersModule-mutations.js +11 -50
  43. package/lib/module/configureOrdersModule-mutations.js.map +1 -1
  44. package/lib/module/configureOrdersModule-queries.d.ts +18 -6
  45. package/lib/module/configureOrdersModule-queries.d.ts.map +1 -1
  46. package/lib/module/configureOrdersModule-queries.js +35 -22
  47. package/lib/module/configureOrdersModule-queries.js.map +1 -1
  48. package/lib/module/configureOrdersModule.d.ts +11 -8
  49. package/lib/module/configureOrdersModule.d.ts.map +1 -1
  50. package/lib/module/configureOrdersModule.js +134 -154
  51. package/lib/module/configureOrdersModule.js.map +1 -1
  52. package/lib/orders-index.d.ts +11 -8
  53. package/lib/orders-index.d.ts.map +1 -1
  54. package/lib/orders-index.js +11 -8
  55. package/lib/orders-index.js.map +1 -1
  56. package/lib/orders-settings.d.ts +4 -8
  57. package/lib/orders-settings.d.ts.map +1 -1
  58. package/lib/orders-settings.js.map +1 -1
  59. package/package.json +13 -13
  60. package/src/db/OrderDeliveriesCollection.ts +25 -2
  61. package/src/db/OrderDiscountsCollection.ts +18 -2
  62. package/src/db/OrderPaymentsCollection.ts +26 -2
  63. package/src/db/OrderPositionsCollection.ts +21 -2
  64. package/src/db/OrdersCollection.ts +44 -2
  65. package/src/module/buildFindSelector.test.ts +8 -8
  66. package/src/module/buildFindSelector.ts +24 -0
  67. package/src/module/configureOrderDeliveriesModule.ts +29 -172
  68. package/src/module/configureOrderDiscountsModule.ts +46 -213
  69. package/src/module/configureOrderPaymentsModule.ts +58 -266
  70. package/src/module/configureOrderPositionsModule.ts +57 -208
  71. package/src/module/configureOrdersModule-mutations.ts +13 -85
  72. package/src/module/configureOrdersModule-queries.ts +61 -29
  73. package/src/module/configureOrdersModule.ts +181 -264
  74. package/src/orders-index.ts +11 -10
  75. package/src/orders-settings.ts +5 -7
  76. package/tsconfig.json +5 -7
  77. package/lib/db/OrderDiscountTrigger.d.ts +0 -5
  78. package/lib/db/OrderDiscountTrigger.d.ts.map +0 -1
  79. package/lib/db/OrderDiscountTrigger.js +0 -6
  80. package/lib/db/OrderDiscountTrigger.js.map +0 -1
  81. package/lib/director/OrderDiscountAdapter.d.ts +0 -4
  82. package/lib/director/OrderDiscountAdapter.d.ts.map +0 -1
  83. package/lib/director/OrderDiscountAdapter.js +0 -3
  84. package/lib/director/OrderDiscountAdapter.js.map +0 -1
  85. package/lib/director/OrderDiscountConfiguration.d.ts +0 -6
  86. package/lib/director/OrderDiscountConfiguration.d.ts.map +0 -1
  87. package/lib/director/OrderDiscountConfiguration.js +0 -2
  88. package/lib/director/OrderDiscountConfiguration.js.map +0 -1
  89. package/lib/director/OrderDiscountDirector.d.ts +0 -3
  90. package/lib/director/OrderDiscountDirector.d.ts.map +0 -1
  91. package/lib/director/OrderDiscountDirector.js +0 -3
  92. package/lib/director/OrderDiscountDirector.js.map +0 -1
  93. package/lib/director/OrderPricingAdapter.d.ts +0 -22
  94. package/lib/director/OrderPricingAdapter.d.ts.map +0 -1
  95. package/lib/director/OrderPricingAdapter.js +0 -25
  96. package/lib/director/OrderPricingAdapter.js.map +0 -1
  97. package/lib/director/OrderPricingDirector.d.ts +0 -18
  98. package/lib/director/OrderPricingDirector.d.ts.map +0 -1
  99. package/lib/director/OrderPricingDirector.js +0 -39
  100. package/lib/director/OrderPricingDirector.js.map +0 -1
  101. package/lib/director/OrderPricingSheet.d.ts +0 -36
  102. package/lib/director/OrderPricingSheet.d.ts.map +0 -1
  103. package/lib/director/OrderPricingSheet.js +0 -108
  104. package/lib/director/OrderPricingSheet.js.map +0 -1
  105. package/lib/module/configureOrdersModule-processing.d.ts +0 -32
  106. package/lib/module/configureOrdersModule-processing.d.ts.map +0 -1
  107. package/lib/module/configureOrdersModule-processing.js +0 -339
  108. package/lib/module/configureOrdersModule-processing.js.map +0 -1
  109. package/lib/module/configureOrdersModule-transformations.d.ts +0 -20
  110. package/lib/module/configureOrdersModule-transformations.d.ts.map +0 -1
  111. package/lib/module/configureOrdersModule-transformations.js +0 -111
  112. package/lib/module/configureOrdersModule-transformations.js.map +0 -1
  113. package/lib/service/migrateOrderCartService.d.ts +0 -10
  114. package/lib/service/migrateOrderCartService.d.ts.map +0 -1
  115. package/lib/service/migrateOrderCartService.js +0 -32
  116. package/lib/service/migrateOrderCartService.js.map +0 -1
  117. package/lib/service/nextUserCartService.d.ts +0 -11
  118. package/lib/service/nextUserCartService.d.ts.map +0 -1
  119. package/lib/service/nextUserCartService.js +0 -34
  120. package/lib/service/nextUserCartService.js.map +0 -1
  121. package/lib/service/orderServices.d.ts +0 -8
  122. package/lib/service/orderServices.d.ts.map +0 -1
  123. package/lib/service/orderServices.js +0 -7
  124. package/lib/service/orderServices.js.map +0 -1
  125. package/lib/types.d.ts +0 -116
  126. package/lib/types.d.ts.map +0 -1
  127. package/lib/types.js +0 -25
  128. package/lib/types.js.map +0 -1
  129. package/src/db/OrderDiscountTrigger.ts +0 -4
  130. package/src/director/OrderDiscountAdapter.ts +0 -8
  131. package/src/director/OrderDiscountConfiguration.ts +0 -5
  132. package/src/director/OrderDiscountDirector.ts +0 -5
  133. package/src/director/OrderPricingAdapter.ts +0 -61
  134. package/src/director/OrderPricingDirector.ts +0 -72
  135. package/src/director/OrderPricingSheet.ts +0 -146
  136. package/src/module/configureOrdersModule-processing.ts +0 -508
  137. package/src/module/configureOrdersModule-transformations.ts +0 -171
  138. package/src/service/migrateOrderCartService.ts +0 -53
  139. package/src/service/nextUserCartService.ts +0 -54
  140. package/src/service/orderServices.ts +0 -12
  141. package/src/types.ts +0 -129
@@ -1,5 +1,28 @@
1
- import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { OrderDelivery } from '@unchainedshop/core-orders';
1
+ import { mongodb, buildDbIndexes, LogFields, TimestampFields } from '@unchainedshop/mongodb';
2
+ import { Price } from '@unchainedshop/utils';
3
+
4
+ export enum OrderDeliveryStatus {
5
+ OPEN = 'OPEN', // Null value is mapped to OPEN status
6
+ DELIVERED = 'DELIVERED',
7
+ RETURNED = 'RETURNED',
8
+ }
9
+
10
+ export type OrderDelivery = {
11
+ _id?: string;
12
+ orderId: string;
13
+ deliveryProviderId: string;
14
+ delivered?: Date;
15
+ status: OrderDeliveryStatus | null;
16
+ context?: any;
17
+ calculation: Array<any>;
18
+ } & LogFields &
19
+ TimestampFields;
20
+
21
+ export type OrderDeliveryDiscount = Omit<Price, '_id'> & {
22
+ _id?: string;
23
+ discountId: string;
24
+ item: OrderDelivery;
25
+ };
3
26
 
4
27
  export const OrderDeliveriesCollection = async (db: mongodb.Db) => {
5
28
  const OrderDeliveries = db.collection<OrderDelivery>('order_deliveries');
@@ -1,5 +1,16 @@
1
- import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { OrderDiscount } from '@unchainedshop/core-orders';
1
+ import { mongodb, buildDbIndexes, TimestampFields } from '@unchainedshop/mongodb';
2
+ import { Price } from '@unchainedshop/utils';
3
+
4
+ export type OrderDiscount = {
5
+ _id?: string;
6
+ orderId: string;
7
+ code?: string;
8
+ total?: Price;
9
+ trigger?: OrderDiscountTrigger;
10
+ discountKey?: string;
11
+ reservation?: any;
12
+ context?: any;
13
+ } & TimestampFields;
3
14
 
4
15
  export const OrderDiscountsCollection = async (db: mongodb.Db) => {
5
16
  const OrderDiscounts = db.collection<OrderDiscount>('order_discounts');
@@ -12,3 +23,8 @@ export const OrderDiscountsCollection = async (db: mongodb.Db) => {
12
23
 
13
24
  return OrderDiscounts;
14
25
  };
26
+
27
+ export enum OrderDiscountTrigger {
28
+ USER = 'USER',
29
+ SYSTEM = 'SYSTEM',
30
+ }
@@ -1,5 +1,29 @@
1
- import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { OrderPayment } from '@unchainedshop/core-orders';
1
+ import { mongodb, buildDbIndexes, LogFields, TimestampFields } from '@unchainedshop/mongodb';
2
+ import { Price } from '@unchainedshop/utils';
3
+
4
+ export enum OrderPaymentStatus {
5
+ OPEN = 'OPEN', // Null value is mapped to OPEN status
6
+ PAID = 'PAID',
7
+ REFUNDED = 'REFUNDED',
8
+ }
9
+
10
+ export type OrderPayment = {
11
+ _id?: string;
12
+ orderId: string;
13
+ context?: any;
14
+ paid?: Date;
15
+ transactionId?: string;
16
+ paymentProviderId?: string;
17
+ status?: OrderPaymentStatus | null;
18
+ calculation?: Array<any>;
19
+ } & LogFields &
20
+ TimestampFields;
21
+
22
+ export type OrderPaymentDiscount = Omit<Price, '_id'> & {
23
+ _id?: string;
24
+ discountId: string;
25
+ item: OrderPayment;
26
+ };
3
27
 
4
28
  export const OrderPaymentsCollection = async (db: mongodb.Db) => {
5
29
  const OrderPayments = db.collection<OrderPayment>('order_payments');
@@ -1,5 +1,24 @@
1
- import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { OrderPosition } from '@unchainedshop/core-orders';
1
+ import { mongodb, buildDbIndexes, TimestampFields } from '@unchainedshop/mongodb';
2
+ import { Price } from '@unchainedshop/utils';
3
+
4
+ export type OrderPosition = {
5
+ _id?: string;
6
+ calculation: Array<any>;
7
+ configuration: Array<{ key: string; value: string }>;
8
+ context?: any;
9
+ orderId: string;
10
+ originalProductId: string;
11
+ productId: string;
12
+ quantity: number;
13
+ quotationId?: string;
14
+ scheduling: Array<any>;
15
+ } & TimestampFields;
16
+
17
+ export type OrderPositionDiscount = Omit<Price, '_id'> & {
18
+ _id?: string;
19
+ discountId: string;
20
+ item: OrderPosition;
21
+ };
3
22
 
4
23
  export const OrderPositionsCollection = async (db: mongodb.Db) => {
5
24
  const OrderPositions = db.collection<OrderPosition>('order_positions');
@@ -1,5 +1,47 @@
1
- import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { Order } from '../types.js';
1
+ import {
2
+ mongodb,
3
+ buildDbIndexes,
4
+ Address,
5
+ Contact,
6
+ LogFields,
7
+ TimestampFields,
8
+ } from '@unchainedshop/mongodb';
9
+
10
+ export enum OrderStatus {
11
+ PENDING = 'PENDING',
12
+ CONFIRMED = 'CONFIRMED',
13
+ FULLFILLED = 'FULLFILLED',
14
+ REJECTED = 'REJECTED',
15
+ }
16
+
17
+ export type Order = {
18
+ _id?: string;
19
+ billingAddress?: Address;
20
+ calculation: Array<any>;
21
+ confirmed?: Date;
22
+ rejected?: Date;
23
+ contact?: Contact;
24
+ context?: any;
25
+ countryCode: string;
26
+ currency: string;
27
+ deliveryId?: string;
28
+ fullfilled?: Date;
29
+ ordered?: Date;
30
+ orderNumber?: string;
31
+ originEnrollmentId?: string;
32
+ paymentId?: string;
33
+ status: OrderStatus | null;
34
+ userId: string;
35
+ } & LogFields &
36
+ TimestampFields;
37
+
38
+ export type OrderQuery = {
39
+ includeCarts?: boolean;
40
+ orderStatus?: OrderStatus[];
41
+ queryString?: string;
42
+ status?: OrderStatus[];
43
+ userId?: string;
44
+ };
3
45
 
4
46
  export const OrdersCollection = async (db: mongodb.Db) => {
5
47
  const Orders = db.collection<Order>('orders');
@@ -1,12 +1,12 @@
1
- import { OrderStatus } from '../types.js';
1
+ import { OrderStatus } from '../db/OrdersCollection.js';
2
2
  import { buildFindByIdSelector as buildFindByIdSelectorForDelivery } from './configureOrderDeliveriesModule.js';
3
- import { buildFindByIdSelector as buildFindByIdSelectorForDiscount } from './configureOrderDiscountsModule.js';
3
+ import { buildFindOrderDiscountByIdSelector } from './configureOrderDiscountsModule.js';
4
4
  import {
5
- buildFindByIdSelector as buildFindByIdSelectorForPayment,
5
+ buildFindOrderPaymentByIdSelector,
6
6
  buildFindByContextDataSelector,
7
7
  } from './configureOrderPaymentsModule.js';
8
- import { buildFindByIdSelector as buildFindByIdSelectorForPosition } from './configureOrderPositionsModule.js';
9
- import { buildFindSelector as buildFindSelectorForOrder } from './configureOrdersModule-queries.js';
8
+ import { buildFindOrderPositionByIdSelector } from './configureOrderPositionsModule.js';
9
+ import buildFindSelectorForOrder from './buildFindSelector.js';
10
10
 
11
11
  describe('OrderPosition', () => {
12
12
  describe('buildFindSelector', () => {
@@ -75,7 +75,7 @@ describe('OrderDelivery', () => {
75
75
  describe('OrderDiscount', () => {
76
76
  describe('buildFindByIdSelector', () => {
77
77
  it('Return correct db _id selector', () => {
78
- expect(buildFindByIdSelectorForDiscount('order-discount-id')).toEqual({
78
+ expect(buildFindOrderDiscountByIdSelector('order-discount-id')).toEqual({
79
79
  _id: 'order-discount-id',
80
80
  });
81
81
  });
@@ -85,7 +85,7 @@ describe('OrderDiscount', () => {
85
85
  describe('OrderPayment', () => {
86
86
  describe('buildFindByIdSelector', () => {
87
87
  it('Return correct db _id selector', () => {
88
- expect(buildFindByIdSelectorForPayment('order-payment-id')).toEqual({ _id: 'order-payment-id' });
88
+ expect(buildFindOrderPaymentByIdSelector('order-payment-id')).toEqual({ _id: 'order-payment-id' });
89
89
  });
90
90
  });
91
91
 
@@ -102,7 +102,7 @@ describe('OrderPayment', () => {
102
102
  describe('OrderPosition', () => {
103
103
  describe('buildFindByIdSelector', () => {
104
104
  it('Return correct db _id selector', () => {
105
- expect(buildFindByIdSelectorForPosition('order-position-id')).toEqual({
105
+ expect(buildFindOrderPositionByIdSelector('order-position-id')).toEqual({
106
106
  _id: 'order-position-id',
107
107
  });
108
108
  });
@@ -0,0 +1,24 @@
1
+ import { OrderQuery, Order } from '../db/OrdersCollection.js';
2
+ import { mongodb } from '@unchainedshop/mongodb';
3
+
4
+ export const buildFindSelector = ({ includeCarts, status, userId, queryString }: OrderQuery) => {
5
+ const selector: mongodb.Filter<Order> = {};
6
+
7
+ if (userId) {
8
+ selector.userId = userId;
9
+ }
10
+
11
+ if (Array.isArray(status) && status?.length) {
12
+ selector.status = { $in: status };
13
+ } else if (!includeCarts) {
14
+ selector.status = { $ne: null }; // TODO: Slow performance! IDXSCAN in common query!
15
+ }
16
+
17
+ if (queryString) {
18
+ (selector as any).$text = { $search: queryString };
19
+ }
20
+
21
+ return selector;
22
+ };
23
+
24
+ export default buildFindSelector;
@@ -1,65 +1,7 @@
1
- import { UnchainedCore } from '@unchainedshop/core';
2
1
  import { mongodb, generateDbFilterById, generateDbObjectId } from '@unchainedshop/mongodb';
3
2
  import { emit, registerEvents } from '@unchainedshop/events';
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
- };
3
+ import { PricingCalculation } from '@unchainedshop/utils';
4
+ import { OrderDelivery, OrderDeliveryStatus } from '../db/OrderDeliveriesCollection.js';
63
5
 
64
6
  const ORDER_DELIVERY_EVENTS: string[] = ['ORDER_DELIVER', 'ORDER_UPDATE_DELIVERY'];
65
7
 
@@ -70,19 +12,19 @@ export const configureOrderDeliveriesModule = ({
70
12
  OrderDeliveries,
71
13
  }: {
72
14
  OrderDeliveries: mongodb.Collection<OrderDelivery>;
73
- }): OrderDeliveriesModule => {
15
+ }) => {
74
16
  registerEvents(ORDER_DELIVERY_EVENTS);
75
17
 
76
- const normalizedStatus: OrderDeliveriesModule['normalizedStatus'] = (orderDelivery) => {
18
+ const normalizedStatus = (orderDelivery: OrderDelivery) => {
77
19
  return orderDelivery.status === null
78
20
  ? OrderDeliveryStatus.OPEN
79
21
  : (orderDelivery.status as OrderDeliveryStatus);
80
22
  };
81
23
 
82
- const updateStatus: OrderDeliveriesModule['updateStatus'] = async (
83
- orderDeliveryId,
84
- { status, info },
85
- ) => {
24
+ const updateStatus = async (
25
+ orderDeliveryId: string,
26
+ { status, info }: { status: OrderDeliveryStatus; info?: string },
27
+ ): Promise<OrderDelivery> => {
86
28
  const date = new Date();
87
29
  const modifier: mongodb.UpdateFilter<OrderDelivery> = {
88
30
  $set: { status, updated: new Date() },
@@ -106,72 +48,18 @@ export const configureOrderDeliveriesModule = ({
106
48
 
107
49
  return {
108
50
  // Queries
109
- findDelivery: async ({ orderDeliveryId }, options) => {
51
+ findDelivery: async (
52
+ { orderDeliveryId }: { orderDeliveryId: string },
53
+ options?: mongodb.FindOptions,
54
+ ): Promise<OrderDelivery> => {
110
55
  return OrderDeliveries.findOne(buildFindByIdSelector(orderDeliveryId), options);
111
56
  },
112
57
 
113
- // Transformations
114
- discounts: (orderDelivery, { order, orderDiscount }, context) => {
115
- const { modules } = context;
116
- if (!orderDelivery) return [];
117
-
118
- const pricingSheet = modules.orders.deliveries.pricingSheet(
119
- orderDelivery,
120
- order.currency,
121
- context,
122
- );
123
-
124
- return pricingSheet.discountPrices(orderDiscount._id).map((discount) => ({
125
- delivery: orderDelivery,
126
- ...discount,
127
- }));
128
- },
129
-
130
- isBlockingOrderConfirmation: async (orderDelivery, unchainedAPI) => {
131
- const provider = await unchainedAPI.modules.delivery.findProvider({
132
- deliveryProviderId: orderDelivery.deliveryProviderId,
133
- });
134
-
135
- const isAutoReleaseAllowed = await unchainedAPI.modules.delivery.isAutoReleaseAllowed(
136
- provider,
137
- unchainedAPI,
138
- );
139
-
140
- return !isAutoReleaseAllowed;
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
-
158
- isBlockingOrderFullfillment: (orderDelivery) => {
159
- if (orderDelivery.status === OrderDeliveryStatus.DELIVERED) return false;
160
- return true;
161
- },
162
-
163
58
  normalizedStatus,
164
59
 
165
- pricingSheet: (orderDelivery, currency, { modules }) => {
166
- return modules.delivery.pricingSheet({
167
- calculation: orderDelivery.calculation,
168
- currency,
169
- });
170
- },
171
-
172
60
  // Mutations
173
61
 
174
- create: async (doc) => {
62
+ create: async (doc: OrderDelivery): Promise<OrderDelivery> => {
175
63
  const { insertedId: orderDeliveryId } = await OrderDeliveries.insertOne({
176
64
  _id: generateDbObjectId(),
177
65
  created: new Date(),
@@ -184,56 +72,22 @@ export const configureOrderDeliveriesModule = ({
184
72
  return orderDelivery;
185
73
  },
186
74
 
187
- delete: async (orderDeliveryId) => {
75
+ delete: async (orderDeliveryId: string) => {
188
76
  const { deletedCount } = await OrderDeliveries.deleteOne({ _id: orderDeliveryId });
189
77
  return deletedCount;
190
78
  },
191
79
 
192
- markAsDelivered: async (orderDelivery) => {
80
+ markAsDelivered: async (orderDelivery: OrderDelivery) => {
193
81
  if (normalizedStatus(orderDelivery) !== OrderDeliveryStatus.OPEN) return;
194
82
  const updatedOrderDelivery = await updateStatus(orderDelivery._id, {
195
83
  status: OrderDeliveryStatus.DELIVERED,
196
84
  info: 'mark delivered manually',
197
85
  });
198
86
  await emit('ORDER_DELIVER', { orderDelivery: updatedOrderDelivery });
87
+ return updatedOrderDelivery;
199
88
  },
200
89
 
201
- send: async (orderDelivery, { order, deliveryContext }, unchainedAPI) => {
202
- if (normalizedStatus(orderDelivery) !== OrderDeliveryStatus.OPEN) return orderDelivery;
203
-
204
- const deliveryProvider = await unchainedAPI.modules.delivery.findProvider({
205
- deliveryProviderId: orderDelivery.deliveryProviderId,
206
- });
207
-
208
- const deliveryProviderId = deliveryProvider._id;
209
-
210
- const address = orderDelivery.context?.address || order || order.billingAddress;
211
-
212
- const arbitraryResponseData = await unchainedAPI.modules.delivery.send(
213
- deliveryProviderId,
214
- {
215
- order,
216
- orderDelivery,
217
- transactionContext: {
218
- ...(deliveryContext || {}),
219
- ...(orderDelivery.context || {}),
220
- ...(address || {}),
221
- },
222
- },
223
- unchainedAPI,
224
- );
225
-
226
- if (arbitraryResponseData) {
227
- return updateStatus(orderDelivery._id, {
228
- status: OrderDeliveryStatus.DELIVERED,
229
- info: JSON.stringify(arbitraryResponseData),
230
- });
231
- }
232
-
233
- return orderDelivery;
234
- },
235
-
236
- updateContext: async (orderDeliveryId, context) => {
90
+ updateContext: async (orderDeliveryId: string, context: any): Promise<OrderDelivery> => {
237
91
  const selector = buildFindByIdSelector(orderDeliveryId);
238
92
  if (!context || Object.keys(context).length === 0) return OrderDeliveries.findOne(selector, {});
239
93
  const contextSetters = Object.fromEntries(
@@ -263,16 +117,12 @@ export const configureOrderDeliveriesModule = ({
263
117
 
264
118
  updateStatus,
265
119
 
266
- updateCalculation: async (orderDelivery, unchainedAPI) => {
267
- const calculation = await unchainedAPI.modules.delivery.calculate(
268
- {
269
- item: orderDelivery,
270
- },
271
- unchainedAPI,
272
- );
273
-
120
+ updateCalculation: async <T extends PricingCalculation>(
121
+ orderDeliveryId: string,
122
+ calculation: Array<T>,
123
+ ): Promise<OrderDelivery> => {
274
124
  return OrderDeliveries.findOneAndUpdate(
275
- buildFindByIdSelector(orderDelivery._id),
125
+ { _id: orderDeliveryId },
276
126
  {
277
127
  $set: {
278
128
  calculation,
@@ -284,5 +134,12 @@ export const configureOrderDeliveriesModule = ({
284
134
  },
285
135
  );
286
136
  },
137
+
138
+ deleteOrderDeliveries: async (orderId: string) => {
139
+ const { deletedCount } = await OrderDeliveries.deleteMany({ orderId });
140
+ return deletedCount;
141
+ },
287
142
  };
288
143
  };
144
+
145
+ export type OrderDeliveriesModule = ReturnType<typeof configureOrderDeliveriesModule>;