@lodashventure/medusa-sales-analytics 1.1.5 → 1.1.6

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.
@@ -1,2 +1,2 @@
1
- import { MedusaRequest, MedusaResponse, MedusaNextFunction } from "@medusajs/framework/http";
1
+ import type { MedusaRequest, MedusaResponse, MedusaNextFunction } from "@medusajs/framework/http";
2
2
  export declare function addSalesStatistics(req: MedusaRequest, res: MedusaResponse, next: MedusaNextFunction): Promise<void>;
@@ -2,102 +2,167 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addSalesStatistics = addSalesStatistics;
4
4
  const utils_1 = require("@medusajs/framework/utils");
5
+ const COMPLETED_ORDER_STATUSES = new Set([
6
+ "completed",
7
+ "partially_returned",
8
+ "partially_shipped",
9
+ "shipped",
10
+ "fulfilled",
11
+ "partially_fulfilled",
12
+ ]);
5
13
  async function addSalesStatistics(req, res, next) {
6
14
  const originalJson = res.json.bind(res);
7
15
  res.json = async function (data) {
8
- // Check if this is a products listing response
9
- if (data?.products && Array.isArray(data.products)) {
16
+ try {
17
+ const payload = normalizeProductPayload(data);
18
+ if (!payload || payload.products.length === 0) {
19
+ return originalJson(data);
20
+ }
21
+ let salesByVariant = new Map();
10
22
  try {
11
23
  const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
12
- // Get all order items
13
- const { data: orderItems } = await query.graph({
14
- entity: "order_line_item",
15
- fields: [
16
- "id",
17
- "variant_id",
18
- "quantity",
19
- "unit_price",
20
- "subtotal",
21
- "order_id"
22
- ]
23
- });
24
- // Get orders separately
25
- const orderIds = [...new Set(orderItems.map(item => item.order_id).filter(Boolean))];
26
- let orders = [];
27
- if (orderIds.length > 0) {
28
- const orderResult = await query.graph({
29
- entity: "order",
30
- fields: ["id", "status", "created_at"],
31
- filters: {
32
- id: orderIds
33
- }
34
- });
35
- orders = orderResult.data;
36
- }
37
- // Create order map
38
- const orderMap = new Map(orders.map(o => [o.id, o]));
39
- // Filter for completed orders
40
- const filteredOrderItems = orderItems.filter(item => {
41
- const order = orderMap.get(item.order_id);
42
- return order && [
43
- "completed",
44
- "partially_returned",
45
- "partially_shipped",
46
- "shipped",
47
- "fulfilled",
48
- "partially_fulfilled"
49
- ].includes(order.status);
50
- });
51
- // Add sales statistics to each product
52
- data.products = data.products.map((product) => {
53
- const variantIds = product.variants?.map((v) => v.id) || [];
54
- const productSales = filteredOrderItems.filter(item => item.variant_id && variantIds.includes(item.variant_id));
55
- const totalQuantitySold = productSales.reduce((sum, item) => sum + (item.quantity || 0), 0);
56
- const totalRevenue = productSales.reduce((sum, item) => sum + (item.subtotal || 0), 0);
57
- // Add sales data to each variant if they exist
58
- if (product.variants && Array.isArray(product.variants)) {
59
- product.variants = product.variants.map((variant) => {
60
- const variantSales = productSales.filter(item => item.variant_id === variant.id);
61
- const variantQuantitySold = variantSales.reduce((sum, item) => sum + (item.quantity || 0), 0);
62
- const variantRevenue = variantSales.reduce((sum, item) => sum + (item.subtotal || 0), 0);
63
- // Add sales stats to variant
64
- return {
65
- ...variant,
66
- sales_statistics: {
67
- quantity_sold: variantQuantitySold,
68
- revenue: variantRevenue,
69
- number_of_orders: new Set(variantSales.map(item => item.order_id).filter(Boolean)).size
70
- }
71
- };
72
- });
73
- }
74
- // Add product-level sales statistics
75
- return {
76
- ...product,
77
- sales_statistics: {
78
- total_quantity_sold: totalQuantitySold,
79
- total_revenue: totalRevenue,
80
- number_of_orders: new Set(productSales.map(item => item.order_id).filter(Boolean)).size,
81
- average_order_value: totalQuantitySold > 0 ? totalRevenue / totalQuantitySold : 0,
82
- is_bestseller: totalQuantitySold > 0,
83
- stock_status: product.variants?.some((v) => {
84
- // Check inventory from different possible structures
85
- const inventory = v.inventory_items?.[0]?.inventory ||
86
- v.inventory_items?.[0] ||
87
- v.inventory?.items?.[0];
88
- return inventory?.available_quantity > 0 || inventory?.stocked_quantity > 0;
89
- }) ? 'in_stock' : 'out_of_stock'
90
- }
91
- };
92
- });
24
+ const orderItems = await fetchCompletedOrderItems(query);
25
+ salesByVariant = groupSalesByVariant(orderItems);
93
26
  }
94
27
  catch (error) {
95
- // If there's an error fetching sales data, return products without stats
96
- console.error("Error adding sales statistics:", error);
28
+ console.error("Error fetching sales statistics:", error);
29
+ // Continue with empty sales data so middleware still adds the field
97
30
  }
31
+ const enrichedProducts = payload.products.map((product) => attachSalesStatistics(product, salesByVariant));
32
+ payload.apply(enrichedProducts);
33
+ }
34
+ catch (error) {
35
+ console.error("Error adding sales statistics:", error);
98
36
  }
99
37
  return originalJson(data);
100
38
  };
101
39
  next();
102
40
  }
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXNhbGVzLXN0YXRpc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzL2FkZC1zYWxlcy1zdGF0aXN0aWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsZ0RBaUlDO0FBbklELHFEQUFzRTtBQUUvRCxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLEdBQWtCLEVBQ2xCLEdBQW1CLEVBQ25CLElBQXdCO0lBRXhCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXZDLEdBQVcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxXQUFVLElBQVM7UUFDMUMsK0NBQStDO1FBQy9DLElBQUksSUFBSSxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQztnQkFDSCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFakUsc0JBQXNCO2dCQUN0QixNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztvQkFDN0MsTUFBTSxFQUFFLGlCQUFpQjtvQkFDekIsTUFBTSxFQUFFO3dCQUNOLElBQUk7d0JBQ0osWUFBWTt3QkFDWixVQUFVO3dCQUNWLFlBQVk7d0JBQ1osVUFBVTt3QkFDVixVQUFVO3FCQUNYO2lCQUNGLENBQW9CLENBQUM7Z0JBRXRCLHdCQUF3QjtnQkFDeEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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
41
+ function normalizeProductPayload(data) {
42
+ if (Array.isArray(data?.products)) {
43
+ return {
44
+ products: data.products,
45
+ apply: (products) => {
46
+ data.products = products;
47
+ },
48
+ };
49
+ }
50
+ if (data?.product && !Array.isArray(data.product)) {
51
+ return {
52
+ products: [data.product],
53
+ apply: (products) => {
54
+ data.product = products[0] ?? data.product;
55
+ },
56
+ };
57
+ }
58
+ return null;
59
+ }
60
+ async function fetchCompletedOrderItems(query) {
61
+ const result = (await query.graph({
62
+ entity: "order_line_item",
63
+ fields: [
64
+ "id",
65
+ "variant_id",
66
+ "quantity",
67
+ "unit_price",
68
+ "subtotal",
69
+ "order_id",
70
+ "order.id",
71
+ "order.status",
72
+ ],
73
+ }));
74
+ const items = result?.data ?? [];
75
+ return items.filter((item) => {
76
+ const status = typeof item?.order?.status === "string"
77
+ ? item.order.status.toLowerCase()
78
+ : "";
79
+ return COMPLETED_ORDER_STATUSES.has(status);
80
+ });
81
+ }
82
+ function groupSalesByVariant(orderItems) {
83
+ return orderItems.reduce((acc, item) => {
84
+ if (!item?.variant_id) {
85
+ return acc;
86
+ }
87
+ const sales = acc.get(item.variant_id) ?? [];
88
+ sales.push(item);
89
+ acc.set(item.variant_id, sales);
90
+ return acc;
91
+ }, new Map());
92
+ }
93
+ function attachSalesStatistics(product, salesByVariant) {
94
+ if (!product) {
95
+ return product;
96
+ }
97
+ const hasVariantArray = Array.isArray(product.variants);
98
+ const variantsArray = hasVariantArray ? product.variants : [];
99
+ const variantIds = variantsArray
100
+ .map((variant) => variant?.id)
101
+ .filter(Boolean);
102
+ const productSales = variantIds.flatMap((variantId) => salesByVariant.get(variantId) ?? []);
103
+ const totalQuantitySold = sumQuantities(productSales);
104
+ const totalRevenue = sumRevenue(productSales);
105
+ const numberOfOrders = countUniqueOrders(productSales);
106
+ const enrichedVariants = hasVariantArray
107
+ ? variantsArray.map((variant) => {
108
+ const variantSales = salesByVariant.get(variant.id) ?? [];
109
+ return {
110
+ ...variant,
111
+ sales_statistics: {
112
+ quantity_sold: sumQuantities(variantSales),
113
+ revenue: sumRevenue(variantSales),
114
+ number_of_orders: countUniqueOrders(variantSales),
115
+ },
116
+ };
117
+ })
118
+ : product.variants;
119
+ return {
120
+ ...product,
121
+ ...(enrichedVariants ? { variants: enrichedVariants } : {}),
122
+ sales_statistics: {
123
+ total_quantity_sold: totalQuantitySold,
124
+ total_revenue: totalRevenue,
125
+ number_of_orders: numberOfOrders,
126
+ average_order_value: totalQuantitySold > 0 ? totalRevenue / totalQuantitySold : 0,
127
+ is_bestseller: totalQuantitySold > 0,
128
+ stock_status: resolveStockStatus(enrichedVariants ?? product.variants),
129
+ },
130
+ };
131
+ }
132
+ function sumQuantities(orderItems) {
133
+ return orderItems.reduce((sum, item) => sum + (typeof item.quantity === "number" ? item.quantity : 0), 0);
134
+ }
135
+ function sumRevenue(orderItems) {
136
+ return orderItems.reduce((sum, item) => sum + (typeof item.subtotal === "number" ? item.subtotal : 0), 0);
137
+ }
138
+ function countUniqueOrders(orderItems) {
139
+ return new Set(orderItems.map((item) => item.order_id).filter(Boolean)).size;
140
+ }
141
+ function resolveStockStatus(variants) {
142
+ if (!Array.isArray(variants) || variants.length === 0) {
143
+ return "out_of_stock";
144
+ }
145
+ return variants.some((variant) => variantHasInventory(variant))
146
+ ? "in_stock"
147
+ : "out_of_stock";
148
+ }
149
+ function variantHasInventory(variant) {
150
+ if (!variant) {
151
+ return false;
152
+ }
153
+ const inventoryCandidate = variant.inventory_items?.[0]?.inventory ??
154
+ variant.inventory_items?.[0] ??
155
+ variant.inventory?.items?.[0];
156
+ if (!inventoryCandidate) {
157
+ return false;
158
+ }
159
+ const inventory = inventoryCandidate.inventory ?? inventoryCandidate;
160
+ if (typeof inventory?.available_quantity === "number") {
161
+ return inventory.available_quantity > 0;
162
+ }
163
+ if (typeof inventory?.stocked_quantity === "number") {
164
+ return inventory.stocked_quantity > 0;
165
+ }
166
+ return false;
167
+ }
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXNhbGVzLXN0YXRpc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzL2FkZC1zYWxlcy1zdGF0aXN0aWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ0NBLGdEQXFDQztBQWhFRCxxREFBc0U7QUFrQnRFLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdkMsV0FBVztJQUNYLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsU0FBUztJQUNULFdBQVc7SUFDWCxxQkFBcUI7Q0FDdEIsQ0FBQyxDQUFDO0FBRUksS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxHQUFrQixFQUNsQixHQUFtQixFQUNuQixJQUF3QjtJQUV4QixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2QyxHQUFXLENBQUMsSUFBSSxHQUFHLEtBQUssV0FBVyxJQUFTO1FBQzNDLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFFRCxJQUFJLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztZQUU3RCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sVUFBVSxHQUFHLE1BQU0sd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pELGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodashventure/medusa-sales-analytics",
3
- "version": "1.1.5",
3
+ "version": "1.1.6",
4
4
  "description": "Sales analytics and statistics plugin for Medusa v2",
5
5
  "author": "Lodashventure",
6
6
  "license": "MIT",
@@ -29,21 +29,21 @@
29
29
  "prepublishOnly": "medusa plugin:build"
30
30
  },
31
31
  "dependencies": {
32
- "@medusajs/framework": "2.11.2"
32
+ "@medusajs/framework": "2.11.3"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "@medusajs/framework": "2.11.2",
36
36
  "@medusajs/medusa": "2.11.2"
37
37
  },
38
38
  "devDependencies": {
39
- "@medusajs/admin-sdk": "2.11.2",
40
- "@medusajs/admin-shared": "2.11.2",
41
- "@medusajs/cli": "2.11.2",
42
- "@medusajs/medusa": "2.11.2",
43
- "@medusajs/types": "2.11.2",
44
- "@types/node": "^20.19.23",
39
+ "@medusajs/admin-sdk": "2.11.3",
40
+ "@medusajs/admin-shared": "2.11.3",
41
+ "@medusajs/cli": "2.11.3",
42
+ "@medusajs/medusa": "2.11.3",
43
+ "@medusajs/types": "2.11.3",
44
+ "@types/node": "^24.10.0",
45
45
  "ts-node": "^10.9.2",
46
- "typescript": "^5.6.2",
47
- "vite": "^5.2.11"
46
+ "typescript": "^5.9.3",
47
+ "vite": "^7.2.2"
48
48
  }
49
49
  }