@riocrypto/common-server 1.0.2462 → 1.0.2463

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.
@@ -11,6 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.getOrderFromReference = void 0;
13
13
  const order_1 = require("../models/order");
14
+ const common_1 = require("@riocrypto/common");
14
15
  const getOrderFromReference = (reference, mongoose) => __awaiter(void 0, void 0, void 0, function* () {
15
16
  // Ensure reference is defined
16
17
  if (!reference) {
@@ -19,15 +20,47 @@ const getOrderFromReference = (reference, mongoose) => __awaiter(void 0, void 0,
19
20
  // Convert reference to lowercase to ensure case-insensitive comparison
20
21
  const referenceText = reference.toLowerCase();
21
22
  const Order = (0, order_1.buildOrder)(mongoose);
22
- const orders = yield Order.find();
23
- const order = orders.find((order) => {
24
- const orderId = order.id.toString().toLowerCase();
25
- const last6Chars = orderId.slice(-6);
26
- return referenceText.includes(last6Chars);
23
+ // Define statuses to exclude (completed, cancelled, and any failed status)
24
+ const excludedStatuses = Object.values(common_1.OrderStatus).filter((status) => {
25
+ const statusLower = status.toLowerCase();
26
+ return (statusLower === "complete" ||
27
+ statusLower === "cancelled" ||
28
+ statusLower === "expired" ||
29
+ statusLower === "refundcomplete" ||
30
+ statusLower.includes("failed"));
27
31
  });
28
- if (!order) {
32
+ // Process in batches to avoid memory issues
33
+ const batchSize = 1000;
34
+ let skip = 0;
35
+ let foundOrder = null;
36
+ while (!foundOrder) {
37
+ // Query only active orders (exclude completed/cancelled/failed) in batches
38
+ const orders = yield Order.find({
39
+ status: { $nin: excludedStatuses },
40
+ })
41
+ .select("_id") // Only select the ID field to minimize memory usage
42
+ .skip(skip)
43
+ .limit(batchSize)
44
+ .lean(); // Use lean() for better performance
45
+ // If no more orders, break the loop
46
+ if (orders.length === 0) {
47
+ break;
48
+ }
49
+ // Check each order ID against the reference
50
+ for (const order of orders) {
51
+ const orderId = order._id.toString().toLowerCase();
52
+ const last6Chars = orderId.slice(-6);
53
+ if (referenceText.includes(last6Chars)) {
54
+ // Found a match, now fetch the full order document
55
+ foundOrder = yield Order.findById(order._id);
56
+ break;
57
+ }
58
+ }
59
+ skip += batchSize;
60
+ }
61
+ if (!foundOrder) {
29
62
  throw new Error("Order not found");
30
63
  }
31
- return order;
64
+ return foundOrder;
32
65
  });
33
66
  exports.getOrderFromReference = getOrderFromReference;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riocrypto/common-server",
3
- "version": "1.0.2462",
3
+ "version": "1.0.2463",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",