@unchainedshop/core-orders 2.0.0-beta8 → 2.0.0-beta9

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 (44) hide show
  1. package/jest.config.js +9 -0
  2. package/lib/director/OrderPricingDirector.js +5 -5
  3. package/lib/director/OrderPricingDirector.js.map +1 -1
  4. package/lib/module/configureOrderDeliveriesModule.d.ts +2 -1
  5. package/lib/module/configureOrderDeliveriesModule.js +26 -24
  6. package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
  7. package/lib/module/configureOrderDiscountsModule.d.ts +2 -1
  8. package/lib/module/configureOrderDiscountsModule.js +35 -35
  9. package/lib/module/configureOrderDiscountsModule.js.map +1 -1
  10. package/lib/module/configureOrderPaymentsModule.d.ts +3 -1
  11. package/lib/module/configureOrderPaymentsModule.js +63 -37
  12. package/lib/module/configureOrderPaymentsModule.js.map +1 -1
  13. package/lib/module/configureOrderPositionsModule.d.ts +2 -1
  14. package/lib/module/configureOrderPositionsModule.js +35 -29
  15. package/lib/module/configureOrderPositionsModule.js.map +1 -1
  16. package/lib/module/configureOrdersModule-mutations.js +21 -26
  17. package/lib/module/configureOrdersModule-mutations.js.map +1 -1
  18. package/lib/module/configureOrdersModule-processing.js +52 -58
  19. package/lib/module/configureOrdersModule-processing.js.map +1 -1
  20. package/lib/module/configureOrdersModule-queries.d.ts +3 -2
  21. package/lib/module/configureOrdersModule-queries.js +1 -1
  22. package/lib/module/configureOrdersModule-queries.js.map +1 -1
  23. package/lib/module/configureOrdersModule-transformations.js +10 -10
  24. package/lib/module/configureOrdersModule-transformations.js.map +1 -1
  25. package/lib/module/configureOrdersModule.js +24 -26
  26. package/lib/module/configureOrdersModule.js.map +1 -1
  27. package/lib/service/createUserCartService.js +8 -8
  28. package/lib/service/createUserCartService.js.map +1 -1
  29. package/lib/service/migrateOrderCartService.js +3 -9
  30. package/lib/service/migrateOrderCartService.js.map +1 -1
  31. package/package.json +10 -9
  32. package/src/director/OrderPricingDirector.ts +5 -5
  33. package/src/module/configureOrderDeliveriesModule.ts +32 -42
  34. package/src/module/configureOrderDiscountsModule.ts +42 -54
  35. package/src/module/configureOrderPaymentsModule.ts +93 -76
  36. package/src/module/configureOrderPositionsModule.ts +57 -46
  37. package/src/module/configureOrdersModule-mutations.ts +43 -58
  38. package/src/module/configureOrdersModule-processing.ts +75 -85
  39. package/src/module/configureOrdersModule-queries.ts +1 -1
  40. package/src/module/configureOrdersModule-transformations.ts +10 -10
  41. package/src/module/configureOrdersModule.ts +29 -42
  42. package/src/service/createUserCartService.ts +20 -24
  43. package/src/service/migrateOrderCartService.ts +3 -11
  44. package/tests/orders-index.test.ts +103 -48
@@ -1,4 +1,3 @@
1
- import { Context } from '@unchainedshop/types/api';
2
1
  import { Collection } from '@unchainedshop/types/common';
3
2
  import { Order, OrderStatus, OrderProcessing, OrdersModule } from '@unchainedshop/types/orders';
4
3
  import { OrderDelivery } from '@unchainedshop/types/orders.deliveries';
@@ -8,6 +7,7 @@ import { emit, registerEvents } from '@unchainedshop/events';
8
7
  import { log } from '@unchainedshop/logger';
9
8
  import { generateDbFilterById } from '@unchainedshop/utils';
10
9
  import { ProductType } from '@unchainedshop/types/products';
10
+ import { UnchainedCore } from '@unchainedshop/types/core';
11
11
  import { ordersSettings } from '../orders-settings';
12
12
 
13
13
  const ORDER_PROCESSING_EVENTS: string[] = ['ORDER_CHECKOUT', 'ORDER_CONFIRMED', 'ORDER_FULLFILLED'];
@@ -48,7 +48,7 @@ export const configureOrderModuleProcessing = ({
48
48
  return errors;
49
49
  };
50
50
 
51
- const itemValidationErrors = async (order: Order, { modules }: Context) => {
51
+ const itemValidationErrors = async (order: Order, { modules }: UnchainedCore) => {
52
52
  // Check if items are valid
53
53
  const orderPositions = await findOrderPositions(order);
54
54
  if (orderPositions.length === 0) {
@@ -87,8 +87,8 @@ export const configureOrderModuleProcessing = ({
87
87
  return validationErrors.flatMap((f) => f);
88
88
  };
89
89
 
90
- const isAutoConfirmationEnabled = async (order: Order, requestContext: Context) => {
91
- const { modules } = requestContext;
90
+ const isAutoConfirmationEnabled = async (order: Order, unchainedAPI: UnchainedCore) => {
91
+ const { modules } = unchainedAPI;
92
92
 
93
93
  if (order.status === OrderStatus.FULLFILLED || order.status === OrderStatus.CONFIRMED) {
94
94
  return false;
@@ -97,20 +97,20 @@ export const configureOrderModuleProcessing = ({
97
97
  const orderPayment = await findOrderPayment(order);
98
98
  let isBlockingOrderConfirmation =
99
99
  orderPayment &&
100
- (await modules.orders.payments.isBlockingOrderConfirmation(orderPayment, requestContext));
100
+ (await modules.orders.payments.isBlockingOrderConfirmation(orderPayment, unchainedAPI));
101
101
  if (isBlockingOrderConfirmation) return false;
102
102
 
103
103
  const orderDelivery = await findOrderDelivery(order);
104
104
  isBlockingOrderConfirmation =
105
105
  orderDelivery &&
106
- (await modules.orders.deliveries.isBlockingOrderConfirmation(orderDelivery, requestContext));
106
+ (await modules.orders.deliveries.isBlockingOrderConfirmation(orderDelivery, unchainedAPI));
107
107
  if (isBlockingOrderConfirmation) return false;
108
108
 
109
109
  return true;
110
110
  };
111
111
 
112
- const isAutoFullfillmentEnabled = async (order: Order, requestContext: Context) => {
113
- const { modules } = requestContext;
112
+ const isAutoFullfillmentEnabled = async (order: Order, unchainedAPI: UnchainedCore) => {
113
+ const { modules } = unchainedAPI;
114
114
 
115
115
  const orderPayment = await findOrderPayment(order);
116
116
  let isBlockingOrderFullfillment =
@@ -134,7 +134,7 @@ export const configureOrderModuleProcessing = ({
134
134
  const findNextStatus = async (
135
135
  status: OrderStatus | null,
136
136
  order: Order,
137
- requestContext: Context,
137
+ unchainedAPI: UnchainedCore,
138
138
  ): Promise<OrderStatus> => {
139
139
  if (status === null) {
140
140
  if ((await missingInputDataForCheckout(order)).length === 0) {
@@ -144,14 +144,14 @@ export const configureOrderModuleProcessing = ({
144
144
  }
145
145
 
146
146
  if (status === OrderStatus.PENDING) {
147
- if (await isAutoConfirmationEnabled(order, requestContext)) {
147
+ if (await isAutoConfirmationEnabled(order, unchainedAPI)) {
148
148
  await emit('ORDER_CONFIRMED', { order });
149
149
  return OrderStatus.CONFIRMED;
150
150
  }
151
151
  }
152
152
 
153
153
  if (status === OrderStatus.CONFIRMED) {
154
- const isFullfilled = await isAutoFullfillmentEnabled(order, requestContext);
154
+ const isFullfilled = await isAutoFullfillmentEnabled(order, unchainedAPI);
155
155
  if (isFullfilled) {
156
156
  await emit('ORDER_FULLFILLED', { order });
157
157
  return OrderStatus.FULLFILLED;
@@ -162,17 +162,17 @@ export const configureOrderModuleProcessing = ({
162
162
  };
163
163
 
164
164
  return {
165
- checkout: async (orderId, { orderContext, paymentContext, deliveryContext }, requestContext) => {
166
- const { modules, localeContext, userId } = requestContext;
165
+ checkout: async (orderId, { orderContext, paymentContext, deliveryContext }, unchainedAPI) => {
166
+ const { modules } = unchainedAPI;
167
167
 
168
- await modules.orders.updateContext(orderId, orderContext, requestContext);
168
+ await modules.orders.updateContext(orderId, orderContext, unchainedAPI);
169
169
  let order = await modules.orders.findOrder({ orderId });
170
170
 
171
171
  if (order.status !== null) return order;
172
172
 
173
173
  const errors = [
174
174
  ...(await missingInputDataForCheckout(order)),
175
- ...(await itemValidationErrors(order, requestContext)),
175
+ ...(await itemValidationErrors(order, unchainedAPI)),
176
176
  ].filter(Boolean);
177
177
 
178
178
  if (errors.length > 0) {
@@ -186,33 +186,31 @@ export const configureOrderModuleProcessing = ({
186
186
  paymentContext,
187
187
  deliveryContext,
188
188
  },
189
- requestContext,
189
+ unchainedAPI,
190
190
  );
191
191
 
192
192
  // After checkout, store last checkout information on user
193
- await modules.users.updateLastBillingAddress(order.userId, order.billingAddress, userId);
194
- await modules.users.updateLastContact(order.userId, order.contact, userId);
193
+ await modules.users.updateLastBillingAddress(order.userId, order.billingAddress);
194
+ await modules.users.updateLastContact(order.userId, order.contact);
195
195
 
196
196
  // Then ensure new cart is created before we return from checkout
197
197
  const user = await modules.users.findUserById(order.userId);
198
- const locale = modules.users.userLocale(user, {
199
- localeContext,
200
- });
198
+ const locale = modules.users.userLocale(user);
201
199
  await modules.orders.ensureCartForUser(
202
200
  {
203
201
  user,
204
202
  countryCode: locale.country,
205
203
  },
206
- requestContext,
204
+ unchainedAPI,
207
205
  );
208
206
 
209
207
  return order;
210
208
  },
211
209
 
212
- confirm: async (orderId, { orderContext, paymentContext, deliveryContext }, requestContext) => {
213
- const { modules } = requestContext;
210
+ confirm: async (orderId, { orderContext, paymentContext, deliveryContext }, unchainedAPI) => {
211
+ const { modules } = unchainedAPI;
214
212
 
215
- await modules.orders.updateContext(orderId, orderContext, requestContext);
213
+ await modules.orders.updateContext(orderId, orderContext, unchainedAPI);
216
214
  const order = await modules.orders.findOrder({ orderId });
217
215
 
218
216
  if (order.status !== OrderStatus.PENDING) return order;
@@ -224,14 +222,14 @@ export const configureOrderModuleProcessing = ({
224
222
  deliveryContext,
225
223
  nextStatus: OrderStatus.CONFIRMED,
226
224
  },
227
- requestContext,
225
+ unchainedAPI,
228
226
  );
229
227
  },
230
228
 
231
- reject: async (orderId, { orderContext, paymentContext, deliveryContext }, requestContext) => {
232
- const { modules } = requestContext;
229
+ reject: async (orderId, { orderContext, paymentContext, deliveryContext }, unchainedAPI) => {
230
+ const { modules } = unchainedAPI;
233
231
 
234
- await modules.orders.updateContext(orderId, orderContext, requestContext);
232
+ await modules.orders.updateContext(orderId, orderContext, unchainedAPI);
235
233
  const order = await modules.orders.findOrder({ orderId });
236
234
 
237
235
  if (order.status !== OrderStatus.PENDING) return order;
@@ -243,12 +241,12 @@ export const configureOrderModuleProcessing = ({
243
241
  deliveryContext,
244
242
  nextStatus: OrderStatus.REJECTED,
245
243
  },
246
- requestContext,
244
+ unchainedAPI,
247
245
  );
248
246
  },
249
247
 
250
- ensureCartForUser: async ({ user, countryCode }, requestContext) => {
251
- const { modules, services } = requestContext;
248
+ ensureCartForUser: async ({ user, countryCode }, unchainedAPI) => {
249
+ const { modules, services } = unchainedAPI;
252
250
 
253
251
  if (!ordersSettings.ensureUserHasCart) return null;
254
252
 
@@ -260,7 +258,7 @@ export const configureOrderModuleProcessing = ({
260
258
  user,
261
259
  countryCode,
262
260
  },
263
- requestContext as Context,
261
+ unchainedAPI,
264
262
  );
265
263
  },
266
264
 
@@ -283,14 +281,14 @@ export const configureOrderModuleProcessing = ({
283
281
  );
284
282
  },
285
283
 
286
- processOrder: async (initialOrder, params, requestContext) => {
287
- const { modules } = requestContext;
284
+ processOrder: async (initialOrder, params, unchainedAPI) => {
285
+ const { modules } = unchainedAPI;
288
286
  const { paymentContext, deliveryContext, nextStatus: forceNextStatus } = params;
289
287
 
290
288
  const orderId = initialOrder._id;
291
289
  let order = initialOrder;
292
290
  let nextStatus =
293
- forceNextStatus || (await findNextStatus(initialOrder.status, order, requestContext));
291
+ forceNextStatus || (await findNextStatus(initialOrder.status, order, unchainedAPI));
294
292
 
295
293
  if (nextStatus === OrderStatus.PENDING) {
296
294
  // auto charge during transition to pending
@@ -300,10 +298,10 @@ export const configureOrderModuleProcessing = ({
300
298
 
301
299
  await modules.orders.payments.charge(
302
300
  orderPayment,
303
- { transactionContext: paymentContext },
304
- requestContext,
301
+ { userId: order.userId, transactionContext: paymentContext },
302
+ unchainedAPI,
305
303
  );
306
- nextStatus = await findNextStatus(nextStatus, order, requestContext);
304
+ nextStatus = await findNextStatus(nextStatus, order, unchainedAPI);
307
305
  }
308
306
 
309
307
  if (nextStatus === OrderStatus.REJECTED) {
@@ -313,10 +311,10 @@ export const configureOrderModuleProcessing = ({
313
311
  });
314
312
  await modules.orders.payments.cancel(
315
313
  orderPayment,
316
- { transactionContext: paymentContext },
317
- requestContext,
314
+ { userId: order.userId, transactionContext: paymentContext },
315
+ unchainedAPI,
318
316
  );
319
- nextStatus = await findNextStatus(nextStatus, order, requestContext);
317
+ nextStatus = await findNextStatus(nextStatus, order, unchainedAPI);
320
318
  }
321
319
 
322
320
  if (nextStatus === OrderStatus.CONFIRMED) {
@@ -326,8 +324,8 @@ export const configureOrderModuleProcessing = ({
326
324
  });
327
325
  await modules.orders.payments.confirm(
328
326
  orderPayment,
329
- { transactionContext: paymentContext },
330
- requestContext,
327
+ { userId: order.userId, transactionContext: paymentContext },
328
+ unchainedAPI,
331
329
  );
332
330
 
333
331
  const orderDelivery = await modules.orders.deliveries.findDelivery({
@@ -343,7 +341,7 @@ export const configureOrderModuleProcessing = ({
343
341
  status: OrderStatus.CONFIRMED,
344
342
  info: 'before delivery',
345
343
  },
346
- requestContext,
344
+ unchainedAPI,
347
345
  );
348
346
 
349
347
  await modules.orders.deliveries.send(
@@ -352,7 +350,7 @@ export const configureOrderModuleProcessing = ({
352
350
  order,
353
351
  deliveryContext,
354
352
  },
355
- requestContext,
353
+ unchainedAPI,
356
354
  );
357
355
 
358
356
  const orderPositions = await findOrderPositions(order);
@@ -377,7 +375,7 @@ export const configureOrderModuleProcessing = ({
377
375
  {
378
376
  items: tokenizedItems,
379
377
  },
380
- requestContext,
378
+ unchainedAPI,
381
379
  );
382
380
  }
383
381
 
@@ -395,7 +393,7 @@ export const configureOrderModuleProcessing = ({
395
393
  deliveryContext,
396
394
  },
397
395
  },
398
- requestContext,
396
+ unchainedAPI,
399
397
  );
400
398
  }
401
399
 
@@ -411,7 +409,7 @@ export const configureOrderModuleProcessing = ({
411
409
  orderId,
412
410
  orderPositionId: orderPosition._id,
413
411
  },
414
- requestContext,
412
+ unchainedAPI,
415
413
  );
416
414
  }),
417
415
  );
@@ -422,66 +420,58 @@ export const configureOrderModuleProcessing = ({
422
420
  // ???
423
421
  }
424
422
 
425
- nextStatus = await findNextStatus(nextStatus, order, requestContext);
423
+ nextStatus = await findNextStatus(nextStatus, order, unchainedAPI);
426
424
  }
427
425
 
428
426
  order = await updateStatus(
429
427
  order._id,
430
428
  { status: nextStatus, info: 'order processed' },
431
- requestContext,
429
+ unchainedAPI,
432
430
  );
433
431
 
434
432
  if (initialOrder.status !== order.status) {
435
433
  if (order.status === OrderStatus.REJECTED) {
436
- await modules.orders.sendOrderRejectionToCustomer(order, params, requestContext);
434
+ await modules.orders.sendOrderRejectionToCustomer(order, params, unchainedAPI);
437
435
  } else {
438
- await modules.orders.sendOrderConfirmationToCustomer(order, params, requestContext);
436
+ await modules.orders.sendOrderConfirmationToCustomer(order, params, unchainedAPI);
439
437
  }
440
438
  }
441
439
 
442
440
  return order;
443
441
  },
444
442
 
445
- sendOrderConfirmationToCustomer: async (order, params, { modules, localeContext, userId }) => {
443
+ sendOrderConfirmationToCustomer: async (order, params, { modules }) => {
446
444
  const user = await modules.users.findUserById(order.userId);
447
- const locale = modules.users.userLocale(user, {
448
- localeContext,
449
- });
450
- await modules.worker.addWork(
451
- {
452
- type: 'MESSAGE',
453
- retries: 0,
454
- input: {
455
- ...params,
456
- locale,
457
- template: 'ORDER_CONFIRMATION',
458
- orderId: order._id,
459
- },
445
+ const locale = modules.users.userLocale(user);
446
+
447
+ await modules.worker.addWork({
448
+ type: 'MESSAGE',
449
+ retries: 0,
450
+ input: {
451
+ ...params,
452
+ locale,
453
+ template: 'ORDER_CONFIRMATION',
454
+ orderId: order._id,
460
455
  },
461
- userId,
462
- );
456
+ });
463
457
 
464
458
  return order;
465
459
  },
466
460
 
467
- sendOrderRejectionToCustomer: async (order, params, { modules, localeContext, userId }) => {
461
+ sendOrderRejectionToCustomer: async (order, params, { modules }) => {
468
462
  const user = await modules.users.findUserById(order.userId);
469
- const locale = modules.users.userLocale(user, {
470
- localeContext,
471
- });
472
- await modules.worker.addWork(
473
- {
474
- type: 'MESSAGE',
475
- retries: 0,
476
- input: {
477
- ...params,
478
- locale,
479
- template: 'ORDER_REJECTION',
480
- orderId: order._id,
481
- },
463
+ const locale = modules.users.userLocale(user);
464
+
465
+ await modules.worker.addWork({
466
+ type: 'MESSAGE',
467
+ retries: 0,
468
+ input: {
469
+ ...params,
470
+ locale,
471
+ template: 'ORDER_REJECTION',
472
+ orderId: order._id,
482
473
  },
483
- userId,
484
- );
474
+ });
485
475
 
486
476
  return order;
487
477
  },
@@ -3,7 +3,7 @@ import { Collection, FindOptions, Query } from '@unchainedshop/types/common';
3
3
  import { Order, OrderQueries, OrderQuery } from '@unchainedshop/types/orders';
4
4
  import { generateDbFilterById, buildSortOptions } from '@unchainedshop/utils';
5
5
 
6
- const buildFindSelector = ({ includeCarts, status, userId, queryString }: OrderQuery) => {
6
+ export const buildFindSelector = ({ includeCarts, status, userId, queryString }: OrderQuery) => {
7
7
  const selector: Query = {};
8
8
 
9
9
  if (userId) {
@@ -8,8 +8,8 @@ export const configureOrderModuleTransformations = ({
8
8
  Orders: Collection<Order>;
9
9
  }): OrderTransformations => {
10
10
  return {
11
- discounted: async (order, orderDiscount, requestContext) => {
12
- const { modules } = requestContext;
11
+ discounted: async (order, orderDiscount, unchainedAPI) => {
12
+ const { modules } = unchainedAPI;
13
13
 
14
14
  // Delivery discounts
15
15
  const orderDelivery = await modules.orders.deliveries.findDelivery({
@@ -18,7 +18,7 @@ export const configureOrderModuleTransformations = ({
18
18
  const orderDeliveryDiscounts = modules.orders.deliveries.discounts(
19
19
  orderDelivery,
20
20
  { order, orderDiscount },
21
- requestContext,
21
+ unchainedAPI,
22
22
  );
23
23
 
24
24
  // Payment discounts
@@ -28,7 +28,7 @@ export const configureOrderModuleTransformations = ({
28
28
  const orderPaymentDiscounts = modules.orders.payments.discounts(
29
29
  orderPayment,
30
30
  { order, orderDiscount },
31
- requestContext,
31
+ unchainedAPI,
32
32
  );
33
33
 
34
34
  // Position discounts
@@ -36,7 +36,7 @@ export const configureOrderModuleTransformations = ({
36
36
  orderId: order._id,
37
37
  });
38
38
  const orderPositionDiscounts = orderPositions.flatMap((orderPosition) =>
39
- modules.orders.positions.discounts(orderPosition, { order, orderDiscount }, requestContext),
39
+ modules.orders.positions.discounts(orderPosition, { order, orderDiscount }, unchainedAPI),
40
40
  );
41
41
 
42
42
  // order discounts
@@ -60,8 +60,8 @@ export const configureOrderModuleTransformations = ({
60
60
  return discounted;
61
61
  },
62
62
 
63
- discountTotal: async (order, orderDiscount, requestContext) => {
64
- const { modules } = requestContext;
63
+ discountTotal: async (order, orderDiscount, unchainedAPI) => {
64
+ const { modules } = unchainedAPI;
65
65
  const orderDiscountId = orderDiscount._id;
66
66
 
67
67
  // Delivery discounts
@@ -71,7 +71,7 @@ export const configureOrderModuleTransformations = ({
71
71
  const orderDeliveryDiscountSum =
72
72
  orderDelivery &&
73
73
  modules.orders.deliveries
74
- .pricingSheet(orderDelivery, order.currency, requestContext)
74
+ .pricingSheet(orderDelivery, order.currency, unchainedAPI)
75
75
  .discountSum(orderDiscountId);
76
76
 
77
77
  // Payment discounts
@@ -81,7 +81,7 @@ export const configureOrderModuleTransformations = ({
81
81
  const orderPaymentDiscountSum =
82
82
  orderPayment &&
83
83
  modules.orders.payments
84
- .pricingSheet(orderPayment, order.currency, requestContext)
84
+ .pricingSheet(orderPayment, order.currency, unchainedAPI)
85
85
  .discountSum(orderDiscountId);
86
86
 
87
87
  // Position discounts
@@ -90,7 +90,7 @@ export const configureOrderModuleTransformations = ({
90
90
  });
91
91
  const orderPositionDiscounts = orderPositions.map((orderPosition) =>
92
92
  modules.orders.positions
93
- .pricingSheet(orderPosition, order.currency, requestContext)
93
+ .pricingSheet(orderPosition, order.currency, unchainedAPI)
94
94
  .discountSum(orderDiscountId),
95
95
  );
96
96
 
@@ -1,6 +1,5 @@
1
- import { Context } from '@unchainedshop/types/api';
2
1
  import { Update } from '@unchainedshop/types/common';
3
- import { ModuleInput } from '@unchainedshop/types/core';
2
+ import { ModuleInput, UnchainedCore } from '@unchainedshop/types/core';
4
3
  import { Order, OrderStatus, OrdersModule, OrdersSettingsOptions } from '@unchainedshop/types/orders';
5
4
  import { OrderDelivery } from '@unchainedshop/types/orders.deliveries';
6
5
  import { OrderPayment } from '@unchainedshop/types/orders.payments';
@@ -60,11 +59,7 @@ export const configureOrdersModule = async ({
60
59
  return findNewOrderNumber(order, index + 1);
61
60
  };
62
61
 
63
- const updateStatus: OrdersModule['updateStatus'] = async (
64
- orderId,
65
- { status, info },
66
- requestContext,
67
- ) => {
62
+ const updateStatus: OrdersModule['updateStatus'] = async (orderId, { status, info }) => {
68
63
  const selector = generateDbFilterById(orderId);
69
64
  const order = await Orders.findOne(selector, {});
70
65
 
@@ -74,7 +69,6 @@ export const configureOrdersModule = async ({
74
69
  const $set: Partial<Order> = {
75
70
  status,
76
71
  updated: new Date(),
77
- updatedBy: requestContext.userId,
78
72
  };
79
73
 
80
74
  switch (status) {
@@ -122,8 +116,8 @@ export const configureOrdersModule = async ({
122
116
  return Orders.findOne(selector, {});
123
117
  };
124
118
 
125
- const updateDiscounts = async (order: Order, requestContext: Context) => {
126
- const { modules } = requestContext;
119
+ const updateDiscounts = async (order: Order, unchainedAPI: UnchainedCore) => {
120
+ const { modules } = unchainedAPI;
127
121
 
128
122
  // 1. go through existing order-discounts and check if discount still valid,
129
123
  // those who are not valid anymore should get removed
@@ -133,10 +127,10 @@ export const configureOrdersModule = async ({
133
127
 
134
128
  await Promise.all(
135
129
  discounts.map(async (discount) => {
136
- const isValid = await modules.orders.discounts.isValid(discount, requestContext);
130
+ const isValid = await modules.orders.discounts.isValid(discount, unchainedAPI);
137
131
 
138
132
  if (!isValid) {
139
- await modules.orders.discounts.delete(discount._id, requestContext);
133
+ await modules.orders.discounts.delete(discount._id, unchainedAPI);
140
134
  }
141
135
  }),
142
136
  );
@@ -148,34 +142,31 @@ export const configureOrdersModule = async ({
148
142
 
149
143
  const currentDiscountKeys = cleanedDiscounts.map(({ discountKey }) => discountKey);
150
144
 
151
- const director = await OrderDiscountDirector.actions({ order, code: null }, requestContext);
145
+ const director = await OrderDiscountDirector.actions({ order, code: null }, unchainedAPI);
152
146
  const systemDiscounts = await director.findSystemDiscounts();
153
147
 
154
148
  await Promise.all(
155
149
  systemDiscounts
156
150
  .filter((key) => currentDiscountKeys.indexOf(key) === -1)
157
151
  .map((discountKey) =>
158
- modules.orders.discounts.create(
159
- {
160
- orderId: order._id,
161
- discountKey,
162
- trigger: OrderDiscountTrigger.SYSTEM,
163
- },
164
- requestContext.userId,
165
- ),
152
+ modules.orders.discounts.create({
153
+ orderId: order._id,
154
+ discountKey,
155
+ trigger: OrderDiscountTrigger.SYSTEM,
156
+ }),
166
157
  ),
167
158
  );
168
159
  };
169
160
 
170
- const initProviders = async (order: Order, requestContext: Context) => {
171
- const { modules } = requestContext;
161
+ const initProviders = async (order: Order, unchainedAPI: UnchainedCore) => {
162
+ const { modules } = unchainedAPI;
172
163
 
173
164
  let updatedOrder = order;
174
165
 
175
166
  // Init delivery provider
176
167
  const supportedDeliveryProviders = await modules.delivery.findSupported(
177
168
  { order: updatedOrder },
178
- requestContext,
169
+ unchainedAPI,
179
170
  );
180
171
 
181
172
  const orderDelivery = await modules.orders.deliveries.findDelivery({
@@ -193,13 +184,13 @@ export const configureOrdersModule = async ({
193
184
  const defaultOrderDeliveryProvider = await modules.delivery.determineDefault(
194
185
  supportedDeliveryProviders,
195
186
  { order: updatedOrder },
196
- requestContext,
187
+ unchainedAPI,
197
188
  );
198
189
  if (defaultOrderDeliveryProvider) {
199
190
  updatedOrder = await modules.orders.setDeliveryProvider(
200
191
  updatedOrder._id,
201
192
  defaultOrderDeliveryProvider._id,
202
- requestContext,
193
+ unchainedAPI,
203
194
  );
204
195
  }
205
196
  }
@@ -207,7 +198,7 @@ export const configureOrdersModule = async ({
207
198
  // Init payment provider
208
199
  const supportedPaymentProviders = await modules.payment.paymentProviders.findSupported(
209
200
  { order: updatedOrder },
210
- requestContext,
201
+ unchainedAPI,
211
202
  );
212
203
 
213
204
  const orderPayment = await modules.orders.payments.findOrderPayment({
@@ -234,22 +225,22 @@ export const configureOrdersModule = async ({
234
225
  const defaultOrderPaymentProvider = await modules.payment.paymentProviders.determineDefault(
235
226
  supportedPaymentProviders,
236
227
  { order: updatedOrder, paymentCredentials },
237
- requestContext,
228
+ unchainedAPI,
238
229
  );
239
230
 
240
231
  if (defaultOrderPaymentProvider) {
241
232
  updatedOrder = await modules.orders.setPaymentProvider(
242
233
  updatedOrder._id,
243
234
  defaultOrderPaymentProvider._id,
244
- requestContext,
235
+ unchainedAPI,
245
236
  );
246
237
  }
247
238
  }
248
239
  return updatedOrder;
249
240
  };
250
241
 
251
- const updateCalculation: OrdersModule['updateCalculation'] = async (orderId, requestContext) => {
252
- const { modules } = requestContext;
242
+ const updateCalculation: OrdersModule['updateCalculation'] = async (orderId, unchainedAPI) => {
243
+ const { modules } = unchainedAPI;
253
244
 
254
245
  const selector = generateDbFilterById(orderId);
255
246
  let order = (await Orders.findOne(selector, {})) as Order;
@@ -257,38 +248,35 @@ export const configureOrdersModule = async ({
257
248
  // Don't recalculate orders, only carts
258
249
  if (order.status !== null) return order;
259
250
 
260
- await updateDiscounts(order, requestContext);
251
+ await updateDiscounts(order, unchainedAPI);
261
252
 
262
- order = await initProviders(order, requestContext);
253
+ order = await initProviders(order, unchainedAPI);
263
254
 
264
255
  let orderPositions = (await findOrderPositions(order)) as OrderPosition[];
265
256
  orderPositions = await Promise.all(
266
257
  orderPositions.map(async (orderPosition) =>
267
- modules.orders.positions.updateCalculation(orderPosition, requestContext),
258
+ modules.orders.positions.updateCalculation(orderPosition, unchainedAPI),
268
259
  ),
269
260
  );
270
261
 
271
262
  let orderDelivery = (await findOrderDelivery(order)) as OrderDelivery;
272
263
  if (orderDelivery) {
273
- orderDelivery = await modules.orders.deliveries.updateCalculation(orderDelivery, requestContext);
264
+ orderDelivery = await modules.orders.deliveries.updateCalculation(orderDelivery, unchainedAPI);
274
265
  }
275
266
  let orderPayment = (await findOrderPayment(order)) as OrderPayment;
276
267
  if (orderPayment) {
277
- orderPayment = await modules.orders.payments.updateCalculation(orderPayment, requestContext);
268
+ orderPayment = await modules.orders.payments.updateCalculation(orderPayment, unchainedAPI);
278
269
  }
279
270
 
280
271
  orderPositions = await Promise.all(
281
272
  orderPositions.map(async (orderPosition) =>
282
- modules.orders.positions.updateScheduling(
283
- { order, orderDelivery, orderPosition },
284
- requestContext,
285
- ),
273
+ modules.orders.positions.updateScheduling({ order, orderDelivery, orderPosition }, unchainedAPI),
286
274
  ),
287
275
  );
288
276
 
289
277
  const pricing = await OrderPricingDirector.actions(
290
278
  { order, orderPositions, orderDelivery, orderPayment },
291
- requestContext,
279
+ unchainedAPI,
292
280
  );
293
281
 
294
282
  const calculation = await pricing.calculate();
@@ -297,7 +285,6 @@ export const configureOrdersModule = async ({
297
285
  $set: {
298
286
  calculation,
299
287
  updated: new Date(),
300
- updatedBy: requestContext.userId,
301
288
  },
302
289
  });
303
290