@unchainedshop/core-orders 4.0.0-rc.16 → 4.0.0-rc.18

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 (126) 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 +1 -2
  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 +1 -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/module/configureOrderDeliveriesModule.d.ts +6 -6
  63. package/lib/module/configureOrderDeliveriesModule.d.ts.map +1 -1
  64. package/lib/module/configureOrderDeliveriesModule.js +7 -8
  65. package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
  66. package/lib/module/configureOrderDiscountsModule.d.ts +5 -5
  67. package/lib/module/configureOrderDiscountsModule.d.ts.map +1 -1
  68. package/lib/module/configureOrderDiscountsModule.js +3 -3
  69. package/lib/module/configureOrderDiscountsModule.js.map +1 -1
  70. package/lib/module/configureOrderPaymentsModule.d.ts +7 -7
  71. package/lib/module/configureOrderPaymentsModule.d.ts.map +1 -1
  72. package/lib/module/configureOrderPaymentsModule.js +11 -8
  73. package/lib/module/configureOrderPaymentsModule.js.map +1 -1
  74. package/lib/module/configureOrderPositionsModule.d.ts +14 -16
  75. package/lib/module/configureOrderPositionsModule.d.ts.map +1 -1
  76. package/lib/module/configureOrderPositionsModule.js +6 -5
  77. package/lib/module/configureOrderPositionsModule.js.map +1 -1
  78. package/lib/module/configureOrdersModule-mutations.d.ts +14 -13
  79. package/lib/module/configureOrdersModule-mutations.d.ts.map +1 -1
  80. package/lib/module/configureOrdersModule-mutations.js +16 -8
  81. package/lib/module/configureOrdersModule-mutations.js.map +1 -1
  82. package/lib/module/configureOrdersModule-processing.d.ts +14 -0
  83. package/lib/module/configureOrdersModule-processing.d.ts.map +1 -0
  84. package/lib/module/configureOrdersModule-processing.js +348 -0
  85. package/lib/module/configureOrdersModule-processing.js.map +1 -0
  86. package/lib/module/configureOrdersModule-queries.d.ts +4 -6
  87. package/lib/module/configureOrdersModule-queries.d.ts.map +1 -1
  88. package/lib/module/configureOrdersModule-queries.js.map +1 -1
  89. package/lib/module/configureOrdersModule-transformations.d.ts +6 -0
  90. package/lib/module/configureOrdersModule-transformations.d.ts.map +1 -0
  91. package/lib/module/configureOrdersModule-transformations.js +112 -0
  92. package/lib/module/configureOrdersModule-transformations.js.map +1 -0
  93. package/lib/module/configureOrdersModule.d.ts +154 -21
  94. package/lib/module/configureOrdersModule.d.ts.map +1 -1
  95. package/lib/module/configureOrdersModule.js +17 -17
  96. package/lib/module/configureOrdersModule.js.map +1 -1
  97. package/lib/orders-settings.d.ts +8 -12
  98. package/lib/orders-settings.d.ts.map +1 -1
  99. package/lib/orders-settings.js +8 -8
  100. package/lib/orders-settings.js.map +1 -1
  101. package/lib/service/migrateOrderCartService.d.ts +3 -0
  102. package/lib/service/migrateOrderCartService.d.ts.map +1 -0
  103. package/lib/service/migrateOrderCartService.js +32 -0
  104. package/lib/service/migrateOrderCartService.js.map +1 -0
  105. package/lib/service/nextUserCartService.d.ts +3 -0
  106. package/lib/service/nextUserCartService.d.ts.map +1 -0
  107. package/lib/service/nextUserCartService.js +34 -0
  108. package/lib/service/nextUserCartService.js.map +1 -0
  109. package/lib/service/orderServices.d.ts +3 -0
  110. package/lib/service/orderServices.d.ts.map +1 -0
  111. package/lib/service/orderServices.js +7 -0
  112. package/lib/service/orderServices.js.map +1 -0
  113. package/package.json +4 -4
  114. package/src/db/OrderDeliveriesCollection.ts +2 -2
  115. package/src/db/OrderDiscountsCollection.ts +2 -2
  116. package/src/db/OrderPaymentsCollection.ts +3 -3
  117. package/src/db/OrderPositionsCollection.ts +1 -2
  118. package/src/db/OrdersCollection.ts +27 -22
  119. package/src/module/configureOrderDeliveriesModule.ts +15 -14
  120. package/src/module/configureOrderDiscountsModule.ts +11 -11
  121. package/src/module/configureOrderPaymentsModule.ts +17 -18
  122. package/src/module/configureOrderPositionsModule.ts +21 -27
  123. package/src/module/configureOrdersModule-mutations.ts +43 -41
  124. package/src/module/configureOrdersModule-queries.ts +5 -7
  125. package/src/module/configureOrdersModule.ts +28 -49
  126. package/src/orders-settings.ts +20 -19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/core-orders",
3
- "version": "4.0.0-rc.16",
3
+ "version": "4.0.0-rc.18",
4
4
  "main": "lib/orders-index.js",
5
5
  "types": "lib/orders-index.d.ts",
6
6
  "type": "module",
@@ -32,9 +32,9 @@
32
32
  "homepage": "https://github.com/unchainedshop/unchained#readme",
33
33
  "dependencies": {
34
34
  "@kontsedal/locco": "0.1.0",
35
- "@unchainedshop/events": "^4.0.0-rc.15",
36
- "@unchainedshop/logger": "^4.0.0-rc.15",
37
- "@unchainedshop/utils": "^4.0.0-rc.15"
35
+ "@unchainedshop/events": "^4.0.0-rc.18",
36
+ "@unchainedshop/logger": "^4.0.0-rc.18",
37
+ "@unchainedshop/utils": "^4.0.0-rc.18"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^24.0.13",
@@ -8,7 +8,7 @@ export enum OrderDeliveryStatus {
8
8
  }
9
9
 
10
10
  export type OrderDelivery = {
11
- _id?: string;
11
+ _id: string;
12
12
  orderId: string;
13
13
  deliveryProviderId: string;
14
14
  delivered?: Date;
@@ -19,7 +19,7 @@ export type OrderDelivery = {
19
19
  TimestampFields;
20
20
 
21
21
  export type OrderDeliveryDiscount = Omit<Price, '_id'> & {
22
- _id?: string;
22
+ _id: string;
23
23
  discountId: string;
24
24
  item: OrderDelivery;
25
25
  };
@@ -2,12 +2,12 @@ import { mongodb, buildDbIndexes, TimestampFields } from '@unchainedshop/mongodb
2
2
  import { Price } from '@unchainedshop/utils';
3
3
 
4
4
  export type OrderDiscount = {
5
- _id?: string;
5
+ _id: string;
6
6
  orderId: string;
7
7
  code?: string;
8
8
  total?: Price;
9
9
  trigger?: OrderDiscountTrigger;
10
- discountKey?: string;
10
+ discountKey: string;
11
11
  reservation?: any;
12
12
  context?: any;
13
13
  } & TimestampFields;
@@ -8,19 +8,19 @@ export enum OrderPaymentStatus {
8
8
  }
9
9
 
10
10
  export type OrderPayment = {
11
- _id?: string;
11
+ _id: string;
12
12
  orderId: string;
13
13
  context?: any;
14
14
  paid?: Date;
15
15
  transactionId?: string;
16
- paymentProviderId?: string;
16
+ paymentProviderId: string;
17
17
  status?: OrderPaymentStatus | null;
18
18
  calculation?: any[];
19
19
  } & LogFields &
20
20
  TimestampFields;
21
21
 
22
22
  export type OrderPaymentDiscount = Omit<Price, '_id'> & {
23
- _id?: string;
23
+ _id: string;
24
24
  discountId: string;
25
25
  item: OrderPayment;
26
26
  };
@@ -2,7 +2,7 @@ import { mongodb, buildDbIndexes, TimestampFields } from '@unchainedshop/mongodb
2
2
  import { Price } from '@unchainedshop/utils';
3
3
 
4
4
  export type OrderPosition = {
5
- _id?: string;
5
+ _id: string;
6
6
  calculation: any[];
7
7
  configuration: { key: string; value: string }[];
8
8
  context?: any;
@@ -15,7 +15,6 @@ export type OrderPosition = {
15
15
  } & TimestampFields;
16
16
 
17
17
  export type OrderPositionDiscount = Omit<Price, '_id'> & {
18
- _id?: string;
19
18
  discountId: string;
20
19
  item: OrderPosition;
21
20
  };
@@ -17,7 +17,7 @@ export enum OrderStatus {
17
17
  }
18
18
 
19
19
  export type Order = {
20
- _id?: string;
20
+ _id: string;
21
21
  billingAddress?: Address;
22
22
  calculation: any[];
23
23
  confirmed?: Date;
@@ -50,32 +50,37 @@ export interface OrderQuery extends mongodb.Filter<Order> {
50
50
  export const OrdersCollection = async (db: mongodb.Db) => {
51
51
  const Orders = db.collection<Order>('orders');
52
52
 
53
+ if (!isDocumentDBCompatModeEnabled()) {
54
+ await buildDbIndexes<Order>(Orders, [
55
+ {
56
+ index: {
57
+ _id: 'text',
58
+ userId: 'text',
59
+ orderNumber: 'text',
60
+ status: 'text',
61
+ 'contact.emailAddress': 'text',
62
+ 'contact.telNumber': 'text',
63
+ } as any,
64
+ options: {
65
+ weights: {
66
+ _id: 8,
67
+ userId: 3,
68
+ orderNumber: 6,
69
+ 'contact.telNumber': 5,
70
+ 'contact.emailAddress': 4,
71
+ status: 1,
72
+ },
73
+ name: 'order_fulltext_search',
74
+ },
75
+ },
76
+ ]);
77
+ }
78
+
53
79
  // Order Indexes
54
80
  await buildDbIndexes<Order>(Orders, [
55
81
  { index: { userId: 1 } },
56
82
  { index: { status: 1 } },
57
83
  { index: { orderNumber: 1 } },
58
- !isDocumentDBCompatModeEnabled() && {
59
- index: {
60
- _id: 'text',
61
- userId: 'text',
62
- orderNumber: 'text',
63
- status: 'text',
64
- 'contact.emailAddress': 'text',
65
- 'contact.telNumber': 'text',
66
- } as any,
67
- options: {
68
- weights: {
69
- _id: 8,
70
- userId: 3,
71
- orderNumber: 6,
72
- 'contact.telNumber': 5,
73
- 'contact.emailAddress': 4,
74
- status: 1,
75
- },
76
- name: 'order_fulltext_search',
77
- },
78
- },
79
84
  ]);
80
85
 
81
86
  return Orders;
@@ -24,7 +24,7 @@ export const configureOrderDeliveriesModule = ({
24
24
  const updateStatus = async (
25
25
  orderDeliveryId: string,
26
26
  { status, info }: { status: OrderDeliveryStatus; info?: string },
27
- ): Promise<OrderDelivery> => {
27
+ ) => {
28
28
  const date = new Date();
29
29
  const modifier: mongodb.UpdateFilter<OrderDelivery> = {
30
30
  $set: { status, updated: new Date() },
@@ -51,7 +51,7 @@ export const configureOrderDeliveriesModule = ({
51
51
  findDelivery: async (
52
52
  { orderDeliveryId }: { orderDeliveryId: string },
53
53
  options?: mongodb.FindOptions,
54
- ): Promise<OrderDelivery> => {
54
+ ) => {
55
55
  return OrderDeliveries.findOne(buildFindByIdSelector(orderDeliveryId), options);
56
56
  },
57
57
 
@@ -70,7 +70,9 @@ export const configureOrderDeliveriesModule = ({
70
70
 
71
71
  // Mutations
72
72
 
73
- create: async (doc: OrderDelivery): Promise<OrderDelivery> => {
73
+ create: async (
74
+ doc: Omit<OrderDelivery, '_id' | 'created'> & Pick<Partial<OrderDelivery>, '_id' | 'created'>,
75
+ ) => {
74
76
  const { insertedId: orderDeliveryId } = await OrderDeliveries.insertOne({
75
77
  _id: generateDbObjectId(),
76
78
  created: new Date(),
@@ -79,7 +81,9 @@ export const configureOrderDeliveriesModule = ({
79
81
  status: null,
80
82
  });
81
83
 
82
- const orderDelivery = await OrderDeliveries.findOne(buildFindByIdSelector(orderDeliveryId));
84
+ const orderDelivery = (await OrderDeliveries.findOne(
85
+ buildFindByIdSelector(orderDeliveryId),
86
+ )) as OrderDelivery;
83
87
  return orderDelivery;
84
88
  },
85
89
 
@@ -98,7 +102,7 @@ export const configureOrderDeliveriesModule = ({
98
102
  return updatedOrderDelivery;
99
103
  },
100
104
 
101
- updateContext: async (orderDeliveryId: string, context: any): Promise<OrderDelivery> => {
105
+ updateContext: async (orderDeliveryId: string, context: any) => {
102
106
  const selector = buildFindByIdSelector(orderDeliveryId);
103
107
  if (!context || Object.keys(context).length === 0) return OrderDeliveries.findOne(selector, {});
104
108
  const contextSetters = Object.fromEntries(
@@ -116,14 +120,11 @@ export const configureOrderDeliveriesModule = ({
116
120
  { returnDocument: 'after' },
117
121
  );
118
122
 
119
- if (orderDelivery) {
120
- await emit('ORDER_UPDATE_DELIVERY', {
121
- orderDelivery,
122
- });
123
- return orderDelivery;
124
- }
125
-
126
- return null;
123
+ if (!orderDelivery) return null;
124
+ await emit('ORDER_UPDATE_DELIVERY', {
125
+ orderDelivery,
126
+ });
127
+ return orderDelivery;
127
128
  },
128
129
 
129
130
  updateStatus,
@@ -131,7 +132,7 @@ export const configureOrderDeliveriesModule = ({
131
132
  updateCalculation: async <T extends PricingCalculation>(
132
133
  orderDeliveryId: string,
133
134
  calculation: T[],
134
- ): Promise<OrderDelivery> => {
135
+ ) => {
135
136
  return OrderDeliveries.findOneAndUpdate(
136
137
  { _id: orderDeliveryId },
137
138
  {
@@ -20,10 +20,7 @@ export const configureOrderDiscountsModule = ({
20
20
 
21
21
  return {
22
22
  // Queries
23
- findOrderDiscount: async (
24
- { discountId }: { discountId: string },
25
- options?: mongodb.FindOptions,
26
- ): Promise<OrderDiscount> => {
23
+ findOrderDiscount: async ({ discountId }: { discountId: string }, options?: mongodb.FindOptions) => {
27
24
  return OrderDiscounts.findOne(buildFindOrderDiscountByIdSelector(discountId), options);
28
25
  },
29
26
 
@@ -32,7 +29,10 @@ export const configureOrderDiscountsModule = ({
32
29
  return discounts.toArray();
33
30
  },
34
31
 
35
- create: async (doc: OrderDiscount): Promise<OrderDiscount> => {
32
+ create: async (
33
+ doc: Omit<OrderDiscount, '_id' | 'created' | 'trigger'> &
34
+ Pick<Partial<OrderDiscount>, '_id' | 'created' | 'trigger'>,
35
+ ): Promise<OrderDiscount> => {
36
36
  const normalizedTrigger = doc.trigger || OrderDiscountTrigger.USER;
37
37
  const { insertedId: discountId } = await OrderDiscounts.insertOne({
38
38
  _id: generateDbObjectId(),
@@ -40,14 +40,14 @@ export const configureOrderDiscountsModule = ({
40
40
  ...doc,
41
41
  trigger: normalizedTrigger,
42
42
  });
43
- const discount = await OrderDiscounts.findOne({
43
+ const discount = (await OrderDiscounts.findOne({
44
44
  _id: discountId,
45
- });
45
+ })) as OrderDiscount;
46
46
  await emit('ORDER_CREATE_DISCOUNT', { discount });
47
47
  return discount;
48
48
  },
49
49
 
50
- delete: async (orderDiscountId: string): Promise<OrderDiscount> => {
50
+ delete: async (orderDiscountId: string) => {
51
51
  const selector = buildFindOrderDiscountByIdSelector(orderDiscountId);
52
52
  const orderDiscount = await OrderDiscounts.findOneAndDelete(selector);
53
53
  await emit('ORDER_REMOVE_DISCOUNT', { discount: orderDiscount });
@@ -63,14 +63,14 @@ export const configureOrderDiscountsModule = ({
63
63
  );
64
64
  },
65
65
 
66
- findSpareDiscount: async ({ code }): Promise<OrderDiscount> => {
66
+ findSpareDiscount: async ({ code }) => {
67
67
  return OrderDiscounts.findOne({
68
68
  code,
69
- orderId: { $in: [undefined, null] },
69
+ orderId: { $exists: false },
70
70
  });
71
71
  },
72
72
 
73
- update: async (orderDiscountId: string, doc: OrderDiscount): Promise<OrderDiscount> => {
73
+ update: async (orderDiscountId: string, doc: Partial<OrderDiscount>) => {
74
74
  const discount = await OrderDiscounts.findOneAndUpdate(
75
75
  { _id: orderDiscountId },
76
76
  {
@@ -8,7 +8,7 @@ const ORDER_PAYMENT_EVENTS: string[] = ['ORDER_UPDATE_PAYMENT', 'ORDER_SIGN_PAYM
8
8
  export const buildFindOrderPaymentByIdSelector = (orderPaymentId: string) =>
9
9
  generateDbFilterById(orderPaymentId) as mongodb.Filter<OrderPayment>;
10
10
 
11
- export const buildFindByContextDataSelector = (context: any): mongodb.Filter<OrderPayment> => {
11
+ export const buildFindByContextDataSelector = (context: any) => {
12
12
  const contextKeys = Object.keys(context);
13
13
 
14
14
  if (contextKeys.length === 0) return null;
@@ -46,7 +46,7 @@ export const configureOrderPaymentsModule = ({
46
46
  status,
47
47
  info,
48
48
  }: { transactionId?: string; status: OrderPaymentStatus; info?: string },
49
- ): Promise<OrderPayment> => {
49
+ ) => {
50
50
  const date = new Date();
51
51
  const modifier: mongodb.UpdateFilter<OrderPayment> = {
52
52
  $set: { status, updated: new Date() },
@@ -82,7 +82,7 @@ export const configureOrderPaymentsModule = ({
82
82
  orderPaymentId: string;
83
83
  },
84
84
  options?: mongodb.FindOptions,
85
- ): Promise<OrderPayment> => {
85
+ ) => {
86
86
  return OrderPayments.findOne(buildFindOrderPaymentByIdSelector(orderPaymentId), options);
87
87
  },
88
88
 
@@ -104,9 +104,9 @@ export const configureOrderPaymentsModule = ({
104
104
  context: any;
105
105
  },
106
106
  options?: mongodb.FindOptions,
107
- ): Promise<OrderPayment> => {
107
+ ) => {
108
108
  const selector = buildFindByContextDataSelector(context);
109
-
109
+ if (!selector) return null;
110
110
  return OrderPayments.findOne(selector, options);
111
111
  },
112
112
  countOrderPaymentsByContextData: async (
@@ -118,7 +118,7 @@ export const configureOrderPaymentsModule = ({
118
118
  options?: mongodb.FindOptions,
119
119
  ) => {
120
120
  const selector = buildFindByContextDataSelector(context);
121
-
121
+ if (!selector) return 0;
122
122
  return OrderPayments.countDocuments(selector, options);
123
123
  },
124
124
 
@@ -126,7 +126,9 @@ export const configureOrderPaymentsModule = ({
126
126
 
127
127
  // Mutations
128
128
 
129
- create: async (doc: OrderPayment): Promise<OrderPayment> => {
129
+ create: async (
130
+ doc: Omit<OrderPayment, '_id' | 'created'> & Pick<Partial<OrderPayment>, '_id' | 'created'>,
131
+ ): Promise<OrderPayment> => {
130
132
  const { insertedId: orderPaymentId } = await OrderPayments.insertOne({
131
133
  _id: generateDbObjectId(),
132
134
  created: new Date(),
@@ -135,9 +137,9 @@ export const configureOrderPaymentsModule = ({
135
137
  context: doc.context || {},
136
138
  });
137
139
 
138
- const orderPayment = await OrderPayments.findOne(
140
+ const orderPayment = (await OrderPayments.findOne(
139
141
  buildFindOrderPaymentByIdSelector(orderPaymentId),
140
- );
142
+ )) as OrderPayment;
141
143
 
142
144
  return orderPayment;
143
145
  },
@@ -168,7 +170,7 @@ export const configureOrderPaymentsModule = ({
168
170
  await emit('ORDER_PAY', { orderPayment });
169
171
  },
170
172
 
171
- updateContext: async (orderPaymentId: string, context: any): Promise<OrderPayment> => {
173
+ updateContext: async (orderPaymentId: string, context: any) => {
172
174
  const selector = buildFindOrderPaymentByIdSelector(orderPaymentId);
173
175
  if (!context || Object.keys(context).length === 0) return OrderPayments.findOne(selector, {});
174
176
 
@@ -186,14 +188,11 @@ export const configureOrderPaymentsModule = ({
186
188
  { returnDocument: 'after' },
187
189
  );
188
190
 
189
- if (orderPayment) {
190
- await emit('ORDER_UPDATE_PAYMENT', {
191
- orderPayment,
192
- });
193
- return orderPayment;
194
- }
195
-
196
- return null;
191
+ if (!orderPayment) return null;
192
+ await emit('ORDER_UPDATE_PAYMENT', {
193
+ orderPayment,
194
+ });
195
+ return orderPayment;
197
196
  },
198
197
 
199
198
  updateStatus,
@@ -2,7 +2,6 @@ import { emit, registerEvents } from '@unchainedshop/events';
2
2
  import { generateDbFilterById, generateDbObjectId, mongodb } from '@unchainedshop/mongodb';
3
3
  import { PricingCalculation } from '@unchainedshop/utils';
4
4
  import { OrderPosition } from '../db/OrderPositionsCollection.js';
5
- import { Document } from 'mongodb';
6
5
 
7
6
  const ORDER_POSITION_EVENTS: string[] = [
8
7
  'ORDER_UPDATE_CART_ITEM',
@@ -11,15 +10,15 @@ const ORDER_POSITION_EVENTS: string[] = [
11
10
  'ORDER_ADD_PRODUCT',
12
11
  ];
13
12
 
14
- interface OrderPositionAggregateParams {
15
- match?: Document;
16
- matchAfterGroup?: Document;
17
- project?: Document;
18
- group?: Document;
19
- addFields?: Document;
20
- sort?: Document;
13
+ export interface OrderPositionAggregateParams {
14
+ match?: mongodb.Document;
15
+ matchAfterGroup?: mongodb.Document;
16
+ project?: mongodb.Document;
17
+ group?: mongodb.Document;
18
+ addFields?: mongodb.Document;
19
+ sort?: mongodb.Document;
21
20
  limit?: number;
22
- pipeline?: Document[];
21
+ pipeline?: mongodb.Document[];
23
22
  }
24
23
 
25
24
  export const buildFindOrderPositionByIdSelector = (orderPositionId: string, orderId?: string) =>
@@ -37,10 +36,7 @@ export const configureOrderPositionsModule = ({
37
36
 
38
37
  return {
39
38
  // Queries
40
- findOrderPosition: async (
41
- { itemId }: { itemId: string },
42
- options?: mongodb.FindOptions,
43
- ): Promise<OrderPosition> => {
39
+ findOrderPosition: async ({ itemId }: { itemId: string }, options?: mongodb.FindOptions) => {
44
40
  return OrderPositions.findOne(buildFindOrderPositionByIdSelector(itemId), options);
45
41
  },
46
42
 
@@ -49,13 +45,13 @@ export const configureOrderPositionsModule = ({
49
45
  return positions.toArray();
50
46
  },
51
47
 
52
- delete: async (orderPositionId: string): Promise<OrderPosition> => {
48
+ delete: async (orderPositionId: string) => {
53
49
  const selector = buildFindOrderPositionByIdSelector(orderPositionId);
54
50
  const orderPosition = await OrderPositions.findOneAndDelete(selector, {});
55
51
  await emit('ORDER_REMOVE_CART_ITEM', {
56
52
  orderPosition,
57
53
  });
58
- return { ...orderPosition, calculation: [] };
54
+ return orderPosition;
59
55
  },
60
56
 
61
57
  removePositions: async ({ orderId }: { orderId: string }): Promise<number> => {
@@ -72,7 +68,7 @@ export const configureOrderPositionsModule = ({
72
68
  orderPositionId: string;
73
69
  configuration?: { key: string; value: string }[];
74
70
  quantity?: number;
75
- }): Promise<OrderPosition> => {
71
+ }) => {
76
72
  const modifier: any = {
77
73
  $set: {
78
74
  updated: new Date(),
@@ -97,6 +93,7 @@ export const configureOrderPositionsModule = ({
97
93
  },
98
94
  );
99
95
 
96
+ if (!updatedOrderPosition) return null;
100
97
  await emit('ORDER_UPDATE_CART_ITEM', {
101
98
  orderPosition: updatedOrderPosition,
102
99
  });
@@ -140,7 +137,7 @@ export const configureOrderPositionsModule = ({
140
137
  return orderIdsToRecalculate;
141
138
  },
142
139
 
143
- updateScheduling: async (orderPositionId, scheduling): Promise<OrderPosition> => {
140
+ updateScheduling: async (orderPositionId, scheduling) => {
144
141
  return OrderPositions.findOneAndUpdate(
145
142
  generateDbFilterById(orderPositionId),
146
143
  {
@@ -155,7 +152,7 @@ export const configureOrderPositionsModule = ({
155
152
  updateCalculation: async <T extends PricingCalculation>(
156
153
  orderPositionId: string,
157
154
  calculation: T[],
158
- ): Promise<OrderPosition> => {
155
+ ) => {
159
156
  return OrderPositions.findOneAndUpdate(
160
157
  { _id: orderPositionId },
161
158
  {
@@ -183,11 +180,11 @@ export const configureOrderPositionsModule = ({
183
180
  orderId,
184
181
  productId,
185
182
  originalProductId,
186
- configuration: configuration || { $in: [null, undefined] },
183
+ configuration: configuration || { $exists: false },
187
184
  ...scope,
188
185
  };
189
186
 
190
- await OrderPositions.updateOne(
187
+ const upsertedOrderPosition = (await OrderPositions.findOneAndUpdate(
191
188
  selector,
192
189
  {
193
190
  $set: {
@@ -206,13 +203,10 @@ export const configureOrderPositionsModule = ({
206
203
  ...scope,
207
204
  },
208
205
  },
209
- { upsert: true },
210
- );
211
-
212
- const upsertedOrderPosition = await OrderPositions.findOne(selector);
206
+ { upsert: true, returnDocument: 'after' },
207
+ )) as OrderPosition;
213
208
 
214
209
  await emit('ORDER_ADD_PRODUCT', { orderPosition: upsertedOrderPosition });
215
-
216
210
  return upsertedOrderPosition;
217
211
  },
218
212
  deleteOrderPositions: async (orderId: string) => {
@@ -228,8 +222,8 @@ export const configureOrderPositionsModule = ({
228
222
  sort,
229
223
  limit,
230
224
  pipeline,
231
- }: OrderPositionAggregateParams): Promise<Document[]> => {
232
- const stages: Document[] = [];
225
+ }: OrderPositionAggregateParams): Promise<mongodb.Document[]> => {
226
+ const stages: mongodb.Document[] = [];
233
227
 
234
228
  if (pipeline?.length) {
235
229
  return await OrderPositions.aggregate(pipeline).toArray();