@unchainedshop/core-orders 2.14.2 → 3.0.0-alpha3

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 (133) 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 +32 -4
  27. package/lib/module/configureOrderDeliveriesModule.d.ts.map +1 -1
  28. package/lib/module/configureOrderDeliveriesModule.js +8 -18
  29. package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
  30. package/lib/module/configureOrderDiscountsModule.d.ts +22 -4
  31. package/lib/module/configureOrderDiscountsModule.d.ts.map +1 -1
  32. package/lib/module/configureOrderDiscountsModule.js +20 -29
  33. package/lib/module/configureOrderDiscountsModule.js.map +1 -1
  34. package/lib/module/configureOrderPaymentsModule.d.ts +46 -4
  35. package/lib/module/configureOrderPaymentsModule.d.ts.map +1 -1
  36. package/lib/module/configureOrderPaymentsModule.js +7 -19
  37. package/lib/module/configureOrderPaymentsModule.js.map +1 -1
  38. package/lib/module/configureOrderPositionsModule.d.ts +58 -4
  39. package/lib/module/configureOrderPositionsModule.d.ts.map +1 -1
  40. package/lib/module/configureOrderPositionsModule.js +11 -51
  41. package/lib/module/configureOrderPositionsModule.js.map +1 -1
  42. package/lib/module/configureOrdersModule-mutations.d.ts +32 -8
  43. package/lib/module/configureOrdersModule-mutations.d.ts.map +1 -1
  44. package/lib/module/configureOrdersModule-mutations.js +21 -51
  45. package/lib/module/configureOrdersModule-mutations.js.map +1 -1
  46. package/lib/module/configureOrdersModule-processing.d.ts +22 -4
  47. package/lib/module/configureOrdersModule-processing.d.ts.map +1 -1
  48. package/lib/module/configureOrdersModule-processing.js +5 -14
  49. package/lib/module/configureOrdersModule-processing.js.map +1 -1
  50. package/lib/module/configureOrdersModule-queries.d.ts +23 -3
  51. package/lib/module/configureOrdersModule-queries.d.ts.map +1 -1
  52. package/lib/module/configureOrdersModule-queries.js +5 -4
  53. package/lib/module/configureOrdersModule-queries.js.map +1 -1
  54. package/lib/module/configureOrdersModule-transformations.d.ts +15 -1
  55. package/lib/module/configureOrdersModule-transformations.d.ts.map +1 -1
  56. package/lib/module/configureOrdersModule-transformations.js +4 -5
  57. package/lib/module/configureOrdersModule-transformations.js.map +1 -1
  58. package/lib/module/configureOrdersModule.d.ts +20 -2
  59. package/lib/module/configureOrdersModule.d.ts.map +1 -1
  60. package/lib/module/configureOrdersModule.js +17 -9
  61. package/lib/module/configureOrdersModule.js.map +1 -1
  62. package/lib/orders-index.d.ts +10 -12
  63. package/lib/orders-index.d.ts.map +1 -1
  64. package/lib/orders-index.js +10 -11
  65. package/lib/orders-index.js.map +1 -1
  66. package/lib/orders-settings.d.ts +18 -1
  67. package/lib/orders-settings.d.ts.map +1 -1
  68. package/lib/orders-settings.js.map +1 -1
  69. package/lib/service/migrateOrderCartService.d.ts +8 -1
  70. package/lib/service/migrateOrderCartService.d.ts.map +1 -1
  71. package/lib/service/migrateOrderCartService.js +2 -2
  72. package/lib/service/migrateOrderCartService.js.map +1 -1
  73. package/lib/service/nextUserCartService.d.ts +9 -1
  74. package/lib/service/nextUserCartService.d.ts.map +1 -1
  75. package/lib/service/nextUserCartService.js.map +1 -1
  76. package/lib/service/orderServices.d.ts +6 -1
  77. package/lib/service/orderServices.d.ts.map +1 -1
  78. package/lib/service/orderServices.js.map +1 -1
  79. package/lib/types.d.ts +116 -0
  80. package/lib/types.d.ts.map +1 -0
  81. package/lib/types.js +25 -0
  82. package/lib/types.js.map +1 -0
  83. package/package.json +6 -8
  84. package/src/db/OrderDeliveriesCollection.ts +1 -1
  85. package/src/db/OrderDiscountsCollection.ts +1 -1
  86. package/src/db/OrderPaymentsCollection.ts +1 -1
  87. package/src/db/OrderPositionsCollection.ts +1 -1
  88. package/src/db/OrdersCollection.ts +1 -1
  89. package/src/director/OrderDiscountAdapter.ts +1 -1
  90. package/src/director/OrderPricingAdapter.ts +26 -6
  91. package/src/director/OrderPricingDirector.ts +21 -5
  92. package/src/director/OrderPricingSheet.ts +25 -6
  93. package/src/module/buildFindSelector.test.ts +7 -2
  94. package/src/module/configureOrderDeliveriesModule.ts +65 -29
  95. package/src/module/configureOrderDiscountsModule.ts +70 -43
  96. package/src/module/configureOrderPaymentsModule.ts +94 -29
  97. package/src/module/configureOrderPositionsModule.ts +82 -94
  98. package/src/module/configureOrdersModule-mutations.ts +88 -82
  99. package/src/module/configureOrdersModule-processing.ts +38 -23
  100. package/src/module/configureOrdersModule-queries.ts +33 -13
  101. package/src/module/configureOrdersModule-transformations.ts +28 -6
  102. package/src/module/configureOrdersModule.ts +57 -21
  103. package/src/orders-index.ts +12 -16
  104. package/src/orders-settings.ts +20 -1
  105. package/src/service/migrateOrderCartService.ts +14 -7
  106. package/src/service/nextUserCartService.ts +13 -1
  107. package/src/service/orderServices.ts +7 -3
  108. package/src/types.ts +129 -0
  109. package/lib/db/OrderDeliveriesSchema.d.ts +0 -3
  110. package/lib/db/OrderDeliveriesSchema.d.ts.map +0 -1
  111. package/lib/db/OrderDeliveriesSchema.js +0 -20
  112. package/lib/db/OrderDeliveriesSchema.js.map +0 -1
  113. package/lib/db/OrderDiscountsSchema.d.ts +0 -3
  114. package/lib/db/OrderDiscountsSchema.d.ts.map +0 -1
  115. package/lib/db/OrderDiscountsSchema.js +0 -12
  116. package/lib/db/OrderDiscountsSchema.js.map +0 -1
  117. package/lib/db/OrderPaymentsSchema.d.ts +0 -3
  118. package/lib/db/OrderPaymentsSchema.d.ts.map +0 -1
  119. package/lib/db/OrderPaymentsSchema.js +0 -20
  120. package/lib/db/OrderPaymentsSchema.js.map +0 -1
  121. package/lib/db/OrderPositionsSchema.d.ts +0 -3
  122. package/lib/db/OrderPositionsSchema.d.ts.map +0 -1
  123. package/lib/db/OrderPositionsSchema.js +0 -37
  124. package/lib/db/OrderPositionsSchema.js.map +0 -1
  125. package/lib/db/OrdersSchema.d.ts +0 -3
  126. package/lib/db/OrdersSchema.d.ts.map +0 -1
  127. package/lib/db/OrdersSchema.js +0 -30
  128. package/lib/db/OrdersSchema.js.map +0 -1
  129. package/src/db/OrderDeliveriesSchema.ts +0 -24
  130. package/src/db/OrderDiscountsSchema.ts +0 -15
  131. package/src/db/OrderPaymentsSchema.ts +0 -24
  132. package/src/db/OrderPositionsSchema.ts +0 -41
  133. package/src/db/OrdersSchema.ts +0 -34
@@ -1,6 +1,5 @@
1
- import { SortDirection, SortOption } from '@unchainedshop/types/api.js';
2
- import { Order, OrderQueries, OrderQuery, OrderReport } from '@unchainedshop/types/orders.js';
3
-
1
+ import { SortDirection, SortOption } from '@unchainedshop/utils';
2
+ import { Order, OrderQuery, OrderReport } from '../types.js';
4
3
  import { generateDbFilterById, buildSortOptions, mongodb } from '@unchainedshop/mongodb';
5
4
 
6
5
  export const buildFindSelector = ({ includeCarts, status, userId, queryString }: OrderQuery) => {
@@ -38,23 +37,41 @@ const normalizeOrderAggregateResult = (data = {}): OrderReport => {
38
37
  return statusToFieldMap;
39
38
  };
40
39
 
41
- export const configureOrdersModuleQueries = ({
42
- Orders,
43
- }: {
44
- Orders: mongodb.Collection<Order>;
45
- }): OrderQueries => {
40
+ export const configureOrdersModuleQueries = ({ Orders }: { Orders: mongodb.Collection<Order> }) => {
46
41
  return {
47
- count: async (query) => {
42
+ count: async (query: OrderQuery): Promise<number> => {
48
43
  const orderCount = await Orders.countDocuments(buildFindSelector(query));
49
44
  return orderCount;
50
45
  },
51
46
 
52
- findOrder: async ({ orderId, orderNumber }, options) => {
47
+ findOrder: async (
48
+ {
49
+ orderId,
50
+ orderNumber,
51
+ }: {
52
+ orderId?: string;
53
+ orderNumber?: string;
54
+ },
55
+ options?: mongodb.FindOptions,
56
+ ): Promise<Order> => {
53
57
  const selector = orderId ? generateDbFilterById(orderId) : { orderNumber };
54
58
  return Orders.findOne(selector, options);
55
59
  },
56
60
 
57
- findOrders: async ({ limit, offset, queryString, sort, ...query }, options) => {
61
+ findOrders: async (
62
+ {
63
+ limit,
64
+ offset,
65
+ queryString,
66
+ sort,
67
+ ...query
68
+ }: OrderQuery & {
69
+ limit?: number;
70
+ offset?: number;
71
+ sort?: Array<SortOption>;
72
+ },
73
+ options?: mongodb.FindOptions,
74
+ ): Promise<Array<Order>> => {
58
75
  const defaultSortOption: Array<SortOption> = [{ key: 'created', value: SortDirection.DESC }];
59
76
  const findOptions: mongodb.FindOptions = {
60
77
  skip: offset,
@@ -74,7 +91,8 @@ export const configureOrdersModuleQueries = ({
74
91
  return Orders.find(selector, findOptions).toArray();
75
92
  },
76
93
 
77
- getReport: async ({ from, to } = { from: null, to: null }) => {
94
+ getReport: async (params?: { from?: Date; to?: Date }): Promise<OrderReport> => {
95
+ const { from, to } = params || {};
78
96
  const selector: any = { $exists: true };
79
97
  if (from || to) {
80
98
  if (from) {
@@ -146,7 +164,7 @@ export const configureOrdersModuleQueries = ({
146
164
  return normalizeOrderAggregateResult(facetedResult);
147
165
  },
148
166
 
149
- orderExists: async ({ orderId }) => {
167
+ orderExists: async ({ orderId }: { orderId: string }): Promise<boolean> => {
150
168
  const orderCount = await Orders.countDocuments(generateDbFilterById(orderId), {
151
169
  limit: 1,
152
170
  });
@@ -154,3 +172,5 @@ export const configureOrdersModuleQueries = ({
154
172
  },
155
173
  };
156
174
  };
175
+
176
+ export type OrderQueries = ReturnType<typeof configureOrdersModuleQueries>;
@@ -1,10 +1,32 @@
1
- import { Order, OrderTransformations } from '@unchainedshop/types/orders.js';
1
+ import { Order, OrderDiscount } from '../types.js';
2
2
  import { mongodb } from '@unchainedshop/mongodb';
3
- import { DeliveryPricingRowCategory } from '@unchainedshop/types/delivery.pricing.js';
4
- import { PaymentPricingRowCategory } from '@unchainedshop/types/payments.pricing.js';
5
- import { ProductPricingRowCategory } from '@unchainedshop/types/products.pricing.js';
6
- import { OrderPricingRowCategory } from '@unchainedshop/types/orders.pricing.js';
7
- import { OrderPricingSheet } from '../director/OrderPricingSheet.js';
3
+ import { PaymentPricingRowCategory } from '@unchainedshop/core-payment';
4
+ import {
5
+ IOrderPricingSheet,
6
+ OrderPricingRowCategory,
7
+ OrderPricingSheet,
8
+ } from '../director/OrderPricingSheet.js';
9
+ import { UnchainedCore } from '@unchainedshop/core';
10
+ import { ProductPricingRowCategory } from '@unchainedshop/core-products';
11
+ import { DeliveryPricingRowCategory } from '@unchainedshop/core-delivery';
12
+ import { OrderPrice, OrderPricingDiscount } from '../director/OrderPricingDirector.js';
13
+
14
+ export interface OrderTransformations {
15
+ discounted: (
16
+ order: Order,
17
+ orderDiscount: OrderDiscount,
18
+ unchainedAPI: UnchainedCore,
19
+ ) => Promise<Array<OrderPricingDiscount>>;
20
+ discountTotal: (
21
+ order: Order,
22
+ orderDiscount: OrderDiscount,
23
+ unchainedAPI: UnchainedCore,
24
+ ) => Promise<OrderPrice>;
25
+
26
+ isCart: (order: Order) => boolean;
27
+ cart: (order: { countryContext?: string; orderNumber?: string; userId: string }) => Promise<Order>;
28
+ pricingSheet: (order: Order) => IOrderPricingSheet;
29
+ }
8
30
 
9
31
  export const configureOrderModuleTransformations = ({
10
32
  Orders,
@@ -1,8 +1,6 @@
1
- import { ModuleInput, UnchainedCore } from '@unchainedshop/types/core.js';
2
- import { Order, OrdersModule, OrdersSettingsOptions } from '@unchainedshop/types/orders.js';
3
- import { OrderDelivery } from '@unchainedshop/types/orders.deliveries.js';
4
- import { OrderPayment } from '@unchainedshop/types/orders.payments.js';
5
- import { OrderPosition } from '@unchainedshop/types/orders.positions.js';
1
+ import { ModuleInput, UnchainedCore } from '@unchainedshop/core';
2
+ import { OrderDelivery } from '@unchainedshop/core-orders';
3
+ import { OrderPayment } from '@unchainedshop/core-orders';
6
4
  import { generateDbFilterById } from '@unchainedshop/mongodb';
7
5
  import { createRequire } from 'node:module';
8
6
  import { OrderDeliveriesCollection } from '../db/OrderDeliveriesCollection.js';
@@ -13,15 +11,38 @@ import { OrderPositionsCollection } from '../db/OrderPositionsCollection.js';
13
11
  import { OrdersCollection } from '../db/OrdersCollection.js';
14
12
  import { OrderDiscountDirector } from '../director/OrderDiscountDirector.js';
15
13
  import { OrderPricingDirector } from '../director/OrderPricingDirector.js';
16
- import { ordersSettings } from '../orders-settings.js';
17
- import { configureOrderDeliveriesModule } from './configureOrderDeliveriesModule.js';
18
- import { configureOrderDiscountsModule } from './configureOrderDiscountsModule.js';
19
- import { configureOrderPaymentsModule } from './configureOrderPaymentsModule.js';
20
- import { configureOrderPositionsModule } from './configureOrderPositionsModule.js';
21
- import { configureOrderModuleMutations } from './configureOrdersModule-mutations.js';
22
- import { configureOrderModuleProcessing } from './configureOrdersModule-processing.js';
23
- import { configureOrdersModuleQueries } from './configureOrdersModule-queries.js';
24
- import { configureOrderModuleTransformations } from './configureOrdersModule-transformations.js';
14
+ import { ordersSettings, OrdersSettingsOptions } from '../orders-settings.js';
15
+ import {
16
+ configureOrderDeliveriesModule,
17
+ OrderDeliveriesModule,
18
+ } from './configureOrderDeliveriesModule.js';
19
+ import { configureOrderDiscountsModule, OrderDiscountsModule } from './configureOrderDiscountsModule.js';
20
+ import { configureOrderPaymentsModule, OrderPaymentsModule } from './configureOrderPaymentsModule.js';
21
+ import { configureOrderPositionsModule, OrderPositionsModule } from './configureOrderPositionsModule.js';
22
+ import { configureOrderModuleMutations, OrderMutations } from './configureOrdersModule-mutations.js';
23
+ import { configureOrderModuleProcessing, OrderProcessing } from './configureOrdersModule-processing.js';
24
+ import { configureOrdersModuleQueries, OrderQueries } from './configureOrdersModule-queries.js';
25
+ import {
26
+ configureOrderModuleTransformations,
27
+ OrderTransformations,
28
+ } from './configureOrdersModule-transformations.js';
29
+ import { Order, OrderPosition } from '../types.js';
30
+
31
+ export type OrdersModule = OrderQueries &
32
+ OrderTransformations &
33
+ OrderProcessing &
34
+ OrderMutations & {
35
+ // Order context recalculations
36
+ initProviders: (order: Order, unchainedAPI: UnchainedCore) => Promise<Order>;
37
+ updateCalculation: (orderId: string, unchainedAPI: UnchainedCore) => Promise<Order>;
38
+ invalidateProviders: (unchainedAPI: UnchainedCore, maxAgeDays: number) => Promise<void>;
39
+
40
+ // Sub entities
41
+ deliveries: OrderDeliveriesModule;
42
+ discounts: OrderDiscountsModule;
43
+ positions: OrderPositionsModule;
44
+ payments: OrderPaymentsModule;
45
+ };
25
46
 
26
47
  const require = createRequire(import.meta.url);
27
48
  const { Locker, MongoAdapter } = require('@kontsedal/locco');
@@ -95,7 +116,7 @@ export const configureOrdersModule = async ({
95
116
  await Promise.all(
96
117
  systemDiscounts
97
118
  .filter((key) => currentDiscountKeys.indexOf(key) === -1)
98
- .map((discountKey) =>
119
+ .map(async (discountKey) =>
99
120
  modules.orders.discounts.create({
100
121
  orderId: order._id,
101
122
  discountKey,
@@ -256,6 +277,23 @@ export const configureOrdersModule = async ({
256
277
  );
257
278
  };
258
279
 
280
+ const invalidateProviders = async (unchainedAPI, maxAgeDays = 30) => {
281
+ const ONE_DAY_IN_MILLISECONDS = 86400000;
282
+
283
+ const minValidDate = new Date(new Date().getTime() - maxAgeDays * ONE_DAY_IN_MILLISECONDS);
284
+
285
+ const orders = await Orders.find({
286
+ status: { $eq: null },
287
+ updated: { $gte: minValidDate },
288
+ }).toArray();
289
+
290
+ await Promise.allSettled(
291
+ orders.map(async (order) => {
292
+ await updateCalculation(order._id, unchainedAPI);
293
+ }),
294
+ );
295
+ };
296
+
259
297
  const orderQueries = configureOrdersModuleQueries({ Orders });
260
298
  const orderTransformations = configureOrderModuleTransformations({
261
299
  Orders,
@@ -272,28 +310,22 @@ export const configureOrdersModule = async ({
272
310
  OrderDeliveries,
273
311
  OrderPayments,
274
312
  OrderPositions,
275
- initProviders,
276
- updateCalculation,
277
313
  });
278
314
 
279
315
  const orderDiscountsModule = configureOrderDiscountsModule({
280
316
  OrderDiscounts,
281
- updateCalculation,
282
317
  });
283
318
 
284
319
  const orderPositionsModule = configureOrderPositionsModule({
285
320
  OrderPositions,
286
- updateCalculation,
287
321
  });
288
322
 
289
323
  const orderPaymentsModule = configureOrderPaymentsModule({
290
324
  OrderPayments,
291
- updateCalculation,
292
325
  });
293
326
 
294
327
  const orderDeliveriesModule = configureOrderDeliveriesModule({
295
328
  OrderDeliveries,
296
- updateCalculation,
297
329
  });
298
330
 
299
331
  return {
@@ -302,6 +334,10 @@ export const configureOrdersModule = async ({
302
334
  ...orderProcessing,
303
335
  ...orderMutations,
304
336
 
337
+ initProviders,
338
+ updateCalculation,
339
+ invalidateProviders,
340
+
305
341
  // Subentities
306
342
  deliveries: orderDeliveriesModule,
307
343
  discounts: orderDiscountsModule,
@@ -1,16 +1,12 @@
1
- export { configureOrdersModule } from './module/configureOrdersModule.js';
2
- export { orderServices } from './service/orderServices.js';
3
-
4
- export { OrderStatus } from '@unchainedshop/types/orders.js';
5
- export { OrderDeliveryStatus } from '@unchainedshop/types/orders.deliveries.js';
6
- export { OrderPaymentStatus } from '@unchainedshop/types/orders.payments.js';
7
- export { OrderDiscountConfiguration } from './director/OrderDiscountConfiguration.js';
8
-
9
- export { OrderDiscountAdapter } from './director/OrderDiscountAdapter.js';
10
- export { OrderDiscountDirector } from './director/OrderDiscountDirector.js';
11
-
12
- export { OrderPricingAdapter } from './director/OrderPricingAdapter.js';
13
- export { OrderPricingDirector } from './director/OrderPricingDirector.js';
14
- export { OrderPricingSheet } from './director/OrderPricingSheet.js';
15
-
16
- export { ordersSettings } from './orders-settings.js';
1
+ export * from './types.js';
2
+ export * from './module/configureOrdersModule.js';
3
+ export * from './service/orderServices.js';
4
+ export * from './orders-settings.js';
5
+
6
+ export * from './director/OrderDiscountConfiguration.js';
7
+ export * from './director/OrderDiscountAdapter.js';
8
+ export * from './director/OrderDiscountDirector.js';
9
+
10
+ export * from './director/OrderPricingAdapter.js';
11
+ export * from './director/OrderPricingDirector.js';
12
+ export * from './director/OrderPricingSheet.js';
@@ -1,5 +1,24 @@
1
- import { OrdersSettingsOptions } from '@unchainedshop/types/orders.js';
2
1
  import { generateRandomHash } from '@unchainedshop/utils';
2
+ import { Order } from './types.js';
3
+ import { UnchainedCore } from '@unchainedshop/core';
4
+ import { Product } from '@unchainedshop/core-products';
5
+
6
+ export interface OrderSettingsOrderPositionValidation {
7
+ order: Order;
8
+ product: Product;
9
+ quantityDiff?: number;
10
+ configuration?: Array<{ key: string; value: string }>;
11
+ }
12
+
13
+ export interface OrdersSettingsOptions {
14
+ ensureUserHasCart?: boolean;
15
+ orderNumberHashFn?: (order: Order, index: number) => string;
16
+ validateOrderPosition?: (
17
+ validationParams: OrderSettingsOrderPositionValidation,
18
+ context: UnchainedCore,
19
+ ) => Promise<void>;
20
+ lockOrderDuringCheckout?: boolean;
21
+ }
3
22
 
4
23
  export const defaultValidateOrderPosition = async ({ product }, { modules }) => {
5
24
  if (!modules.products.isActive(product)) {
@@ -1,4 +1,15 @@
1
- import { MigrateOrderCartsService } from '@unchainedshop/types/orders.js';
1
+ import { UnchainedCore } from '@unchainedshop/core';
2
+ import { Order } from '../types.js';
3
+
4
+ export type MigrateOrderCartsService = (
5
+ params: {
6
+ fromUserId: string;
7
+ toUserId: string;
8
+ shouldMerge: boolean;
9
+ countryContext: string;
10
+ },
11
+ unchainedAPI: UnchainedCore,
12
+ ) => Promise<Order>;
2
13
 
3
14
  export const migrateOrderCartsService: MigrateOrderCartsService = async (
4
15
  { fromUserId, toUserId, shouldMerge, countryContext },
@@ -29,16 +40,12 @@ export const migrateOrderCartsService: MigrateOrderCartsService = async (
29
40
 
30
41
  // Move billing address if target order has none
31
42
  if (fromCart.billingAddress && !toCart.billingAddress) {
32
- await unchainedAPI.modules.orders.updateBillingAddress(
33
- toCart._id,
34
- fromCart.billingAddress,
35
- unchainedAPI,
36
- );
43
+ await unchainedAPI.modules.orders.updateBillingAddress(toCart._id, fromCart.billingAddress);
37
44
  }
38
45
 
39
46
  // Move contact data if target order has none
40
47
  if (fromCart.contact && !toCart.contact) {
41
- await unchainedAPI.modules.orders.updateContact(toCart._id, fromCart.contact, unchainedAPI);
48
+ await unchainedAPI.modules.orders.updateContact(toCart._id, fromCart.contact);
42
49
  }
43
50
 
44
51
  await unchainedAPI.modules.orders.updateCalculation(fromCart._id, unchainedAPI);
@@ -1,6 +1,18 @@
1
- import { NextUserCartService } from '@unchainedshop/types/orders.js';
1
+ import { User } from '@unchainedshop/core-users';
2
2
  import { ordersSettings } from '../orders-settings.js';
3
3
  import { resolveBestCurrency } from '@unchainedshop/utils';
4
+ import { UnchainedCore } from '@unchainedshop/core';
5
+ import { Order } from '../types.js';
6
+
7
+ export type NextUserCartService = (
8
+ params: {
9
+ user: User;
10
+ orderNumber?: string;
11
+ countryCode?: string;
12
+ forceCartCreation?: boolean;
13
+ },
14
+ unchainedAPI: UnchainedCore,
15
+ ) => Promise<Order | null>;
4
16
 
5
17
  export const nextUserCartService: NextUserCartService = async (
6
18
  { user, orderNumber, countryCode, forceCartCreation },
@@ -1,6 +1,10 @@
1
- import { OrderServices } from '@unchainedshop/types/orders.js';
2
- import { migrateOrderCartsService } from './migrateOrderCartService.js';
3
- import { nextUserCartService } from './nextUserCartService.js';
1
+ import { migrateOrderCartsService, MigrateOrderCartsService } from './migrateOrderCartService.js';
2
+ import { nextUserCartService, NextUserCartService } from './nextUserCartService.js';
3
+
4
+ export interface OrderServices {
5
+ migrateOrderCarts: MigrateOrderCartsService;
6
+ nextUserCart: NextUserCartService;
7
+ }
4
8
 
5
9
  export const orderServices: OrderServices = {
6
10
  migrateOrderCarts: migrateOrderCartsService,
package/src/types.ts ADDED
@@ -0,0 +1,129 @@
1
+ import type { ProductPricingCalculation } from '@unchainedshop/core-products';
2
+ import type { TimestampFields, LogFields, Address, Contact } from '@unchainedshop/mongodb';
3
+ import { OrderPrice } from './director/OrderPricingDirector.js';
4
+
5
+ export type OrderReport = {
6
+ newCount: number;
7
+ checkoutCount: number;
8
+ rejectCount: number;
9
+ confirmCount: number;
10
+ fulfillCount: number;
11
+ };
12
+
13
+ export enum OrderStatus {
14
+ PENDING = 'PENDING',
15
+ CONFIRMED = 'CONFIRMED',
16
+ FULLFILLED = 'FULLFILLED',
17
+ REJECTED = 'REJECTED',
18
+ }
19
+
20
+ export type OrderPosition = {
21
+ _id?: string;
22
+ calculation: Array<ProductPricingCalculation>;
23
+ configuration: Array<{ key: string; value: string }>;
24
+ context?: any;
25
+ orderId: string;
26
+ originalProductId?: string;
27
+ productId: string;
28
+ quantity: number;
29
+ quotationId?: string;
30
+ scheduling: Array<any>;
31
+ } & TimestampFields;
32
+
33
+ export type Order = {
34
+ _id?: string;
35
+ billingAddress?: Address;
36
+ calculation: Array<any>;
37
+ confirmed?: Date;
38
+ rejected?: Date;
39
+ contact?: Contact;
40
+ context?: any;
41
+ countryCode: string;
42
+ currency: string;
43
+ deliveryId?: string;
44
+ fullfilled?: Date;
45
+ ordered?: Date;
46
+ orderNumber?: string;
47
+ originEnrollmentId?: string;
48
+ paymentId?: string;
49
+ status: OrderStatus | null;
50
+ userId: string;
51
+ } & LogFields &
52
+ TimestampFields;
53
+
54
+ export enum OrderDiscountTrigger {
55
+ USER = 'USER',
56
+ SYSTEM = 'SYSTEM',
57
+ }
58
+
59
+ export type OrderDiscount = {
60
+ _id?: string;
61
+ orderId: string;
62
+ code?: string;
63
+ total?: OrderPrice;
64
+ trigger?: OrderDiscountTrigger;
65
+ discountKey?: string;
66
+ reservation?: any;
67
+ context?: any;
68
+ } & TimestampFields;
69
+
70
+ export type OrderQuery = {
71
+ includeCarts?: boolean;
72
+ orderStatus?: OrderStatus[];
73
+ queryString?: string;
74
+ status?: OrderStatus[];
75
+ userId?: string;
76
+ };
77
+
78
+ export enum OrderDeliveryStatus {
79
+ OPEN = 'OPEN', // Null value is mapped to OPEN status
80
+ DELIVERED = 'DELIVERED',
81
+ RETURNED = 'RETURNED',
82
+ }
83
+
84
+ export enum OrderPaymentStatus {
85
+ OPEN = 'OPEN', // Null value is mapped to OPEN status
86
+ PAID = 'PAID',
87
+ REFUNDED = 'REFUNDED',
88
+ }
89
+
90
+ export type OrderPayment = {
91
+ _id?: string;
92
+ orderId: string;
93
+ context?: any;
94
+ paid?: Date;
95
+ transactionId?: string;
96
+ paymentProviderId?: string;
97
+ status?: OrderPaymentStatus | null;
98
+ calculation?: Array<any>;
99
+ } & LogFields &
100
+ TimestampFields;
101
+
102
+ export type OrderPaymentDiscount = Omit<OrderPrice, '_id'> & {
103
+ _id?: string;
104
+ discountId: string;
105
+ item: OrderPayment;
106
+ };
107
+
108
+ export type OrderDelivery = {
109
+ _id?: string;
110
+ orderId: string;
111
+ deliveryProviderId: string;
112
+ delivered?: Date;
113
+ status: OrderDeliveryStatus | null;
114
+ context?: any;
115
+ calculation: Array<any>;
116
+ } & LogFields &
117
+ TimestampFields;
118
+
119
+ export type OrderDeliveryDiscount = Omit<OrderPrice, '_id'> & {
120
+ _id?: string;
121
+ discountId: string;
122
+ item: OrderDelivery;
123
+ };
124
+
125
+ export type OrderPositionDiscount = Omit<OrderPrice, '_id'> & {
126
+ _id?: string;
127
+ discountId: string;
128
+ item: OrderPosition;
129
+ };
@@ -1,3 +0,0 @@
1
- import SimpleSchema from 'simpl-schema';
2
- export declare const OrderDeliveriesSchema: SimpleSchema;
3
- //# sourceMappingURL=OrderDeliveriesSchema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrderDeliveriesSchema.d.ts","sourceRoot":"","sources":["../../src/db/OrderDeliveriesSchema.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,cAAc,CAAC;AAUxC,eAAO,MAAM,qBAAqB,cAYjC,CAAC"}
@@ -1,20 +0,0 @@
1
- import { Schemas } from '@unchainedshop/utils';
2
- import SimpleSchema from 'simpl-schema';
3
- const calculationFields = {
4
- calculation: Array,
5
- 'calculation.$': {
6
- type: Object,
7
- blackbox: true,
8
- },
9
- };
10
- export const OrderDeliveriesSchema = new SimpleSchema({
11
- delivered: Date,
12
- deliveryProviderId: String,
13
- orderId: String,
14
- status: String,
15
- ...calculationFields,
16
- ...Schemas.contextFields,
17
- ...Schemas.logFields,
18
- ...Schemas.timestampFields,
19
- }, { requiredByDefault: false });
20
- //# sourceMappingURL=OrderDeliveriesSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrderDeliveriesSchema.js","sourceRoot":"","sources":["../../src/db/OrderDeliveriesSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE;QACf,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,YAAY,CACnD;IACE,SAAS,EAAE,IAAI;IACf,kBAAkB,EAAE,MAAM;IAC1B,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,GAAG,iBAAiB;IACpB,GAAG,OAAO,CAAC,aAAa;IACxB,GAAG,OAAO,CAAC,SAAS;IACpB,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
@@ -1,3 +0,0 @@
1
- import SimpleSchema from 'simpl-schema';
2
- export declare const OrderDiscountsSchema: SimpleSchema;
3
- //# sourceMappingURL=OrderDiscountsSchema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrderDiscountsSchema.d.ts","sourceRoot":"","sources":["../../src/db/OrderDiscountsSchema.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,eAAO,MAAM,oBAAoB,cAWhC,CAAC"}
@@ -1,12 +0,0 @@
1
- import { Schemas } from '@unchainedshop/utils';
2
- import SimpleSchema from 'simpl-schema';
3
- export const OrderDiscountsSchema = new SimpleSchema({
4
- orderId: String,
5
- code: String,
6
- trigger: { type: String, required: true },
7
- discountKey: { type: String, required: true },
8
- reservation: { type: Object, blackbox: true },
9
- ...Schemas.contextFields,
10
- ...Schemas.timestampFields,
11
- }, { requiredByDefault: false });
12
- //# sourceMappingURL=OrderDiscountsSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrderDiscountsSchema.js","sourceRoot":"","sources":["../../src/db/OrderDiscountsSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,YAAY,CAClD;IACE,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IACzC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC7C,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC7C,GAAG,OAAO,CAAC,aAAa;IACxB,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
@@ -1,3 +0,0 @@
1
- import SimpleSchema from 'simpl-schema';
2
- export declare const OrderPaymentsSchema: SimpleSchema;
3
- //# sourceMappingURL=OrderPaymentsSchema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrderPaymentsSchema.d.ts","sourceRoot":"","sources":["../../src/db/OrderPaymentsSchema.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,cAAc,CAAC;AAUxC,eAAO,MAAM,mBAAmB,cAY/B,CAAC"}
@@ -1,20 +0,0 @@
1
- import { Schemas } from '@unchainedshop/utils';
2
- import SimpleSchema from 'simpl-schema';
3
- const calculationFields = {
4
- calculation: Array,
5
- 'calculation.$': {
6
- type: Object,
7
- blackbox: true,
8
- },
9
- };
10
- export const OrderPaymentsSchema = new SimpleSchema({
11
- orderId: String,
12
- paymentProviderId: String,
13
- paid: Date,
14
- status: String,
15
- ...calculationFields,
16
- ...Schemas.contextFields,
17
- ...Schemas.logFields,
18
- ...Schemas.timestampFields,
19
- }, { requiredByDefault: false });
20
- //# sourceMappingURL=OrderPaymentsSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrderPaymentsSchema.js","sourceRoot":"","sources":["../../src/db/OrderPaymentsSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE;QACf,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,YAAY,CACjD;IACE,OAAO,EAAE,MAAM;IACf,iBAAiB,EAAE,MAAM;IACzB,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,MAAM;IACd,GAAG,iBAAiB;IACpB,GAAG,OAAO,CAAC,aAAa;IACxB,GAAG,OAAO,CAAC,SAAS;IACpB,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
@@ -1,3 +0,0 @@
1
- import SimpleSchema from 'simpl-schema';
2
- export declare const OrderPositionsSchema: SimpleSchema;
3
- //# sourceMappingURL=OrderPositionsSchema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrderPositionsSchema.d.ts","sourceRoot":"","sources":["../../src/db/OrderPositionsSchema.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,cAAc,CAAC;AAexC,eAAO,MAAM,oBAAoB,cAwBhC,CAAC"}
@@ -1,37 +0,0 @@
1
- import { Schemas } from '@unchainedshop/utils';
2
- import SimpleSchema from 'simpl-schema';
3
- const calculationFields = {
4
- calculation: Array,
5
- 'calculation.$': {
6
- type: Object,
7
- blackbox: true,
8
- },
9
- scheduling: Array,
10
- 'scheduling.$': {
11
- type: Object,
12
- blackbox: true,
13
- },
14
- };
15
- export const OrderPositionsSchema = new SimpleSchema({
16
- productId: String,
17
- orderId: String,
18
- originalProductId: { type: String },
19
- quotationId: { type: String },
20
- quantity: Number,
21
- configuration: Array,
22
- 'configuration.$': {
23
- type: Object,
24
- required: true,
25
- },
26
- 'configuration.$.key': {
27
- type: String,
28
- required: true,
29
- },
30
- 'configuration.$.value': {
31
- type: String,
32
- },
33
- ...calculationFields,
34
- ...Schemas.contextFields,
35
- ...Schemas.timestampFields,
36
- }, { requiredByDefault: false });
37
- //# sourceMappingURL=OrderPositionsSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrderPositionsSchema.js","sourceRoot":"","sources":["../../src/db/OrderPositionsSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE;QACf,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,UAAU,EAAE,KAAK;IACjB,cAAc,EAAE;QACd,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,YAAY,CAClD;IACE,SAAS,EAAE,MAAM;IACjB,OAAO,EAAE,MAAM;IACf,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IACnC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7B,QAAQ,EAAE,MAAM;IAChB,aAAa,EAAE,KAAK;IACpB,iBAAiB,EAAE;QACjB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,qBAAqB,EAAE;QACrB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,uBAAuB,EAAE;QACvB,IAAI,EAAE,MAAM;KACb;IACD,GAAG,iBAAiB;IACpB,GAAG,OAAO,CAAC,aAAa;IACxB,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
@@ -1,3 +0,0 @@
1
- import SimpleSchema from 'simpl-schema';
2
- export declare const OrdersSchema: SimpleSchema;
3
- //# sourceMappingURL=OrdersSchema.d.ts.map