@lodashventure/medusa-products-bought-together 0.2.14 → 0.2.16
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.
|
@@ -4,16 +4,66 @@ exports.GET = void 0;
|
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const productsBoughtTogether_1 = require("../../../../modules/productsBoughtTogether");
|
|
6
6
|
const GET = async (req, res) => {
|
|
7
|
+
const { product_id: productId } = (req.params || {});
|
|
8
|
+
if (!productId) {
|
|
9
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "product_id parameter is required");
|
|
10
|
+
}
|
|
7
11
|
const productsBoughtTogetherService = req.scope.resolve(productsBoughtTogether_1.PRODUCTS_BOUGHT_TOGETHER_MODULE);
|
|
8
|
-
const
|
|
9
|
-
const productId = rawRequest.params.product_id;
|
|
12
|
+
const productModuleService = req.scope.resolve(utils_1.Modules.PRODUCT);
|
|
10
13
|
try {
|
|
11
|
-
const
|
|
12
|
-
|
|
14
|
+
const relationships = await productsBoughtTogetherService.getByProductsId(productId);
|
|
15
|
+
if (!relationships.length) {
|
|
16
|
+
const payload = {
|
|
17
|
+
products: [],
|
|
18
|
+
count: 0,
|
|
19
|
+
};
|
|
20
|
+
return res.status(200).json(payload);
|
|
21
|
+
}
|
|
22
|
+
const relatedFrequency = new Map();
|
|
23
|
+
for (const relationship of relationships) {
|
|
24
|
+
const counterpart = relationship.productId1 === productId
|
|
25
|
+
? relationship.productId2
|
|
26
|
+
: relationship.productId1;
|
|
27
|
+
if (!counterpart) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const current = relatedFrequency.get(counterpart) ?? 0;
|
|
31
|
+
relatedFrequency.set(counterpart, Math.max(current, relationship.frequency));
|
|
32
|
+
}
|
|
33
|
+
if (!relatedFrequency.size) {
|
|
34
|
+
const payload = {
|
|
35
|
+
products: [],
|
|
36
|
+
count: 0,
|
|
37
|
+
};
|
|
38
|
+
return res.status(200).json(payload);
|
|
39
|
+
}
|
|
40
|
+
const relatedProductIds = Array.from(relatedFrequency.keys());
|
|
41
|
+
const relatedProducts = await productModuleService.listProducts({
|
|
42
|
+
id: relatedProductIds,
|
|
43
|
+
});
|
|
44
|
+
const productMap = new Map();
|
|
45
|
+
for (const product of relatedProducts) {
|
|
46
|
+
productMap.set(product.id, product);
|
|
47
|
+
}
|
|
48
|
+
const response = relatedProductIds
|
|
49
|
+
.map((id) => ({
|
|
50
|
+
product_id: id,
|
|
51
|
+
frequency: relatedFrequency.get(id) ?? 0,
|
|
52
|
+
product: productMap.get(id) ?? null,
|
|
53
|
+
}))
|
|
54
|
+
.sort((a, b) => b.frequency - a.frequency);
|
|
55
|
+
const payload = {
|
|
56
|
+
products: response,
|
|
57
|
+
count: response.length,
|
|
58
|
+
};
|
|
59
|
+
return res.status(200).json(payload);
|
|
13
60
|
}
|
|
14
61
|
catch (error) {
|
|
15
|
-
|
|
62
|
+
const message = error instanceof Error
|
|
63
|
+
? error.message
|
|
64
|
+
: "Failed to load products bought together";
|
|
65
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, message);
|
|
16
66
|
}
|
|
17
67
|
};
|
|
18
68
|
exports.GET = GET;
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb2R1Y3RzLWJvdWdodC10b2dldGhlci9bcHJvZHVjdF9pZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQWdFO0FBTWhFLHVGQUE0RjtBQWFyRixNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUE0QixDQUFBO0lBRS9FLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGtDQUFrQyxDQUNuQyxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sNkJBQTZCLEdBQ2pDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHdEQUErQixDQUFDLENBQUE7SUFFcEQsTUFBTSxvQkFBb0IsR0FDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRXBDLElBQUksQ0FBQztRQUNILE1BQU0sYUFBYSxHQUNqQixNQUFNLDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUVoRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUFtQztnQkFDOUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osS0FBSyxFQUFFLENBQUM7YUFDVCxDQUFBO1lBRUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN0QyxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJ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
|
package/package.json
CHANGED