@lodashventure/medusa-campaign 1.4.22 → 1.4.24

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.
@@ -73,9 +73,43 @@ const GET = async (req, res) => {
73
73
  relations: ["promotions"],
74
74
  });
75
75
  console.log(`Found ${campaigns.length} campaigns from promotion service`);
76
+ const promotionUsageLimits = await customCampaignModuleService.listPromotionUsageLimits({
77
+ campaign_id: campaignIds,
78
+ });
79
+ const usageSummaryByCampaign = new Map();
80
+ for (const limit of promotionUsageLimits) {
81
+ const summary = usageSummaryByCampaign.get(limit.campaign_id) ?? {
82
+ product_count: 0,
83
+ active_product_count: 0,
84
+ total_limit: 0,
85
+ total_used: 0,
86
+ total_remaining: 0,
87
+ };
88
+ summary.product_count += 1;
89
+ summary.total_limit += limit.limit ?? 0;
90
+ summary.total_used += limit.used ?? 0;
91
+ if (typeof limit.limit === "number" && typeof limit.used === "number") {
92
+ const remaining = Math.max(limit.limit - limit.used, 0);
93
+ summary.total_remaining += remaining;
94
+ if (remaining > 0) {
95
+ summary.active_product_count += 1;
96
+ }
97
+ }
98
+ usageSummaryByCampaign.set(limit.campaign_id, summary);
99
+ }
100
+ const campaignsWithUsage = campaigns.map((campaign) => ({
101
+ ...campaign,
102
+ flash_sale_summary: usageSummaryByCampaign.get(campaign.id) ?? {
103
+ product_count: 0,
104
+ active_product_count: 0,
105
+ total_limit: 0,
106
+ total_used: 0,
107
+ total_remaining: 0,
108
+ },
109
+ }));
76
110
  res.status(200).json({
77
- campaigns,
78
- count: campaigns.length,
111
+ campaigns: campaignsWithUsage,
112
+ count: campaignsWithUsage.length,
79
113
  limit: 20,
80
114
  offset: 0,
81
115
  });
@@ -93,4 +127,4 @@ const GET = async (req, res) => {
93
127
  }
94
128
  };
95
129
  exports.GET = GET;
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ZsYXNoLXNhbGVzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUErRTtBQUMvRSxxREFJbUM7QUFDbkMsc0VBQXlFO0FBQ3pFLDhDQUFvQjtBQUNwQixtR0FBOEY7QUFDOUYsa0hBQStHO0FBQy9HLHdFQUEyRTtBQUc5RCxRQUFBLDBCQUEwQixHQUFHLGFBQUMsQ0FBQyxNQUFNLENBQUM7SUFDakQsSUFBSSxFQUFFLGFBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO0lBQzNDLFdBQVcsRUFBRSxhQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQztJQUN6RCxJQUFJLEVBQUUsYUFBQyxDQUFDLFVBQVUsQ0FBQyxxQ0FBZ0IsQ0FBQztJQUNwQyxTQUFTLEVBQUUsYUFBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7SUFDMUIsT0FBTyxFQUFFLGFBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO0lBQ3hCLFFBQVEsRUFBRSxhQUFDO1NBQ1IsS0FBSyxDQUNKLGFBQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsYUFBQyxDQUFDLE1BQU0sQ0FBQztZQUNoQixFQUFFLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRTtZQUNkLEtBQUssRUFBRSxhQUFDLENBQUMsTUFBTSxFQUFFO1NBQ2xCLENBQUM7UUFDRixZQUFZLEVBQUUsYUFBQyxDQUFDLElBQUksQ0FBQztZQUNuQixZQUFZO1NBQ2IsQ0FBQztRQUNGLGFBQWEsRUFBRSxhQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoQyxLQUFLLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FB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
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ZsYXNoLXNhbGVzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUErRTtBQUMvRSxxREFJbUM7QUFDbkMsc0VBQXlFO0FBQ3pFLDhDQUFvQjtBQUNwQixtR0FBOEY7QUFDOUYsa0hBQStHO0FBQy9HLHdFQUEyRTtBQUc5RCxRQUFBLDBCQUEwQixHQUFHLGFBQUMsQ0FBQyxNQUFNLENBQUM7SUFDakQsSUFBSSxFQUFFLGFBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO0lBQzNDLFdBQVcsRUFBRSxhQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQztJQUN6RCxJQUFJLEVBQUUsYUFBQyxDQUFDLFVBQVUsQ0FBQyxxQ0FBZ0IsQ0FBQztJQUNwQyxTQUFTLEVBQUUsYUFBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7SUFDMUIsT0FBTyxFQUFFLGFBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO0lBQ3hCLFFBQVEsRUFBRSxhQUFDO1NBQ1IsS0FBSyxDQUNKLGFBQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsYUFBQyxDQUFDLE1BQU0sQ0FBQztZQUNoQixFQUFFLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRTtZQUNkLEtBQUssRUFBRSxhQUFDLENBQUMsTUFBTSxFQUFFO1NBQ2xCLENBQUM7UUFDRixZQUFZLEVBQUUsYUFBQyxDQUFDLElBQUksQ0FBQztZQUNuQixZQUFZO1NBQ2IsQ0FBQztRQUNGLGFBQWEsRUFBRSxhQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoQyxLQUFLLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FB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
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addFlashSaleHighlights = addFlashSaleHighlights;
4
+ const framework_1 = require("@medusajs/framework");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const custom_campaigns_1 = require("../../modules/custom-campaigns");
7
+ const campaign_type_enum_1 = require("../../modules/custom-campaigns/types/campaign-type.enum");
8
+ async function addFlashSaleHighlights(req, res, next) {
9
+ try {
10
+ const originalJson = res.json.bind(res);
11
+ res.json = async function (payload) {
12
+ try {
13
+ const productIds = collectProductIds(payload);
14
+ if (productIds.length > 0) {
15
+ const highlightMap = await fetchFlashSaleHighlights(productIds);
16
+ if (payload?.product && payload.product.id) {
17
+ payload.product = enrichProductWithHighlight(payload.product, highlightMap.get(payload.product.id));
18
+ }
19
+ if (Array.isArray(payload?.products)) {
20
+ payload.products = payload.products.map((product) => enrichProductWithHighlight(product, product?.id ? highlightMap.get(product.id) : undefined));
21
+ }
22
+ }
23
+ }
24
+ catch (error) {
25
+ console.error("[Campaign] Failed to attach flash sale highlights:", error instanceof Error ? error.message : error);
26
+ }
27
+ return originalJson(payload);
28
+ };
29
+ next();
30
+ }
31
+ catch (middlewareError) {
32
+ console.error("[Campaign] addFlashSaleHighlights middleware error:", middlewareError);
33
+ next(middlewareError);
34
+ }
35
+ }
36
+ function collectProductIds(payload) {
37
+ const ids = new Set();
38
+ if (payload?.product?.id) {
39
+ ids.add(payload.product.id);
40
+ }
41
+ if (Array.isArray(payload?.products)) {
42
+ for (const product of payload.products) {
43
+ if (product?.id) {
44
+ ids.add(product.id);
45
+ }
46
+ }
47
+ }
48
+ return Array.from(ids);
49
+ }
50
+ async function fetchFlashSaleHighlights(productIds) {
51
+ const result = new Map();
52
+ if (productIds.length === 0) {
53
+ return result;
54
+ }
55
+ const customCampaignModuleService = framework_1.container.resolve(custom_campaigns_1.CUSTOM_CAMPAIGN_MODULE);
56
+ const [flashSaleTypes, promotionUsageLimits] = await Promise.all([
57
+ customCampaignModuleService.listCustomCampaignTypes({
58
+ type: campaign_type_enum_1.CampaignTypeEnum.FlashSale,
59
+ }),
60
+ customCampaignModuleService.listPromotionUsageLimits({
61
+ product_id: productIds,
62
+ }),
63
+ ]);
64
+ const activeFlashSaleCampaignIds = new Set(flashSaleTypes
65
+ .filter((type) => !type.deleted_at)
66
+ .map((type) => type.campaign_id));
67
+ if (activeFlashSaleCampaignIds.size === 0) {
68
+ return result;
69
+ }
70
+ const relevantUsageLimits = promotionUsageLimits.filter((limit) => activeFlashSaleCampaignIds.has(limit.campaign_id));
71
+ if (relevantUsageLimits.length === 0) {
72
+ return result;
73
+ }
74
+ const campaignIds = Array.from(new Set(relevantUsageLimits.map((limit) => limit.campaign_id)));
75
+ const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
76
+ const campaigns = await promotionService.listCampaigns({ id: campaignIds }, {
77
+ relations: ["promotions", "promotions.application_method"],
78
+ });
79
+ const now = new Date();
80
+ for (const campaign of campaigns) {
81
+ const startsAt = campaign.starts_at ? new Date(campaign.starts_at) : null;
82
+ const endsAt = campaign.ends_at ? new Date(campaign.ends_at) : null;
83
+ if ((startsAt && startsAt > now) || (endsAt && endsAt < now)) {
84
+ continue;
85
+ }
86
+ const campaignUsageLimits = relevantUsageLimits.filter((limit) => limit.campaign_id === campaign.id);
87
+ for (const promotion of campaign.promotions ?? []) {
88
+ if (!promotion?.application_method) {
89
+ continue;
90
+ }
91
+ const usageLimit = campaignUsageLimits.find((limit) => limit.promotion_id === promotion.id);
92
+ if (!usageLimit) {
93
+ continue;
94
+ }
95
+ const canComputeRemainder = typeof usageLimit.limit === "number" &&
96
+ typeof usageLimit.used === "number";
97
+ const remaining = canComputeRemainder
98
+ ? Math.max(usageLimit.limit - usageLimit.used, 0)
99
+ : null;
100
+ const isSoldOut = canComputeRemainder && usageLimit.used >= usageLimit.limit;
101
+ const highlight = {
102
+ campaign_id: campaign.id,
103
+ campaign_identifier: campaign.campaign_identifier,
104
+ campaign_type: campaign_type_enum_1.CampaignTypeEnum.FlashSale,
105
+ name: campaign.name,
106
+ description: campaign.description,
107
+ starts_at: campaign.starts_at,
108
+ ends_at: campaign.ends_at,
109
+ discount_type: promotion.application_method.type,
110
+ discount_value: promotion.application_method.value,
111
+ max_quantity: promotion.application_method.max_quantity ?? null,
112
+ limit: usageLimit.limit,
113
+ used: usageLimit.used,
114
+ remaining,
115
+ is_sold_out: isSoldOut,
116
+ };
117
+ const currentHighlight = result.get(usageLimit.product_id);
118
+ if (!currentHighlight) {
119
+ result.set(usageLimit.product_id, highlight);
120
+ continue;
121
+ }
122
+ const currentEnds = currentHighlight.ends_at
123
+ ? new Date(currentHighlight.ends_at)
124
+ : null;
125
+ const incomingEnds = highlight.ends_at ? new Date(highlight.ends_at) : null;
126
+ const shouldReplace =
127
+ // Prefer highlights that end sooner (urgency)
128
+ (incomingEnds && !currentEnds) ||
129
+ (incomingEnds &&
130
+ currentEnds &&
131
+ incomingEnds.getTime() < currentEnds.getTime()) ||
132
+ // Otherwise prefer higher discount value
133
+ ((highlight.discount_value ?? 0) > (currentHighlight.discount_value ?? 0));
134
+ if (shouldReplace) {
135
+ result.set(usageLimit.product_id, highlight);
136
+ }
137
+ }
138
+ }
139
+ return result;
140
+ }
141
+ function enrichProductWithHighlight(product, highlight) {
142
+ if (!product) {
143
+ return product;
144
+ }
145
+ return {
146
+ ...product,
147
+ flash_sale: highlight ?? null,
148
+ };
149
+ }
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZsYXNoLXNhbGUtaGlnaGxpZ2h0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvbWlkZGxld2FyZXMvYWRkLWZsYXNoLXNhbGUtaGlnaGxpZ2h0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTRCQSx3REFpREM7QUE3RUQsbURBQWdEO0FBTWhELHFEQUFvRDtBQUNwRCxxRUFBd0U7QUFDeEUsZ0dBQTJGO0FBb0JwRixLQUFLLFVBQVUsc0JBQXNCLENBQzFDLEdBQWtCLEVBQ2xCLEdBQW1CLEVBQ25CLElBQXdCO0lBRXhCLElBQUksQ0FBQztRQUNILE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLEdBQVcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxXQUFXLE9BQVk7WUFDOUMsSUFBSSxDQUFDO2dCQUNILE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUU5QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzFCLE1BQU0sWUFBWSxHQUFHLE1BQU0sd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBRWhFLElBQUksT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUMzQyxPQUFPLENBQUMsT0FBTyxHQUFHLDBCQUEwQixDQUMxQyxPQUFPLENBQUMsT0FBTyxFQUNmLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FDckMsQ0FBQztvQkFDSixDQUFDO29CQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQzt3QkFDckMsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxD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
@@ -5,9 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const framework_1 = require("@medusajs/framework");
7
7
  const route_1 = require("./admin/flash-sales/route");
8
- const route_2 = require("./admin/coupons/route");
9
8
  const multer_1 = __importDefault(require("multer"));
9
+ const route_2 = require("./admin/coupons/route");
10
10
  const route_3 = require("./store/customers/me/coupons/route");
11
+ const add_flash_sale_highlights_1 = require("./middlewares/add-flash-sale-highlights");
11
12
  const upload = (0, multer_1.default)({
12
13
  storage: multer_1.default.memoryStorage(),
13
14
  });
@@ -77,5 +78,15 @@ exports.default = (0, framework_1.defineMiddlewares)([
77
78
  matcher: "/store/customers/me/coupons",
78
79
  middlewares: [(0, framework_1.validateAndTransformBody)(route_3.collectCouponSchema)],
79
80
  },
81
+ {
82
+ methods: ["GET"],
83
+ matcher: "/store/products",
84
+ middlewares: [add_flash_sale_highlights_1.addFlashSaleHighlights],
85
+ },
86
+ {
87
+ methods: ["GET"],
88
+ matcher: "/store/products/:id",
89
+ middlewares: [add_flash_sale_highlights_1.addFlashSaleHighlights],
90
+ },
80
91
  ]);
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbURBSTZCO0FBQzdCLHFEQUdtQztBQUNuQyxpREFHK0I7QUFDL0Isb0RBQTRCO0FBQzVCLDhEQUF5RTtBQUV6RSxNQUFNLE1BQU0sR0FBRyxJQUFBLGdCQUFNLEVBQUM7SUFDcEIsT0FBTyxFQUFFLGdCQUFNLENBQUMsYUFBYSxFQUFFO0NBQ2hDLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUEsNkJBQWlCLEVBQUM7SUFDL0I7UUFDRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDakIsT0FBTyxFQUFFLG9CQUFvQjtRQUM3QixXQUFXLEVBQUUsQ0FBQyxJQUFBLG9DQUF3QixFQUFDLGtDQUFpQyxDQUFDLENBQUM7S0FDM0U7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNoQixPQUFPLEVBQUUsd0JBQXdCO1FBQ2pDLFdBQVcsRUFBRSxDQUFDLElBQUEsb0NBQXdCLEVBQUMsa0NBQWlDLENBQUMsQ0FBQztLQUMzRTtJQUNEO1FBQ0UsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxvQkFBb0I7UUFDN0IsV0FBVyxFQUFFO1lBQ1gsSUFBQSxxQ0FBeUIsRUFBQywyQkFBMEIsRUFBRTtnQkFDcEQsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQztnQkFDN0IsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDO1NBQ0g7S0FDRjtJQUNEO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxnQkFBZ0I7UUFDekIsV0FBVyxFQUFFO1lBQ1gsSUFBQSxvQ0FBd0IsRUFBQyxrQ0FBaUMsQ0FBQztTQUM1RDtLQUNGO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDaEIsT0FBTyxFQUFFLG9CQUFvQjtRQUM3QixXQUFXLEVBQUU7WUFDWCxJQUFBLG9DQUF3QixFQUFDLGtDQUFpQyxDQUFDO1NBQzVEO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNoQixPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLFdBQVcsRUFBRTtZQUNYLElBQUEscUNBQXlCLEVBQUMsZ0NBQStCLEVBQUU7Z0JBQ3pELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUM7Z0JBQzdCLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztTQUNIO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNqQixPQUFPLEVBQUUsNEJBQTRCO1FBQ3JDLFdBQVcsRUFBRTtZQUNYLGFBQWE7WUFDYixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUN0QjtLQUNGO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDakIsT0FBTyxFQUFFLGdDQUFnQztRQUN6QyxXQUFXLEVBQUU7WUFDWCxhQUFhO1lBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDdEI7S0FDRjtJQUNEO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSw2QkFBNkI7UUFDdEMsV0FBVyxFQUFFLENBQUMsSUFBQSxvQ0FBd0IsRUFBQywyQkFBMEIsQ0FBQyxDQUFDO0tBQ3BFO0NBQ0YsQ0FBQyxDQUFDIn0=
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbURBSTZCO0FBQzdCLHFEQUdtQztBQUNuQyxvREFBNEI7QUFDNUIsaURBRytCO0FBQy9CLDhEQUF5RTtBQUN6RSx1RkFBaUY7QUFFakYsTUFBTSxNQUFNLEdBQUcsSUFBQSxnQkFBTSxFQUFDO0lBQ3BCLE9BQU8sRUFBRSxnQkFBTSxDQUFDLGFBQWEsRUFBRTtDQUNoQyxDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFBLDZCQUFpQixFQUFDO0lBQy9CO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxvQkFBb0I7UUFDN0IsV0FBVyxFQUFFLENBQUMsSUFBQSxvQ0FBd0IsRUFBQyxrQ0FBaUMsQ0FBQyxDQUFDO0tBQzNFO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDaEIsT0FBTyxFQUFFLHdCQUF3QjtRQUNqQyxXQUFXLEVBQUUsQ0FBQyxJQUFBLG9DQUF3QixFQUFDLGtDQUFpQyxDQUFDLENBQUM7S0FDM0U7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNoQixPQUFPLEVBQUUsb0JBQW9CO1FBQzdCLFdBQVcsRUFBRTtZQUNYLElBQUEscUNBQXlCLEVBQUMsMkJBQTBCLEVBQUU7Z0JBQ3BELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUM7Z0JBQzdCLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztTQUNIO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNqQixPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLFdBQVcsRUFBRTtZQUNYLElBQUEsb0NBQXdCLEVBQUMsa0NBQWlDLENBQUM7U0FDNUQ7S0FDRjtJQUNEO1FBQ0UsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxvQkFBb0I7UUFDN0IsV0FBVyxFQUFFO1lBQ1gsSUFBQSxvQ0FBd0IsRUFBQyxrQ0FBaUMsQ0FBQztTQUM1RDtLQUNGO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDaEIsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixXQUFXLEVBQUU7WUFDWCxJQUFBLHFDQUF5QixFQUFDLGdDQUErQixFQUFFO2dCQUN6RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDO2dCQUM3QixNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7U0FDSDtLQUNGO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDakIsT0FBTyxFQUFFLDRCQUE0QjtRQUNyQyxXQUFXLEVBQUU7WUFDWCxhQUFhO1lBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDdEI7S0FDRjtJQUNEO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxnQ0FBZ0M7UUFDekMsV0FBVyxFQUFFO1lBQ1gsYUFBYTtZQUNiLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ3RCO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNqQixPQUFPLEVBQUUsNkJBQTZCO1FBQ3RDLFdBQVcsRUFBRSxDQUFDLElBQUEsb0NBQXdCLEVBQUMsMkJBQTBCLENBQUMsQ0FBQztLQUNwRTtJQUNEO1FBQ0UsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsV0FBVyxFQUFFLENBQUMsa0RBQXNCLENBQUM7S0FDdEM7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNoQixPQUFPLEVBQUUscUJBQXFCO1FBQzlCLFdBQVcsRUFBRSxDQUFDLGtEQUFzQixDQUFDO0tBQ3RDO0NBQ0YsQ0FBQyxDQUFDIn0=
@@ -5,6 +5,16 @@ const framework_1 = require("@medusajs/framework");
5
5
  const utils_1 = require("@medusajs/framework/utils");
6
6
  const campaign_type_enum_1 = require("../../../../modules/custom-campaigns/types/campaign-type.enum");
7
7
  const custom_campaigns_1 = require("../../../../modules/custom-campaigns");
8
+ const USABLE_PROMO_MODULE = "usable_promotion";
9
+ const PROMOTION_CACHE_MODULE = "promotion_cache";
10
+ const resolveOptional = (token) => {
11
+ try {
12
+ return framework_1.container.resolve(token);
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ };
8
18
  const GET = async (req, res) => {
9
19
  const { id } = req.params;
10
20
  if (!id) {
@@ -173,6 +183,88 @@ const GET = async (req, res) => {
173
183
  : null,
174
184
  });
175
185
  }
186
+ else if (campaignType === campaign_type_enum_1.CampaignTypeEnum.Coupon) {
187
+ const usablePromoService = resolveOptional(USABLE_PROMO_MODULE);
188
+ const promotionCacheService = resolveOptional(PROMOTION_CACHE_MODULE);
189
+ const customerId = req?.auth_context?.actor_id;
190
+ const campaignPromotions = await promotionService.listPromotions({
191
+ campaign_id: campaign.id,
192
+ }, {
193
+ relations: ["application_method"],
194
+ });
195
+ const promotions = campaignPromotions.filter((promotion) => promotion.status === "active" && !promotion.is_automatic);
196
+ const usablePromotions = usablePromoService
197
+ ? await usablePromoService.listUsablePromotions({
198
+ promotion_id: promotions.map((promotion) => promotion.id),
199
+ })
200
+ : [];
201
+ const usableMap = new Map(usablePromotions.map((usable) => [usable.promotion_id, usable.enabled]));
202
+ const collectedMap = new Map();
203
+ if (customerId && promotionCacheService) {
204
+ await Promise.all(promotions.map(async (promotion) => {
205
+ try {
206
+ const cacheKey = `user:${customerId}:promotion:${promotion.id}`;
207
+ const collected = await promotionCacheService.exists(cacheKey);
208
+ collectedMap.set(promotion.id, collected);
209
+ }
210
+ catch (error) {
211
+ console.error(`[Campaign] Failed to resolve collected status for promotion ${promotion.id}:`, error);
212
+ }
213
+ }));
214
+ }
215
+ const coupons = promotions.map((promotion) => {
216
+ const isCollectable = usableMap.has(promotion.id)
217
+ ? usableMap.get(promotion.id)
218
+ : true;
219
+ const isCollected = collectedMap.get(promotion.id) ?? false;
220
+ return {
221
+ id: promotion.id,
222
+ code: promotion.code,
223
+ discount_type: promotion.application_method?.type,
224
+ discount_value: promotion.application_method?.value,
225
+ allocation: promotion.application_method?.allocation,
226
+ target_type: promotion.application_method?.target_type,
227
+ currency_code: promotion.application_method?.currency_code,
228
+ is_collectable: isCollectable,
229
+ is_collected: isCollected,
230
+ collect_endpoint: "/store/customers/me/coupons",
231
+ collect_payload: {
232
+ coupon_id: promotion.id,
233
+ },
234
+ };
235
+ });
236
+ const collectableCount = coupons.filter((coupon) => coupon.is_collectable && !coupon.is_collected).length;
237
+ const collectedCount = coupons.filter((coupon) => coupon.is_collected).length;
238
+ res.status(200).json({
239
+ id: campaign.id,
240
+ name: campaign.name,
241
+ description: campaign.description,
242
+ type: campaignType,
243
+ starts_at: campaign.starts_at,
244
+ ends_at: campaign.ends_at,
245
+ coupons,
246
+ summary: {
247
+ type: "coupon",
248
+ coupon_count: coupons.length,
249
+ collectable_count: collectableCount,
250
+ collected_count: collectedCount,
251
+ },
252
+ campaign_detail: campaignDetail
253
+ ? {
254
+ image_url: campaignDetail.image_url,
255
+ thumbnail_url: campaignDetail.thumbnail_url,
256
+ detail_content: campaignDetail.detail_content,
257
+ terms_and_conditions: campaignDetail.terms_and_conditions,
258
+ meta_title: campaignDetail.meta_title,
259
+ meta_description: campaignDetail.meta_description,
260
+ meta_keywords: campaignDetail.meta_keywords,
261
+ link_url: campaignDetail.link_url,
262
+ link_text: campaignDetail.link_text,
263
+ display_order: campaignDetail.display_order,
264
+ }
265
+ : null,
266
+ });
267
+ }
176
268
  else {
177
269
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Unknown campaign type");
178
270
  }
@@ -186,4 +278,4 @@ const GET = async (req, res) => {
186
278
  }
187
279
  };
188
280
  exports.GET = GET;
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2NhbXBhaWducy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUErRTtBQUMvRSxxREFJbUM7QUFDbkMsc0dBQWlHO0FBRWpHLDJFQUE4RTtBQUd2RSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQWtDLEVBQ2xDLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUUxQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5QkFBeUIsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLGNBQWMsR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUQsTUFBTSwyQkFBMkIsR0FDL0IscUJBQVMsQ0FBQyxPQUFPLENBQThCLHlDQUFzQixDQUFDLENBQUM7SUFFekUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUV2QiwrQ0FBK0M7UUFDL0MsTUFBTSxtQkFBbUIsR0FDdkIsTUFBTSwyQkFBMkIsQ0FBQyx1QkFBdUIsQ0FBQztZQUN4RCxXQUFXLEVBQUUsRUFBRTtTQUNoQixDQUFDLENBQUM7UUFFTCxJQUFJLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixvQkFBb0IsRUFB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
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2NhbXBhaWducy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUErRTtBQUMvRSxxREFJbUM7QUFDbkMsc0dBQWlHO0FBRWpHLDJFQUE4RTtBQW1COUUsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQztBQUMvQyxNQUFNLHNCQUFzQixHQUFHLGlCQUFpQixDQUFDO0FBRWpELE1BQU0sZUFBZSxHQUFHLENBQUksS0FBYSxFQUFZLEVBQUU7SUFDckQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxxQkFBUyxDQUFDLE9BQU8sQ0FBSSxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUssTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUFrQyxFQUNsQyxHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFFMUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1IsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIseUJBQXlCLENBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsTUFBTSxjQUFjLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELE1BQU0sMkJBQTJCLEdBQy9CLHFCQUFTLENBQUMsT0FBTyxDQUE4Qix5Q0FBc0IsQ0FBQyxDQUFDO0lBRXpFLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxH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