@lodashventure/medusa-products-bought-together 0.2.15 → 0.2.17

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 rawRequest = req;
9
- const productId = rawRequest.params.product_id;
12
+ const productModuleService = req.scope.resolve(utils_1.Modules.PRODUCT);
10
13
  try {
11
- const result = await productsBoughtTogetherService.getByProductsId(productId);
12
- res.status(200).json(result);
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
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.DB_ERROR, error.message);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb2R1Y3RzLWJvdWdodC10b2dldGhlci9bcHJvZHVjdF9pZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEscURBQXVEO0FBRXZELHVGQUE2RjtBQUV0RixNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQWtCLEVBQ2xCLEdBQW1CLEVBQ25CLEVBQUU7SUFFRixNQUFNLDZCQUE2QixHQUFrQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDcEYsd0RBQStCLENBQ2hDLENBQUM7SUFFRixNQUFNLFVBQVUsR0FBRyxHQUFxQixDQUFDO0lBQ3pDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBRS9DLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sNkJBQTZCLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzdFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FDZCxDQUFBO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQTtBQXJCWSxRQUFBLEdBQUcsT0FxQmYifQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb2R1Y3RzLWJvdWdodC10b2dldGhlci9bcHJvZHVjdF9pZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQWdFO0FBTWhFLHVGQUE0RjtBQWFyRixNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUE0QixDQUFBO0lBRS9FLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGtDQUFrQyxDQUNuQyxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sNkJBQTZCLEdBQ2pDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHdEQUErQixDQUFDLENBQUE7SUFFcEQsTUFBTSxvQkFBb0IsR0FDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRXBDLElBQUksQ0FBQztRQUNILE1BQU0sYUFBYSxHQUNqQixNQUFNLDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUVoRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUFtQztnQkFDOUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osS0FBSyxFQUFFLENBQUM7YUFDVCxDQUFBO1lBRUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN0QyxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJ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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodashventure/medusa-products-bought-together",
3
- "version": "0.2.15",
3
+ "version": "0.2.17",
4
4
  "description": "Monitor and get products which are bought together",
5
5
  "author": "RSC Labs (https://rsoftcon.com)",
6
6
  "license": "MIT",