@unchainedshop/core-orders 4.0.0-rc.9 → 4.0.1

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 (140) hide show
  1. package/lib/db/OrderDeliveriesCollection.d.ts +2 -2
  2. package/lib/db/OrderDeliveriesCollection.d.ts.map +1 -1
  3. package/lib/db/OrderDeliveriesSchema.d.ts +3 -0
  4. package/lib/db/OrderDeliveriesSchema.d.ts.map +1 -0
  5. package/lib/db/OrderDeliveriesSchema.js +20 -0
  6. package/lib/db/OrderDeliveriesSchema.js.map +1 -0
  7. package/lib/db/OrderDiscountTrigger.d.ts +5 -0
  8. package/lib/db/OrderDiscountTrigger.d.ts.map +1 -0
  9. package/lib/db/OrderDiscountTrigger.js +6 -0
  10. package/lib/db/OrderDiscountTrigger.js.map +1 -0
  11. package/lib/db/OrderDiscountsCollection.d.ts +2 -2
  12. package/lib/db/OrderDiscountsCollection.d.ts.map +1 -1
  13. package/lib/db/OrderDiscountsSchema.d.ts +3 -0
  14. package/lib/db/OrderDiscountsSchema.d.ts.map +1 -0
  15. package/lib/db/OrderDiscountsSchema.js +12 -0
  16. package/lib/db/OrderDiscountsSchema.js.map +1 -0
  17. package/lib/db/OrderPaymentsCollection.d.ts +3 -3
  18. package/lib/db/OrderPaymentsCollection.d.ts.map +1 -1
  19. package/lib/db/OrderPaymentsSchema.d.ts +3 -0
  20. package/lib/db/OrderPaymentsSchema.d.ts.map +1 -0
  21. package/lib/db/OrderPaymentsSchema.js +20 -0
  22. package/lib/db/OrderPaymentsSchema.js.map +1 -0
  23. package/lib/db/OrderPositionsCollection.d.ts +2 -3
  24. package/lib/db/OrderPositionsCollection.d.ts.map +1 -1
  25. package/lib/db/OrderPositionsCollection.js.map +1 -1
  26. package/lib/db/OrderPositionsSchema.d.ts +3 -0
  27. package/lib/db/OrderPositionsSchema.d.ts.map +1 -0
  28. package/lib/db/OrderPositionsSchema.js +37 -0
  29. package/lib/db/OrderPositionsSchema.js.map +1 -0
  30. package/lib/db/OrdersCollection.d.ts +5 -1
  31. package/lib/db/OrdersCollection.d.ts.map +1 -1
  32. package/lib/db/OrdersCollection.js +25 -21
  33. package/lib/db/OrdersCollection.js.map +1 -1
  34. package/lib/db/OrdersSchema.d.ts +3 -0
  35. package/lib/db/OrdersSchema.d.ts.map +1 -0
  36. package/lib/db/OrdersSchema.js +30 -0
  37. package/lib/db/OrdersSchema.js.map +1 -0
  38. package/lib/director/OrderDiscountAdapter.d.ts +4 -0
  39. package/lib/director/OrderDiscountAdapter.d.ts.map +1 -0
  40. package/lib/director/OrderDiscountAdapter.js +3 -0
  41. package/lib/director/OrderDiscountAdapter.js.map +1 -0
  42. package/lib/director/OrderDiscountConfiguration.d.ts +6 -0
  43. package/lib/director/OrderDiscountConfiguration.d.ts.map +1 -0
  44. package/lib/director/OrderDiscountConfiguration.js +2 -0
  45. package/lib/director/OrderDiscountConfiguration.js.map +1 -0
  46. package/lib/director/OrderDiscountDirector.d.ts +3 -0
  47. package/lib/director/OrderDiscountDirector.d.ts.map +1 -0
  48. package/lib/director/OrderDiscountDirector.js +3 -0
  49. package/lib/director/OrderDiscountDirector.js.map +1 -0
  50. package/lib/director/OrderPricingAdapter.d.ts +4 -0
  51. package/lib/director/OrderPricingAdapter.d.ts.map +1 -0
  52. package/lib/director/OrderPricingAdapter.js +25 -0
  53. package/lib/director/OrderPricingAdapter.js.map +1 -0
  54. package/lib/director/OrderPricingDirector.d.ts +3 -0
  55. package/lib/director/OrderPricingDirector.d.ts.map +1 -0
  56. package/lib/director/OrderPricingDirector.js +39 -0
  57. package/lib/director/OrderPricingDirector.js.map +1 -0
  58. package/lib/director/OrderPricingSheet.d.ts +4 -0
  59. package/lib/director/OrderPricingSheet.d.ts.map +1 -0
  60. package/lib/director/OrderPricingSheet.js +101 -0
  61. package/lib/director/OrderPricingSheet.js.map +1 -0
  62. package/lib/migrations/20250502111800-currency-code copy.d.ts +3 -0
  63. package/lib/migrations/20250502111800-currency-code copy.d.ts.map +1 -0
  64. package/lib/migrations/20250502111800-currency-code copy.js +14 -0
  65. package/lib/migrations/20250502111800-currency-code copy.js.map +1 -0
  66. package/lib/migrations/20251020080000-position-config.d.ts +3 -0
  67. package/lib/migrations/20251020080000-position-config.d.ts.map +1 -0
  68. package/lib/migrations/20251020080000-position-config.js +14 -0
  69. package/lib/migrations/20251020080000-position-config.js.map +1 -0
  70. package/lib/module/buildFindSelector.d.ts +1 -1
  71. package/lib/module/buildFindSelector.d.ts.map +1 -1
  72. package/lib/module/buildFindSelector.js +17 -1
  73. package/lib/module/buildFindSelector.js.map +1 -1
  74. package/lib/module/configureOrderDeliveriesModule.d.ts +9 -6
  75. package/lib/module/configureOrderDeliveriesModule.d.ts.map +1 -1
  76. package/lib/module/configureOrderDeliveriesModule.js +14 -10
  77. package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
  78. package/lib/module/configureOrderDiscountsModule.d.ts +5 -5
  79. package/lib/module/configureOrderDiscountsModule.d.ts.map +1 -1
  80. package/lib/module/configureOrderDiscountsModule.js +3 -3
  81. package/lib/module/configureOrderDiscountsModule.js.map +1 -1
  82. package/lib/module/configureOrderPaymentsModule.d.ts +10 -7
  83. package/lib/module/configureOrderPaymentsModule.d.ts.map +1 -1
  84. package/lib/module/configureOrderPaymentsModule.js +18 -10
  85. package/lib/module/configureOrderPaymentsModule.js.map +1 -1
  86. package/lib/module/configureOrderPositionsModule.d.ts +17 -6
  87. package/lib/module/configureOrderPositionsModule.d.ts.map +1 -1
  88. package/lib/module/configureOrderPositionsModule.js +25 -5
  89. package/lib/module/configureOrderPositionsModule.js.map +1 -1
  90. package/lib/module/configureOrdersModule-mutations.d.ts +14 -13
  91. package/lib/module/configureOrdersModule-mutations.d.ts.map +1 -1
  92. package/lib/module/configureOrdersModule-mutations.js +19 -11
  93. package/lib/module/configureOrdersModule-mutations.js.map +1 -1
  94. package/lib/module/configureOrdersModule-processing.d.ts +14 -0
  95. package/lib/module/configureOrdersModule-processing.d.ts.map +1 -0
  96. package/lib/module/configureOrdersModule-processing.js +348 -0
  97. package/lib/module/configureOrdersModule-processing.js.map +1 -0
  98. package/lib/module/configureOrdersModule-queries.d.ts +21 -6
  99. package/lib/module/configureOrdersModule-queries.d.ts.map +1 -1
  100. package/lib/module/configureOrdersModule-queries.js +19 -84
  101. package/lib/module/configureOrdersModule-queries.js.map +1 -1
  102. package/lib/module/configureOrdersModule-transformations.d.ts +6 -0
  103. package/lib/module/configureOrdersModule-transformations.d.ts.map +1 -0
  104. package/lib/module/configureOrdersModule-transformations.js +112 -0
  105. package/lib/module/configureOrdersModule-transformations.js.map +1 -0
  106. package/lib/module/configureOrdersModule.d.ts +154 -21
  107. package/lib/module/configureOrdersModule.d.ts.map +1 -1
  108. package/lib/module/configureOrdersModule.js +9 -3
  109. package/lib/module/configureOrdersModule.js.map +1 -1
  110. package/lib/orders-settings.d.ts +9 -13
  111. package/lib/orders-settings.d.ts.map +1 -1
  112. package/lib/orders-settings.js +8 -8
  113. package/lib/orders-settings.js.map +1 -1
  114. package/lib/service/migrateOrderCartService.d.ts +3 -0
  115. package/lib/service/migrateOrderCartService.d.ts.map +1 -0
  116. package/lib/service/migrateOrderCartService.js +32 -0
  117. package/lib/service/migrateOrderCartService.js.map +1 -0
  118. package/lib/service/nextUserCartService.d.ts +3 -0
  119. package/lib/service/nextUserCartService.d.ts.map +1 -0
  120. package/lib/service/nextUserCartService.js +34 -0
  121. package/lib/service/nextUserCartService.js.map +1 -0
  122. package/lib/service/orderServices.d.ts +3 -0
  123. package/lib/service/orderServices.d.ts.map +1 -0
  124. package/lib/service/orderServices.js +7 -0
  125. package/lib/service/orderServices.js.map +1 -0
  126. package/package.json +4 -4
  127. package/src/db/OrderDeliveriesCollection.ts +2 -2
  128. package/src/db/OrderDiscountsCollection.ts +2 -2
  129. package/src/db/OrderPaymentsCollection.ts +3 -3
  130. package/src/db/OrderPositionsCollection.ts +2 -3
  131. package/src/db/OrdersCollection.ts +31 -22
  132. package/src/module/buildFindSelector.ts +19 -1
  133. package/src/module/configureOrderDeliveriesModule.ts +28 -16
  134. package/src/module/configureOrderDiscountsModule.ts +11 -11
  135. package/src/module/configureOrderPaymentsModule.ts +31 -20
  136. package/src/module/configureOrderPositionsModule.ts +48 -17
  137. package/src/module/configureOrdersModule-mutations.ts +46 -44
  138. package/src/module/configureOrdersModule-queries.ts +42 -91
  139. package/src/module/configureOrdersModule.ts +21 -33
  140. package/src/orders-settings.ts +21 -20
@@ -6,37 +6,16 @@ import { OrderPaymentsCollection } from '../db/OrderPaymentsCollection.js';
6
6
  import { OrderPositionsCollection } from '../db/OrderPositionsCollection.js';
7
7
  import { OrdersCollection, Order, OrderStatus } from '../db/OrdersCollection.js';
8
8
  import { ordersSettings, OrdersSettingsOptions } from '../orders-settings.js';
9
- import {
10
- configureOrderDeliveriesModule,
11
- OrderDeliveriesModule,
12
- } from './configureOrderDeliveriesModule.js';
13
- import { configureOrderDiscountsModule, OrderDiscountsModule } from './configureOrderDiscountsModule.js';
14
- import { configureOrderPaymentsModule, OrderPaymentsModule } from './configureOrderPaymentsModule.js';
15
- import { configureOrderPositionsModule, OrderPositionsModule } from './configureOrderPositionsModule.js';
16
- import { configureOrderModuleMutations, OrderMutations } from './configureOrdersModule-mutations.js';
17
- import { configureOrdersModuleQueries, OrderQueries } from './configureOrdersModule-queries.js';
9
+ import { configureOrderDeliveriesModule } from './configureOrderDeliveriesModule.js';
10
+ import { configureOrderDiscountsModule } from './configureOrderDiscountsModule.js';
11
+ import { configureOrderPaymentsModule } from './configureOrderPaymentsModule.js';
12
+ import { configureOrderPositionsModule } from './configureOrderPositionsModule.js';
13
+ import { configureOrderModuleMutations } from './configureOrdersModule-mutations.js';
14
+ import { configureOrdersModuleQueries } from './configureOrdersModule-queries.js';
18
15
  import { emit, registerEvents } from '@unchainedshop/events';
19
16
 
20
17
  import renameCurrencyCode from '../migrations/20250502111800-currency-code.js';
21
18
 
22
- export type OrdersModule = OrderQueries &
23
- OrderMutations & {
24
- // Sub entities
25
- deliveries: OrderDeliveriesModule;
26
- discounts: OrderDiscountsModule;
27
- positions: OrderPositionsModule;
28
- payments: OrderPaymentsModule;
29
-
30
- updateStatus: (orderId: string, params: { status: OrderStatus; info?: string }) => Promise<Order>;
31
- acquireLock: (
32
- orderId: string,
33
- identifier: string,
34
- timeout?: number,
35
- ) => Promise<{ release: () => void }>;
36
- setDeliveryProvider: (orderId: string, deliveryProviderId: string) => Promise<Order>;
37
- setPaymentProvider: (orderId: string, paymentProviderId: string) => Promise<Order>;
38
- };
39
-
40
19
  // @kontsedal/locco uses a deprecated way of importing files in ESM (node16 behavior)
41
20
  const require = createRequire(import.meta.url);
42
21
  const { Locker, MongoAdapter } = require('@kontsedal/locco');
@@ -52,7 +31,7 @@ export const configureOrdersModule = async ({
52
31
  db,
53
32
  migrationRepository,
54
33
  options: orderOptions = {},
55
- }: ModuleInput<OrdersSettingsOptions>): Promise<OrdersModule> => {
34
+ }: ModuleInput<OrdersSettingsOptions>) => {
56
35
  // Migration v3 -> v4
57
36
  renameCurrencyCode(migrationRepository);
58
37
 
@@ -117,10 +96,14 @@ export const configureOrdersModule = async ({
117
96
  positions: orderPositionsModule,
118
97
  payments: orderPaymentsModule,
119
98
 
120
- updateStatus: async (orderId, { status, info }) => {
99
+ updateStatus: async (
100
+ orderId: string,
101
+ { status, info }: { status: OrderStatus | null; info?: string },
102
+ ) => {
121
103
  const selector = generateDbFilterById(orderId);
122
104
  const order = await Orders.findOne(selector, {});
123
105
 
106
+ if (!order) return null;
124
107
  if (order.status === status) return order;
125
108
 
126
109
  const date = new Date();
@@ -197,7 +180,7 @@ export const configureOrdersModule = async ({
197
180
  return await locker.lock(`order:${identifier}:${orderId}`, timeout).acquire();
198
181
  },
199
182
 
200
- setDeliveryProvider: async (orderId, deliveryProviderId) => {
183
+ setDeliveryProvider: async (orderId: string, deliveryProviderId: string) => {
201
184
  const delivery = await OrderDeliveries.findOne({
202
185
  orderId,
203
186
  deliveryProviderId,
@@ -215,7 +198,7 @@ export const configureOrdersModule = async ({
215
198
  )._id;
216
199
 
217
200
  const order = await Orders.findOneAndUpdate(
218
- { _id: orderId },
201
+ { _id: orderId, deliveryId: { $ne: deliveryId } },
219
202
  {
220
203
  $set: {
221
204
  deliveryId,
@@ -225,6 +208,7 @@ export const configureOrdersModule = async ({
225
208
  { returnDocument: 'after' },
226
209
  );
227
210
 
211
+ if (!order) return null;
228
212
  await emit('ORDER_SET_DELIVERY_PROVIDER', {
229
213
  order,
230
214
  deliveryProviderId,
@@ -233,7 +217,7 @@ export const configureOrdersModule = async ({
233
217
  return order;
234
218
  },
235
219
 
236
- setPaymentProvider: async (orderId, paymentProviderId) => {
220
+ setPaymentProvider: async (orderId: string, paymentProviderId: string) => {
237
221
  const payment = await OrderPayments.findOne({
238
222
  orderId,
239
223
  paymentProviderId,
@@ -250,14 +234,16 @@ export const configureOrdersModule = async ({
250
234
  status: null,
251
235
  })
252
236
  )._id;
237
+
253
238
  const order = await Orders.findOneAndUpdate(
254
- { _id: orderId },
239
+ { _id: orderId, paymentId: { $ne: paymentId } },
255
240
  {
256
241
  $set: { paymentId, updated: new Date() },
257
242
  },
258
243
  { returnDocument: 'after' },
259
244
  );
260
245
 
246
+ if (!order) return null;
261
247
  await emit('ORDER_SET_PAYMENT_PROVIDER', {
262
248
  order,
263
249
  paymentProviderId,
@@ -267,3 +253,5 @@ export const configureOrdersModule = async ({
267
253
  },
268
254
  };
269
255
  };
256
+
257
+ export type OrdersModule = Awaited<ReturnType<typeof configureOrdersModule>>;
@@ -5,18 +5,20 @@ export interface OrderSettingsOrderPositionValidation<Product = unknown> {
5
5
  order: Order;
6
6
  product: Product;
7
7
  quantityDiff?: number;
8
- configuration?: { key: string; value: string }[];
8
+ configuration?: { key: string; value: string }[] | null;
9
9
  }
10
10
 
11
- export interface OrdersSettingsOptions {
12
- ensureUserHasCart?: boolean;
13
- orderNumberHashFn?: (order: Order, index: number) => string;
14
- validateOrderPosition?: <UnchainedAPI = unknown>(
11
+ export interface OrdersSettings {
12
+ ensureUserHasCart: boolean;
13
+ orderNumberHashFn: (order: Order, index: number) => string;
14
+ validateOrderPosition: <UnchainedAPI = unknown>(
15
15
  validationParams: OrderSettingsOrderPositionValidation,
16
16
  unchainedAPI: UnchainedAPI,
17
17
  ) => Promise<void>;
18
- lockOrderDuringCheckout?: boolean;
18
+ lockOrderDuringCheckout: boolean;
19
+ configureSettings: (options?: OrdersSettingsOptions) => void;
19
20
  }
21
+ export type OrdersSettingsOptions = Omit<Partial<OrdersSettings>, 'configureSettings'>;
20
22
 
21
23
  export const defaultValidateOrderPosition = async ({ product }, { modules }: any) => {
22
24
  if (!modules.products.isActive(product)) {
@@ -24,21 +26,20 @@ export const defaultValidateOrderPosition = async ({ product }, { modules }: any
24
26
  }
25
27
  };
26
28
 
27
- export const ordersSettings = {
28
- ensureUserHasCart: null,
29
- orderNumberHashFn: null,
30
- validateOrderPosition: null,
29
+ export const ordersSettings: OrdersSettings = {
30
+ ensureUserHasCart: false,
31
+ orderNumberHashFn: generateRandomHash,
32
+ validateOrderPosition: defaultValidateOrderPosition,
31
33
  lockOrderDuringCheckout: false,
32
-
33
34
  configureSettings({
34
- ensureUserHasCart = false,
35
- orderNumberHashFn = generateRandomHash,
36
- validateOrderPosition = defaultValidateOrderPosition,
37
- lockOrderDuringCheckout = false,
38
- }: OrdersSettingsOptions = {}) {
39
- this.ensureUserHasCart = ensureUserHasCart;
40
- this.orderNumberHashFn = orderNumberHashFn;
41
- this.validateOrderPosition = validateOrderPosition;
42
- this.lockOrderDuringCheckout = lockOrderDuringCheckout;
35
+ ensureUserHasCart,
36
+ orderNumberHashFn,
37
+ validateOrderPosition,
38
+ lockOrderDuringCheckout,
39
+ } = {}) {
40
+ this.ensureUserHasCart = ensureUserHasCart || false;
41
+ this.orderNumberHashFn = orderNumberHashFn || generateRandomHash;
42
+ this.validateOrderPosition = validateOrderPosition || defaultValidateOrderPosition;
43
+ this.lockOrderDuringCheckout = lockOrderDuringCheckout || false;
43
44
  },
44
45
  };