@unchainedshop/core-orders 4.0.0-rc.8 → 4.0.0

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 (132) 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 +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/module/buildFindSelector.d.ts +1 -1
  63. package/lib/module/buildFindSelector.d.ts.map +1 -1
  64. package/lib/module/buildFindSelector.js +17 -1
  65. package/lib/module/buildFindSelector.js.map +1 -1
  66. package/lib/module/configureOrderDeliveriesModule.d.ts +9 -6
  67. package/lib/module/configureOrderDeliveriesModule.d.ts.map +1 -1
  68. package/lib/module/configureOrderDeliveriesModule.js +14 -10
  69. package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
  70. package/lib/module/configureOrderDiscountsModule.d.ts +5 -5
  71. package/lib/module/configureOrderDiscountsModule.d.ts.map +1 -1
  72. package/lib/module/configureOrderDiscountsModule.js +3 -3
  73. package/lib/module/configureOrderDiscountsModule.js.map +1 -1
  74. package/lib/module/configureOrderPaymentsModule.d.ts +10 -7
  75. package/lib/module/configureOrderPaymentsModule.d.ts.map +1 -1
  76. package/lib/module/configureOrderPaymentsModule.js +18 -10
  77. package/lib/module/configureOrderPaymentsModule.js.map +1 -1
  78. package/lib/module/configureOrderPositionsModule.d.ts +16 -5
  79. package/lib/module/configureOrderPositionsModule.d.ts.map +1 -1
  80. package/lib/module/configureOrderPositionsModule.js +25 -5
  81. package/lib/module/configureOrderPositionsModule.js.map +1 -1
  82. package/lib/module/configureOrdersModule-mutations.d.ts +14 -13
  83. package/lib/module/configureOrdersModule-mutations.d.ts.map +1 -1
  84. package/lib/module/configureOrdersModule-mutations.js +19 -11
  85. package/lib/module/configureOrdersModule-mutations.js.map +1 -1
  86. package/lib/module/configureOrdersModule-processing.d.ts +14 -0
  87. package/lib/module/configureOrdersModule-processing.d.ts.map +1 -0
  88. package/lib/module/configureOrdersModule-processing.js +348 -0
  89. package/lib/module/configureOrdersModule-processing.js.map +1 -0
  90. package/lib/module/configureOrdersModule-queries.d.ts +21 -6
  91. package/lib/module/configureOrdersModule-queries.d.ts.map +1 -1
  92. package/lib/module/configureOrdersModule-queries.js +19 -84
  93. package/lib/module/configureOrdersModule-queries.js.map +1 -1
  94. package/lib/module/configureOrdersModule-transformations.d.ts +6 -0
  95. package/lib/module/configureOrdersModule-transformations.d.ts.map +1 -0
  96. package/lib/module/configureOrdersModule-transformations.js +112 -0
  97. package/lib/module/configureOrdersModule-transformations.js.map +1 -0
  98. package/lib/module/configureOrdersModule.d.ts +154 -21
  99. package/lib/module/configureOrdersModule.d.ts.map +1 -1
  100. package/lib/module/configureOrdersModule.js +9 -3
  101. package/lib/module/configureOrdersModule.js.map +1 -1
  102. package/lib/orders-settings.d.ts +8 -12
  103. package/lib/orders-settings.d.ts.map +1 -1
  104. package/lib/orders-settings.js +8 -8
  105. package/lib/orders-settings.js.map +1 -1
  106. package/lib/service/migrateOrderCartService.d.ts +3 -0
  107. package/lib/service/migrateOrderCartService.d.ts.map +1 -0
  108. package/lib/service/migrateOrderCartService.js +32 -0
  109. package/lib/service/migrateOrderCartService.js.map +1 -0
  110. package/lib/service/nextUserCartService.d.ts +3 -0
  111. package/lib/service/nextUserCartService.d.ts.map +1 -0
  112. package/lib/service/nextUserCartService.js +34 -0
  113. package/lib/service/nextUserCartService.js.map +1 -0
  114. package/lib/service/orderServices.d.ts +3 -0
  115. package/lib/service/orderServices.d.ts.map +1 -0
  116. package/lib/service/orderServices.js +7 -0
  117. package/lib/service/orderServices.js.map +1 -0
  118. package/package.json +4 -4
  119. package/src/db/OrderDeliveriesCollection.ts +2 -2
  120. package/src/db/OrderDiscountsCollection.ts +2 -2
  121. package/src/db/OrderPaymentsCollection.ts +3 -3
  122. package/src/db/OrderPositionsCollection.ts +1 -2
  123. package/src/db/OrdersCollection.ts +31 -22
  124. package/src/module/buildFindSelector.ts +19 -1
  125. package/src/module/configureOrderDeliveriesModule.ts +28 -16
  126. package/src/module/configureOrderDiscountsModule.ts +11 -11
  127. package/src/module/configureOrderPaymentsModule.ts +31 -20
  128. package/src/module/configureOrderPositionsModule.ts +47 -16
  129. package/src/module/configureOrdersModule-mutations.ts +46 -44
  130. package/src/module/configureOrdersModule-queries.ts +42 -91
  131. package/src/module/configureOrdersModule.ts +21 -33
  132. package/src/orders-settings.ts +20 -19
@@ -5,15 +5,15 @@ export const defaultValidateOrderPosition = async ({ product }, { modules }) =>
5
5
  }
6
6
  };
7
7
  export const ordersSettings = {
8
- ensureUserHasCart: null,
9
- orderNumberHashFn: null,
10
- validateOrderPosition: null,
8
+ ensureUserHasCart: false,
9
+ orderNumberHashFn: generateRandomHash,
10
+ validateOrderPosition: defaultValidateOrderPosition,
11
11
  lockOrderDuringCheckout: false,
12
- configureSettings({ ensureUserHasCart = false, orderNumberHashFn = generateRandomHash, validateOrderPosition = defaultValidateOrderPosition, lockOrderDuringCheckout = false, } = {}) {
13
- this.ensureUserHasCart = ensureUserHasCart;
14
- this.orderNumberHashFn = orderNumberHashFn;
15
- this.validateOrderPosition = validateOrderPosition;
16
- this.lockOrderDuringCheckout = lockOrderDuringCheckout;
12
+ configureSettings({ ensureUserHasCart, orderNumberHashFn, validateOrderPosition, lockOrderDuringCheckout, } = {}) {
13
+ this.ensureUserHasCart = ensureUserHasCart || false;
14
+ this.orderNumberHashFn = orderNumberHashFn || generateRandomHash;
15
+ this.validateOrderPosition = validateOrderPosition || defaultValidateOrderPosition;
16
+ this.lockOrderDuringCheckout = lockOrderDuringCheckout || false;
17
17
  },
18
18
  };
19
19
  //# sourceMappingURL=orders-settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orders-settings.js","sourceRoot":"","sources":["../src/orders-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAoB1D,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAO,EAAE,EAAE;IAClF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,iBAAiB,EAAE,IAAI;IACvB,iBAAiB,EAAE,IAAI;IACvB,qBAAqB,EAAE,IAAI;IAC3B,uBAAuB,EAAE,KAAK;IAE9B,iBAAiB,CAAC,EAChB,iBAAiB,GAAG,KAAK,EACzB,iBAAiB,GAAG,kBAAkB,EACtC,qBAAqB,GAAG,4BAA4B,EACpD,uBAAuB,GAAG,KAAK,MACN,EAAE;QAC3B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IACzD,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"orders-settings.js","sourceRoot":"","sources":["../src/orders-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAsB1D,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAO,EAAE,EAAE;IAClF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,iBAAiB,EAAE,KAAK;IACxB,iBAAiB,EAAE,kBAAkB;IACrC,qBAAqB,EAAE,4BAA4B;IACnD,uBAAuB,EAAE,KAAK;IAC9B,iBAAiB,CAAC,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,GACxB,GAAG,EAAE;QACJ,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,IAAI,KAAK,CAAC;QACpD,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,IAAI,kBAAkB,CAAC;QACjE,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,IAAI,4BAA4B,CAAC;QACnF,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,IAAI,KAAK,CAAC;IAClE,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { MigrateOrderCartsService } from '@unchainedshop/types/orders.js';
2
+ export declare const migrateOrderCartsService: MigrateOrderCartsService;
3
+ //# sourceMappingURL=migrateOrderCartService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrateOrderCartService.d.ts","sourceRoot":"","sources":["../../src/service/migrateOrderCartService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,eAAO,MAAM,wBAAwB,EAAE,wBA2CtC,CAAC"}
@@ -0,0 +1,32 @@
1
+ export const migrateOrderCartsService = async ({ fromUserId, toUserId, shouldMerge, countryContext }, unchainedAPI) => {
2
+ const fromCart = await unchainedAPI.modules.orders.cart({
3
+ countryContext,
4
+ userId: fromUserId,
5
+ });
6
+ const toCart = await unchainedAPI.modules.orders.cart({
7
+ countryContext,
8
+ userId: toUserId,
9
+ });
10
+ if (!fromCart) {
11
+ // No cart, don't copy
12
+ return toCart;
13
+ }
14
+ if (!toCart || !shouldMerge) {
15
+ // No destination cart, move whole cart
16
+ unchainedAPI.modules.orders.setCartOwner({ orderId: fromCart._id, userId: toUserId });
17
+ return unchainedAPI.modules.orders.updateCalculation(fromCart._id, unchainedAPI);
18
+ }
19
+ // Move positions
20
+ unchainedAPI.modules.orders.moveCartPositions({ fromOrderId: fromCart._id, toOrderId: toCart._id });
21
+ // Move billing address if target order has none
22
+ if (fromCart.billingAddress && !toCart.billingAddress) {
23
+ await unchainedAPI.modules.orders.updateBillingAddress(toCart._id, fromCart.billingAddress, unchainedAPI);
24
+ }
25
+ // Move contact data if target order has none
26
+ if (fromCart.contact && !toCart.contact) {
27
+ await unchainedAPI.modules.orders.updateContact(toCart._id, fromCart.contact, unchainedAPI);
28
+ }
29
+ await unchainedAPI.modules.orders.updateCalculation(fromCart._id, unchainedAPI);
30
+ return unchainedAPI.modules.orders.updateCalculation(toCart._id, unchainedAPI);
31
+ };
32
+ //# sourceMappingURL=migrateOrderCartService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrateOrderCartService.js","sourceRoot":"","sources":["../../src/service/migrateOrderCartService.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAA6B,KAAK,EACrE,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,EACrD,YAAY,EACZ,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACtD,cAAc;QACd,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACpD,cAAc;QACd,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,sBAAsB;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,uCAAuC;QACvC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtF,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACnF,CAAC;IAED,iBAAiB;IACjB,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAEpG,gDAAgD;IAChD,IAAI,QAAQ,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CACpD,MAAM,CAAC,GAAG,EACV,QAAQ,CAAC,cAAc,EACvB,YAAY,CACb,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAChF,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACjF,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { NextUserCartService } from '@unchainedshop/types/orders.js';
2
+ export declare const nextUserCartService: NextUserCartService;
3
+ //# sourceMappingURL=nextUserCartService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextUserCartService.d.ts","sourceRoot":"","sources":["../../src/service/nextUserCartService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAIrE,eAAO,MAAM,mBAAmB,EAAE,mBAqCjC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { ordersSettings } from '../orders-settings.js';
2
+ import { resolveBestCurrency } from '@unchainedshop/utils';
3
+ export const nextUserCartService = async ({ user, orderNumber, countryCode, forceCartCreation }, unchainedAPI) => {
4
+ const { modules } = unchainedAPI;
5
+ const cart = await modules.orders.cart({
6
+ countryContext: countryCode || user.lastLogin?.countryCode,
7
+ orderNumber,
8
+ userId: user._id,
9
+ });
10
+ if (cart)
11
+ return cart;
12
+ const shouldCreateNewCart = forceCartCreation || ordersSettings.ensureUserHasCart;
13
+ if (!shouldCreateNewCart)
14
+ return null;
15
+ const countryObject = await modules.countries.findCountry({ isoCode: countryCode });
16
+ const currencies = await modules.currencies.findCurrencies({ includeInactive: false });
17
+ const currency = resolveBestCurrency(countryObject.defaultCurrencyCode, currencies);
18
+ const order = await modules.orders.create({
19
+ userId: user._id,
20
+ orderNumber,
21
+ currency,
22
+ countryCode,
23
+ billingAddress: user.lastBillingAddress || user.profile?.address,
24
+ contact: user.lastContact ||
25
+ (!user.guest
26
+ ? {
27
+ telNumber: user.profile?.phoneMobile,
28
+ emailAddress: modules.users.primaryEmail(user)?.address,
29
+ }
30
+ : {}),
31
+ });
32
+ return modules.orders.initProviders(order, unchainedAPI);
33
+ };
34
+ //# sourceMappingURL=nextUserCartService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextUserCartService.js","sourceRoot":"","sources":["../../src/service/nextUserCartService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,CAAC,MAAM,mBAAmB,GAAwB,KAAK,EAC3D,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,EACrD,YAAY,EACZ,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;IAEjC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACrC,cAAc,EAAE,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,WAAW;QAC1D,WAAW;QACX,MAAM,EAAE,IAAI,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,mBAAmB,GAAG,iBAAiB,IAAI,cAAc,CAAC,iBAAiB,CAAC;IAClF,IAAI,CAAC,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,aAAa,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;IAEpF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACxC,MAAM,EAAE,IAAI,CAAC,GAAG;QAChB,WAAW;QACX,QAAQ;QACR,WAAW;QACX,cAAc,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO;QAChE,OAAO,EACL,IAAI,CAAC,WAAW;YAChB,CAAC,CAAC,IAAI,CAAC,KAAK;gBACV,CAAC,CAAC;oBACE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW;oBACpC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO;iBACxD;gBACH,CAAC,CAAC,EAAE,CAAC;KACV,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAC3D,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { OrderServices } from '@unchainedshop/types/orders.js';
2
+ export declare const orderServices: OrderServices;
3
+ //# sourceMappingURL=orderServices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderServices.d.ts","sourceRoot":"","sources":["../../src/service/orderServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAI/D,eAAO,MAAM,aAAa,EAAE,aAG3B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { migrateOrderCartsService } from './migrateOrderCartService.js';
2
+ import { nextUserCartService } from './nextUserCartService.js';
3
+ export const orderServices = {
4
+ migrateOrderCarts: migrateOrderCartsService,
5
+ nextUserCart: nextUserCartService,
6
+ };
7
+ //# sourceMappingURL=orderServices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderServices.js","sourceRoot":"","sources":["../../src/service/orderServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,iBAAiB,EAAE,wBAAwB;IAC3C,YAAY,EAAE,mBAAmB;CAClC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/core-orders",
3
- "version": "4.0.0-rc.8",
3
+ "version": "4.0.0",
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.4",
36
- "@unchainedshop/logger": "^4.0.0-rc.4",
37
- "@unchainedshop/utils": "^4.0.0-rc.4"
35
+ "@unchainedshop/events": "^4.0.0",
36
+ "@unchainedshop/logger": "^4.0.0",
37
+ "@unchainedshop/utils": "^4.0.0"
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
  };
@@ -7,6 +7,7 @@ import {
7
7
  TimestampFields,
8
8
  isDocumentDBCompatModeEnabled,
9
9
  } from '@unchainedshop/mongodb';
10
+ import { DateFilterInput } from '@unchainedshop/utils';
10
11
 
11
12
  export enum OrderStatus {
12
13
  PENDING = 'PENDING',
@@ -16,7 +17,7 @@ export enum OrderStatus {
16
17
  }
17
18
 
18
19
  export type Order = {
19
- _id?: string;
20
+ _id: string;
20
21
  billingAddress?: Address;
21
22
  calculation: any[];
22
23
  confirmed?: Date;
@@ -41,37 +42,45 @@ export interface OrderQuery extends mongodb.Filter<Order> {
41
42
  queryString?: string;
42
43
  status?: OrderStatus[];
43
44
  userId?: string;
45
+ deliveryIds?: string[];
46
+ paymentIds?: string[];
47
+ dateRange?: DateFilterInput;
44
48
  }
45
49
 
46
50
  export const OrdersCollection = async (db: mongodb.Db) => {
47
51
  const Orders = db.collection<Order>('orders');
48
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
+
49
79
  // Order Indexes
50
80
  await buildDbIndexes<Order>(Orders, [
51
81
  { index: { userId: 1 } },
52
82
  { index: { status: 1 } },
53
83
  { index: { orderNumber: 1 } },
54
- !isDocumentDBCompatModeEnabled() && {
55
- index: {
56
- _id: 'text',
57
- userId: 'text',
58
- orderNumber: 'text',
59
- status: 'text',
60
- 'contact.emailAddress': 'text',
61
- 'contact.telNumber': 'text',
62
- } as any,
63
- options: {
64
- weights: {
65
- _id: 8,
66
- userId: 3,
67
- orderNumber: 6,
68
- 'contact.telNumber': 5,
69
- 'contact.emailAddress': 4,
70
- status: 1,
71
- },
72
- name: 'order_fulltext_search',
73
- },
74
- },
75
84
  ]);
76
85
 
77
86
  return Orders;
@@ -6,6 +6,9 @@ export const buildFindSelector = ({
6
6
  status,
7
7
  userId,
8
8
  queryString,
9
+ paymentIds,
10
+ deliveryIds,
11
+ dateRange,
9
12
  ...rest
10
13
  }: OrderQuery) => {
11
14
  const selector: mongodb.Filter<Order> = { ...rest };
@@ -13,13 +16,28 @@ export const buildFindSelector = ({
13
16
  if (userId) {
14
17
  selector.userId = userId;
15
18
  }
19
+ if (dateRange) {
20
+ const dateFilter: mongodb.Filter<Order> = {};
21
+ if (dateRange.start) dateFilter.$gte = new Date(dateRange.start);
22
+ if (dateRange.end) dateFilter.$lte = new Date(dateRange.end);
23
+ if (Object.keys(dateFilter).length > 0) {
24
+ selector.ordered = dateFilter;
25
+ }
26
+ }
27
+
28
+ if (Array.isArray(deliveryIds) && deliveryIds?.length) {
29
+ selector.deliveryId = { $in: deliveryIds };
30
+ }
31
+
32
+ if (Array.isArray(paymentIds) && paymentIds?.length) {
33
+ selector.paymentId = { $in: paymentIds };
34
+ }
16
35
 
17
36
  if (Array.isArray(status) && status?.length) {
18
37
  selector.status = { $in: status };
19
38
  } else if (!includeCarts) {
20
39
  selector.status = { $ne: null }; // TODO: Slow performance! IDXSCAN in common query!
21
40
  }
22
-
23
41
  if (queryString) {
24
42
  assertDocumentDBCompatMode();
25
43
  (selector as any).$text = { $search: queryString };
@@ -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,15 +51,28 @@ 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
 
58
+ findDeliveryByProvidersId: async (
59
+ { deliveryProviderIds }: { deliveryProviderIds: string[] },
60
+ options?: mongodb.FindOptions,
61
+ ): Promise<OrderDelivery[]> => {
62
+ if (!deliveryProviderIds?.length) return [];
63
+ return OrderDeliveries.find(
64
+ { deliveryProviderId: { $in: deliveryProviderIds } },
65
+ options,
66
+ ).toArray();
67
+ },
68
+
58
69
  normalizedStatus,
59
70
 
60
71
  // Mutations
61
72
 
62
- create: async (doc: OrderDelivery): Promise<OrderDelivery> => {
73
+ create: async (
74
+ doc: Omit<OrderDelivery, '_id' | 'created'> & Pick<Partial<OrderDelivery>, '_id' | 'created'>,
75
+ ) => {
63
76
  const { insertedId: orderDeliveryId } = await OrderDeliveries.insertOne({
64
77
  _id: generateDbObjectId(),
65
78
  created: new Date(),
@@ -68,7 +81,9 @@ export const configureOrderDeliveriesModule = ({
68
81
  status: null,
69
82
  });
70
83
 
71
- const orderDelivery = await OrderDeliveries.findOne(buildFindByIdSelector(orderDeliveryId));
84
+ const orderDelivery = (await OrderDeliveries.findOne(
85
+ buildFindByIdSelector(orderDeliveryId),
86
+ )) as OrderDelivery;
72
87
  return orderDelivery;
73
88
  },
74
89
 
@@ -87,14 +102,14 @@ export const configureOrderDeliveriesModule = ({
87
102
  return updatedOrderDelivery;
88
103
  },
89
104
 
90
- updateContext: async (orderDeliveryId: string, context: any): Promise<OrderDelivery> => {
105
+ updateContext: async (orderDeliveryId: string, context: any) => {
91
106
  const selector = buildFindByIdSelector(orderDeliveryId);
92
107
  if (!context || Object.keys(context).length === 0) return OrderDeliveries.findOne(selector, {});
93
108
  const contextSetters = Object.fromEntries(
94
109
  Object.entries(context).map(([key, value]) => [`context.${key}`, value]),
95
110
  );
96
111
 
97
- const result = await OrderDeliveries.findOneAndUpdate(
112
+ const orderDelivery = await OrderDeliveries.findOneAndUpdate(
98
113
  selector,
99
114
  {
100
115
  $set: {
@@ -102,17 +117,14 @@ export const configureOrderDeliveriesModule = ({
102
117
  updated: new Date(),
103
118
  },
104
119
  },
105
- { includeResultMetadata: true, returnDocument: 'after' },
120
+ { returnDocument: 'after' },
106
121
  );
107
122
 
108
- if (result.ok) {
109
- await emit('ORDER_UPDATE_DELIVERY', {
110
- orderDelivery: result.value,
111
- });
112
- return result.value;
113
- }
114
-
115
- return null;
123
+ if (!orderDelivery) return null;
124
+ await emit('ORDER_UPDATE_DELIVERY', {
125
+ orderDelivery,
126
+ });
127
+ return orderDelivery;
116
128
  },
117
129
 
118
130
  updateStatus,
@@ -120,7 +132,7 @@ export const configureOrderDeliveriesModule = ({
120
132
  updateCalculation: async <T extends PricingCalculation>(
121
133
  orderDeliveryId: string,
122
134
  calculation: T[],
123
- ): Promise<OrderDelivery> => {
135
+ ) => {
124
136
  return OrderDeliveries.findOneAndUpdate(
125
137
  { _id: orderDeliveryId },
126
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,9 +82,21 @@ 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
+
89
+ findOrderPaymentsByProviderIds: async (
90
+ {
91
+ paymentProviderIds,
92
+ }: {
93
+ paymentProviderIds: string[];
94
+ },
95
+ options?: mongodb.FindOptions,
96
+ ): Promise<OrderPayment[]> => {
97
+ if (!paymentProviderIds?.length) return [];
98
+ return OrderPayments.find({ paymentProviderId: { $in: paymentProviderIds } }, options).toArray();
99
+ },
88
100
  findOrderPaymentByContextData: async (
89
101
  {
90
102
  context,
@@ -92,9 +104,9 @@ export const configureOrderPaymentsModule = ({
92
104
  context: any;
93
105
  },
94
106
  options?: mongodb.FindOptions,
95
- ): Promise<OrderPayment> => {
107
+ ) => {
96
108
  const selector = buildFindByContextDataSelector(context);
97
-
109
+ if (!selector) return null;
98
110
  return OrderPayments.findOne(selector, options);
99
111
  },
100
112
  countOrderPaymentsByContextData: async (
@@ -106,7 +118,7 @@ export const configureOrderPaymentsModule = ({
106
118
  options?: mongodb.FindOptions,
107
119
  ) => {
108
120
  const selector = buildFindByContextDataSelector(context);
109
-
121
+ if (!selector) return 0;
110
122
  return OrderPayments.countDocuments(selector, options);
111
123
  },
112
124
 
@@ -114,7 +126,9 @@ export const configureOrderPaymentsModule = ({
114
126
 
115
127
  // Mutations
116
128
 
117
- create: async (doc: OrderPayment): Promise<OrderPayment> => {
129
+ create: async (
130
+ doc: Omit<OrderPayment, '_id' | 'created'> & Pick<Partial<OrderPayment>, '_id' | 'created'>,
131
+ ): Promise<OrderPayment> => {
118
132
  const { insertedId: orderPaymentId } = await OrderPayments.insertOne({
119
133
  _id: generateDbObjectId(),
120
134
  created: new Date(),
@@ -123,9 +137,9 @@ export const configureOrderPaymentsModule = ({
123
137
  context: doc.context || {},
124
138
  });
125
139
 
126
- const orderPayment = await OrderPayments.findOne(
140
+ const orderPayment = (await OrderPayments.findOne(
127
141
  buildFindOrderPaymentByIdSelector(orderPaymentId),
128
- );
142
+ )) as OrderPayment;
129
143
 
130
144
  return orderPayment;
131
145
  },
@@ -156,14 +170,14 @@ export const configureOrderPaymentsModule = ({
156
170
  await emit('ORDER_PAY', { orderPayment });
157
171
  },
158
172
 
159
- updateContext: async (orderPaymentId: string, context: any): Promise<OrderPayment> => {
173
+ updateContext: async (orderPaymentId: string, context: any) => {
160
174
  const selector = buildFindOrderPaymentByIdSelector(orderPaymentId);
161
175
  if (!context || Object.keys(context).length === 0) return OrderPayments.findOne(selector, {});
162
176
 
163
177
  const contextSetters = Object.fromEntries(
164
178
  Object.entries(context).map(([key, value]) => [`context.${key}`, value]),
165
179
  );
166
- const result = await OrderPayments.findOneAndUpdate(
180
+ const orderPayment = await OrderPayments.findOneAndUpdate(
167
181
  selector,
168
182
  {
169
183
  $set: {
@@ -171,17 +185,14 @@ export const configureOrderPaymentsModule = ({
171
185
  updated: new Date(),
172
186
  },
173
187
  },
174
- { includeResultMetadata: true, returnDocument: 'after' },
188
+ { returnDocument: 'after' },
175
189
  );
176
190
 
177
- if (result.ok) {
178
- await emit('ORDER_UPDATE_PAYMENT', {
179
- orderPayment: result.value,
180
- });
181
- return result.value;
182
- }
183
-
184
- return null;
191
+ if (!orderPayment) return null;
192
+ await emit('ORDER_UPDATE_PAYMENT', {
193
+ orderPayment,
194
+ });
195
+ return orderPayment;
185
196
  },
186
197
 
187
198
  updateStatus,