@lodashventure/medusa-campaign 1.4.0 → 1.4.2

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.
Files changed (46) hide show
  1. package/.medusa/server/src/admin/index.js +939 -504
  2. package/.medusa/server/src/admin/index.mjs +941 -506
  3. package/.medusa/server/src/api/admin/buy-x-get-y/[id]/route.js +2 -6
  4. package/.medusa/server/src/api/admin/coupons/[id]/route.js +76 -0
  5. package/.medusa/server/src/api/admin/coupons/route.js +88 -0
  6. package/.medusa/server/src/api/middlewares.js +32 -1
  7. package/.medusa/server/src/api/store/campaigns/route.js +78 -7
  8. package/.medusa/server/src/api/store/coupons/public/route.js +110 -0
  9. package/.medusa/server/src/api/store/customers/me/coupons/route.js +148 -0
  10. package/.medusa/server/src/modules/custom-campaigns/migrations/Migration20251024000000.js +2 -2
  11. package/.medusa/server/src/modules/custom-campaigns/migrations/Migration20251025000000.js +2 -2
  12. package/.medusa/server/src/modules/custom-campaigns/migrations/Migration20251101000000.js +16 -0
  13. package/.medusa/server/src/modules/custom-campaigns/types/campaign-type.enum.js +2 -1
  14. package/.medusa/server/src/workflows/custom-campaign/createCouponCampaignWorkflow.js +105 -0
  15. package/.medusa/server/src/workflows/custom-campaign/updateCouponCampaignWorkflow.js +59 -0
  16. package/.medusa/server/src/workflows/index.js +6 -2
  17. package/package.json +15 -30
  18. package/src/admin/components/BuyXGetYForm.tsx +24 -13
  19. package/src/admin/components/CouponForm.tsx +352 -0
  20. package/src/admin/components/CouponPage.tsx +104 -0
  21. package/src/admin/components/ProductSelector.tsx +22 -11
  22. package/src/admin/hooks/useCouponById.ts +36 -0
  23. package/src/admin/hooks/useCoupons.ts +46 -0
  24. package/src/admin/hooks/useFlashSaleById.ts +36 -10
  25. package/src/admin/hooks/useFlashSales.ts +36 -10
  26. package/src/admin/routes/coupons/[id]/page.tsx +147 -0
  27. package/src/admin/routes/coupons/create/page.tsx +49 -0
  28. package/src/admin/routes/coupons/page.tsx +15 -0
  29. package/src/admin/routes/flash-sales/[id]/page.tsx +2 -11
  30. package/src/admin/routes/flash-sales/create/page.tsx +0 -6
  31. package/src/admin/widgets/campaign-detail-widget.tsx +33 -26
  32. package/src/api/admin/buy-x-get-y/[id]/route.ts +11 -15
  33. package/src/api/admin/coupons/[id]/route.ts +98 -0
  34. package/src/api/admin/coupons/route.ts +109 -0
  35. package/src/api/middlewares.ts +34 -0
  36. package/src/api/store/campaigns/route.ts +107 -24
  37. package/src/api/store/coupons/public/route.ts +165 -0
  38. package/src/api/store/customers/me/coupons/route.ts +244 -0
  39. package/src/modules/custom-campaigns/migrations/Migration20251024000000.ts +1 -1
  40. package/src/modules/custom-campaigns/migrations/Migration20251025000000.ts +1 -1
  41. package/src/modules/custom-campaigns/migrations/Migration20251101000000.ts +21 -0
  42. package/src/modules/custom-campaigns/types/campaign-type.enum.ts +1 -0
  43. package/src/workflows/custom-campaign/createCouponCampaignWorkflow.ts +176 -0
  44. package/src/workflows/custom-campaign/updateCouponCampaignWorkflow.ts +105 -0
  45. package/src/workflows/index.ts +3 -1
  46. package/src/admin/widgets/campaign-stats-widget.tsx +0 -238
@@ -21,11 +21,7 @@ const GET = async (req, res) => {
21
21
  // Find the custom campaign type by campaign ID
22
22
  const { data: [customCampaignTypes], } = await query.graph({
23
23
  entity: "custom_campaign_type",
24
- fields: [
25
- "id",
26
- "campaign.*",
27
- "campaign.promotions.*",
28
- ],
24
+ fields: ["id", "campaign.*", "campaign.promotions.*"],
29
25
  filters: {
30
26
  type: campaign_type_enum_1.CampaignTypeEnum.BuyXGetY,
31
27
  campaign_id: id,
@@ -113,4 +109,4 @@ const PUT = async (req, res) => {
113
109
  }
114
110
  };
115
111
  exports.PUT = PUT;
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2J1eS14LWdldC15L1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQStFO0FBQy9FLHFEQUltQztBQUNuQyxzR0FBaUc7QUFFakcseUhBQXNIO0FBQ3RILDJFQUE4RTtBQUc5RTs7R0FFRztBQUNJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUUxQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5QkFBeUIsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLGNBQWMsR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUQsTUFBTSwyQkFBMkIsR0FDL0IscUJBQVMsQ0FBQyxPQUFPLENBQThCLHlDQUFzQixDQUFDLENBQUM7SUFFekUsSUFBSSxDQUFDO1FBQ0gsK0NBQStDO1FBQy9DLE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUM1QixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNwQixNQUFNLEVBQUUsc0JBQXNCO1lBQzlCLE1BQU0sRUFBRTtnQkFDTixJQUFJO2dCQUNKLFlBQVk7Z0JBQ1osdUJBQXVCO2FBQ3hCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxxQ0FBZ0IsQ0FBQyxRQUFRO2dCQUMvQixXQUFXLEVBQUUs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
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2J1eS14LWdldC15L1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQStFO0FBQy9FLHFEQUltQztBQUNuQyxzR0FBaUc7QUFFakcseUhBQXNIO0FBQ3RILDJFQUE4RTtBQUc5RTs7R0FFRztBQUNJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUUxQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5QkFBeUIsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLGNBQWMsR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUQsTUFBTSwyQkFBMkIsR0FDL0IscUJBQVMsQ0FBQyxPQUFPLENBQThCLHlDQUFzQixDQUFDLENBQUM7SUFFekUsSUFBSSxDQUFDO1FBQ0gsK0NBQStDO1FBQy9DLE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUM1QixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNwQixNQUFNLEVBQUUsc0JBQXNCO1lBQzlCLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsdUJBQXVCLENBQUM7WUFDckQsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxxQ0FBZ0IsQ0FBQyxRQUFRO2dCQUMvQixXQUFXLEVBQUUsRUFB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
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PUT = exports.GET = void 0;
7
+ const framework_1 = require("@medusajs/framework");
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ const zod_1 = __importDefault(require("zod"));
10
+ const route_1 = require("../route");
11
+ const updateCouponCampaignWorkflow_1 = require("../../../../workflows/custom-campaign/updateCouponCampaignWorkflow");
12
+ const custom_campaigns_1 = require("../../../../modules/custom-campaigns");
13
+ const campaign_type_enum_1 = require("../../../../modules/custom-campaigns/types/campaign-type.enum");
14
+ const updateCouponSchema = route_1.createCouponCampaignSchema.extend({
15
+ type: zod_1.default.literal(campaign_type_enum_1.CampaignTypeEnum.Coupon),
16
+ });
17
+ const GET = async (req, res) => {
18
+ const { id } = req.params;
19
+ const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
20
+ const customCampaignModuleService = framework_1.container.resolve(custom_campaigns_1.CUSTOM_CAMPAIGN_MODULE);
21
+ try {
22
+ const campaign = await promotionService.retrieveCampaign(id, {
23
+ relations: ["promotions", "promotions.application_method"],
24
+ });
25
+ if (!campaign) {
26
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Coupon campaign not found");
27
+ }
28
+ const [campaignType] = await customCampaignModuleService.listCustomCampaignTypes({
29
+ campaign_id: campaign.id,
30
+ });
31
+ if (campaignType?.type !== campaign_type_enum_1.CampaignTypeEnum.Coupon) {
32
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Campaign is not a coupon");
33
+ }
34
+ const [detail] = await customCampaignModuleService.listCampaignDetails({
35
+ campaign_id: campaign.id,
36
+ });
37
+ res.status(200).json({
38
+ campaign,
39
+ campaign_detail: detail ?? null,
40
+ });
41
+ }
42
+ catch (error) {
43
+ if (error instanceof utils_1.MedusaError) {
44
+ throw error;
45
+ }
46
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, error?.message ?? "Failed to retrieve coupon");
47
+ }
48
+ };
49
+ exports.GET = GET;
50
+ const PUT = async (req, res) => {
51
+ const { id } = req.params;
52
+ const body = req.body;
53
+ if (body.type !== campaign_type_enum_1.CampaignTypeEnum.Coupon) {
54
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Campaign type must be coupon");
55
+ }
56
+ await updateCouponCampaignWorkflow_1.updateCouponCampaignWorkflow.run({
57
+ input: {
58
+ id,
59
+ name: body.name,
60
+ description: body.description,
61
+ code: body.code,
62
+ starts_at: new Date(body.starts_at),
63
+ ends_at: new Date(body.ends_at),
64
+ discount_type: body.discount_type,
65
+ discount_value: body.discount_value,
66
+ currency_code: body.currency_code,
67
+ allocation: body.allocation,
68
+ target_type: body.target_type,
69
+ },
70
+ });
71
+ res.status(200).json({
72
+ message: "Coupon campaign updated",
73
+ });
74
+ };
75
+ exports.PUT = PUT;
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvdXBvbnMvW2lkXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBK0U7QUFDL0UscURBQWlFO0FBQ2pFLDhDQUFvQjtBQUNwQixvQ0FBc0Q7QUFDdEQscUhBQWtIO0FBQ2xILDJFQUE4RTtBQUU5RSxzR0FBaUc7QUFFakcsTUFBTSxrQkFBa0IsR0FBRyxrQ0FBMEIsQ0FBQyxNQUFNLENBQUM7SUFDM0QsSUFBSSxFQUFFLGFBQUMsQ0FBQyxPQUFPLENBQUMscUNBQWdCLENBQUMsTUFBTSxDQUFDO0NBQ3pDLENBQUMsQ0FBQztBQUVJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUUxQixNQUFNLGdCQUFnQixHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxNQUFNLDJCQUEyQixHQUMvQixxQkFBUyxDQUFDLE9BQU8sQ0FBOEIseUNBQXNCLENBQUMsQ0FBQztJQUV6RSxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRTtZQUMzRCxTQUFTLEVBQUUsQ0FBQyxZQUFZLEVBQUUsK0JBQStCLENBQUM7U0FDM0QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsMkJBQTJCLENBQzVCLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUNsQixNQUFNLDJCQUEyQixDQUFDLHVCQUF1QixDQUFDO1lBQ3hELFdBQVcsRUFBRSxRQUFRLENBQUMsRUFBRTtTQUN6QixDQUFDLENBQUM7UUFFTCxJQUFJLFlBQVksRUFBRSxJQUFJLEtBQUsscUNBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsMEJBQTBCLENBQzNCLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sMkJBQTJCLENBQUMsbUJBQW1CLENBQUM7WUFDckUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1NBQ3pCLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLFFBQVE7WUFDUixlQUFlLEVBQUUsTUFBTSxJQUFJLElBQUk7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxtQkFBVyxFQUFFLENBQUM7WUFDakMsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDN0IsS0FBZSxFQUFFLE9BQU8sSUFBSSwyQkFBMkIsQ0FDekQsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUM7QUFqRFcsUUFBQSxHQUFHLE9BaURkO0FBRUssTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUFzRCxFQUN0RCxHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDMUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUV0QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUsscUNBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsOEJBQThCLENBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSwyREFBNEIsQ0FBQyxHQUFHLENBQUM7UUFDckMsS0FBSyxFQUFFO1lBQ0wsRUFBRTtZQUNGLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUMvQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzlCO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkIsT0FBTyxFQUFFLHlCQUF5QjtLQUNuQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFqQ1csUUFBQSxHQUFHLE9BaUNkIn0=
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GET = exports.POST = exports.GetCouponCampaignsSchema = exports.createCouponCampaignSchema = void 0;
7
+ const framework_1 = require("@medusajs/framework");
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ const validators_1 = require("@medusajs/medusa/api/utils/validators");
10
+ const zod_1 = __importDefault(require("zod"));
11
+ const campaign_type_enum_1 = require("../../../modules/custom-campaigns/types/campaign-type.enum");
12
+ const createCouponCampaignWorkflow_1 = require("../../../workflows/custom-campaign/createCouponCampaignWorkflow");
13
+ const custom_campaigns_1 = require("../../../modules/custom-campaigns");
14
+ exports.createCouponCampaignSchema = zod_1.default
15
+ .object({
16
+ name: zod_1.default.string().min(1, "Name is required"),
17
+ description: zod_1.default.string().min(1, "Description is required"),
18
+ type: zod_1.default.literal(campaign_type_enum_1.CampaignTypeEnum.Coupon),
19
+ code: zod_1.default.string().min(1, "Coupon code is required"),
20
+ starts_at: zod_1.default.coerce.date(),
21
+ ends_at: zod_1.default.coerce.date(),
22
+ discount_type: zod_1.default.enum(["percentage", "fixed"]),
23
+ discount_value: zod_1.default.number().positive("Discount value must be positive"),
24
+ currency_code: zod_1.default.string().optional(),
25
+ allocation: zod_1.default.enum(["each", "total"]).optional(),
26
+ target_type: zod_1.default.enum(["order", "items"]).optional(),
27
+ })
28
+ .superRefine((data, ctx) => {
29
+ if (data.ends_at <= data.starts_at) {
30
+ ctx.addIssue({
31
+ code: zod_1.default.ZodIssueCode.custom,
32
+ message: "End date must be after start date",
33
+ path: ["ends_at"],
34
+ });
35
+ }
36
+ if (data.discount_type === "fixed" && !data.currency_code) {
37
+ ctx.addIssue({
38
+ code: zod_1.default.ZodIssueCode.custom,
39
+ message: "currency_code is required for fixed discount type",
40
+ path: ["currency_code"],
41
+ });
42
+ }
43
+ });
44
+ exports.GetCouponCampaignsSchema = (0, validators_1.createFindParams)({
45
+ order: "-created_at",
46
+ });
47
+ const POST = async (req, res) => {
48
+ const body = req.body;
49
+ if (body.type !== campaign_type_enum_1.CampaignTypeEnum.Coupon) {
50
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid campaign type for coupons");
51
+ }
52
+ const { result } = await createCouponCampaignWorkflow_1.createCouponCampaignWorkflow.run({
53
+ input: {
54
+ ...body,
55
+ },
56
+ });
57
+ res.status(200).json(result);
58
+ };
59
+ exports.POST = POST;
60
+ const GET = async (req, res) => {
61
+ const customCampaignModuleService = framework_1.container.resolve(custom_campaigns_1.CUSTOM_CAMPAIGN_MODULE);
62
+ const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
63
+ const customCampaignTypes = await customCampaignModuleService.listCustomCampaignTypes({
64
+ type: campaign_type_enum_1.CampaignTypeEnum.Coupon,
65
+ });
66
+ if (!customCampaignTypes.length) {
67
+ return res.status(200).json({
68
+ campaigns: [],
69
+ count: 0,
70
+ limit: 20,
71
+ offset: 0,
72
+ });
73
+ }
74
+ const campaignIds = customCampaignTypes.map((ct) => ct.campaign_id);
75
+ const campaigns = await promotionService.listCampaigns({
76
+ id: campaignIds,
77
+ }, {
78
+ relations: ["promotions", "promotions.application_method"],
79
+ });
80
+ res.status(200).json({
81
+ campaigns,
82
+ count: campaigns.length,
83
+ limit: campaigns.length,
84
+ offset: 0,
85
+ });
86
+ };
87
+ exports.GET = GET;
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvdXBvbnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQStFO0FBQy9FLHFEQUdtQztBQUNuQyxzRUFBeUU7QUFDekUsOENBQW9CO0FBQ3BCLG1HQUE4RjtBQUM5RixrSEFBK0c7QUFDL0csd0VBQTJFO0FBRzlELFFBQUEsMEJBQTBCLEdBQUcsYUFBQztLQUN4QyxNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUM7SUFDM0MsV0FBVyxFQUFFLGFBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDO0lBQ3pELElBQUksRUFBRSxhQUFDLENBQUMsT0FBTyxDQUFDLHFDQUFnQixDQUFDLE1BQU0sQ0FBQztJQUN4QyxJQUFJLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUseUJBQXlCLENBQUM7SUFDbEQsU0FBUyxFQUFFLGFBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO0lBQzFCLE9BQU8sRUFBRSxhQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtJQUN4QixhQUFhLEVBQUUsYUFBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxjQUFjLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQztJQUN0RSxhQUFhLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxVQUFVLEVBQUUsYUFBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFB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
@@ -5,7 +5,9 @@ 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");
8
9
  const multer_1 = __importDefault(require("multer"));
10
+ const route_3 = require("./store/customers/me/coupons/route");
9
11
  const upload = (0, multer_1.default)({
10
12
  storage: multer_1.default.memoryStorage(),
11
13
  });
@@ -30,6 +32,30 @@ exports.default = (0, framework_1.defineMiddlewares)([
30
32
  }),
31
33
  ],
32
34
  },
35
+ {
36
+ methods: ["POST"],
37
+ matcher: "/admin/coupons",
38
+ middlewares: [
39
+ (0, framework_1.validateAndTransformBody)(route_2.createCouponCampaignSchema),
40
+ ],
41
+ },
42
+ {
43
+ methods: ["PUT"],
44
+ matcher: "/admin/coupons/:id",
45
+ middlewares: [
46
+ (0, framework_1.validateAndTransformBody)(route_2.createCouponCampaignSchema),
47
+ ],
48
+ },
49
+ {
50
+ methods: ["GET"],
51
+ matcher: "/admin/coupons",
52
+ middlewares: [
53
+ (0, framework_1.validateAndTransformQuery)(route_2.GetCouponCampaignsSchema, {
54
+ defaults: ["*", "campaign.*"],
55
+ isList: true,
56
+ }),
57
+ ],
58
+ },
33
59
  {
34
60
  methods: ["POST"],
35
61
  matcher: "/admin/campaigns/:id/image",
@@ -46,5 +72,10 @@ exports.default = (0, framework_1.defineMiddlewares)([
46
72
  upload.single("file"),
47
73
  ],
48
74
  },
75
+ {
76
+ methods: ["POST"],
77
+ matcher: "/store/customers/me/coupons",
78
+ middlewares: [(0, framework_1.validateAndTransformBody)(route_3.collectCouponSchema)],
79
+ },
49
80
  ]);
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbURBSTZCO0FBQzdCLHFEQUdtQztBQUNuQyxvREFBNEI7QUFFNUIsTUFBTSxNQUFNLEdBQUcsSUFBQSxnQkFBTSxFQUFDO0lBQ3BCLE9BQU8sRUFBRSxnQkFBTSxDQUFDLGFBQWEsRUFBRTtDQUNoQyxDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFBLDZCQUFpQixFQUFDO0lBQy9CO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxvQkFBb0I7UUFDN0IsV0FBVyxFQUFFLENBQUMsSUFBQSxvQ0FBd0IsRUFBQyxrQ0FBaUMsQ0FBQyxDQUFDO0tBQzNFO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDaEIsT0FBTyxFQUFFLHdCQUF3QjtRQUNqQyxXQUFXLEVBQUUsQ0FBQyxJQUFBLG9DQUF3QixFQUFDLGtDQUFpQyxDQUFDLENBQUM7S0FDM0U7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNoQixPQUFPLEVBQUUsb0JBQW9CO1FBQzdCLFdBQVcsRUFBRTtZQUNYLElBQUEscUNBQXlCLEVBQUMsMkJBQTBCLEVBQUU7Z0JBQ3BELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUM7Z0JBQzdCLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztTQUNIO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNqQixPQUFPLEVBQUUsNEJBQTRCO1FBQ3JDLFdBQVcsRUFBRTtZQUNYLGFBQWE7WUFDYixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUN0QjtLQUNGO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDakIsT0FBTyxFQUFFLGdDQUFnQztRQUN6QyxXQUFXLEVBQUU7WUFDWCxhQUFhO1lBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDdEI7S0FDRjtDQUNGLENBQUMsQ0FBQyJ9
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbURBSTZCO0FBQzdCLHFEQUdtQztBQUNuQyxpREFHK0I7QUFDL0Isb0RBQTRCO0FBQzVCLDhEQUF5RTtBQUV6RSxNQUFNLE1BQU0sR0FBRyxJQUFBLGdCQUFNLEVBQUM7SUFDcEIsT0FBTyxFQUFFLGdCQUFNLENBQUMsYUFBYSxFQUFFO0NBQ2hDLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUEsNkJBQWlCLEVBQUM7SUFDL0I7UUFDRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDakIsT0FBTyxFQUFFLG9CQUFvQjtRQUM3QixXQUFXLEVBQUUsQ0FBQyxJQUFBLG9DQUF3QixFQUFDLGtDQUFpQyxDQUFDLENBQUM7S0FDM0U7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNoQixPQUFPLEVBQUUsd0JBQXdCO1FBQ2pDLFdBQVcsRUFBRSxDQUFDLElBQUEsb0NBQXdCLEVBQUMsa0NBQWlDLENBQUMsQ0FBQztLQUMzRTtJQUNEO1FBQ0UsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxvQkFBb0I7UUFDN0IsV0FBVyxFQUFFO1lBQ1gsSUFBQSxxQ0FBeUIsRUFBQywyQkFBMEIsRUFBRTtnQkFDcEQsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQztnQkFDN0IsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDO1NBQ0g7S0FDRjtJQUNEO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxnQkFBZ0I7UUFDekIsV0FBVyxFQUFFO1lBQ1gsSUFBQSxvQ0FBd0IsRUFBQyxrQ0FBaUMsQ0FBQztTQUM1RDtLQUNGO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDaEIsT0FBTyxFQUFFLG9CQUFvQjtRQUM3QixXQUFXLEVBQUU7WUFDWCxJQUFBLG9DQUF3QixFQUFDLGtDQUFpQyxDQUFDO1NBQzVEO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNoQixPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLFdBQVcsRUFBRTtZQUNYLElBQUEscUNBQXlCLEVBQUMsZ0NBQStCLEVBQUU7Z0JBQ3pELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUM7Z0JBQzdCLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztTQUNIO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNqQixPQUFPLEVBQUUsNEJBQTRCO1FBQ3JDLFdBQVcsRUFBRTtZQUNYLGFBQWE7WUFDYixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUN0QjtLQUNGO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDakIsT0FBTyxFQUFFLGdDQUFnQztRQUN6QyxXQUFXLEVBQUU7WUFDWCxhQUFhO1lBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDdEI7S0FDRjtJQUNEO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSw2QkFBNkI7UUFDdEMsV0FBVyxFQUFFLENBQUMsSUFBQSxvQ0FBd0IsRUFBQywyQkFBMEIsQ0FBQyxDQUFDO0tBQ3BFO0NBQ0YsQ0FBQyxDQUFDIn0=
@@ -11,6 +11,7 @@ const custom_campaigns_1 = require("../../../modules/custom-campaigns");
11
11
  const GET = async (req, res) => {
12
12
  const customCampaignModuleService = framework_1.container.resolve(custom_campaigns_1.CUSTOM_CAMPAIGN_MODULE);
13
13
  const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
14
+ const productService = framework_1.container.resolve(utils_1.Modules.PRODUCT);
14
15
  const now = new Date();
15
16
  try {
16
17
  // Get the campaign type filter from query params (optional)
@@ -53,9 +54,23 @@ const GET = async (req, res) => {
53
54
  // Fetch ALL campaigns first for debugging
54
55
  const allCampaigns = await promotionService.listCampaigns({});
55
56
  console.log(`Total campaigns in system: ${allCampaigns.length}`);
56
- // Then fetch specific campaigns
57
+ // Then fetch specific campaigns with relations
57
58
  const campaigns = campaignIds.length > 0
58
- ? allCampaigns.filter((c) => campaignIds.includes(c.id))
59
+ ? await Promise.all(campaignIds.map(async (campaignId) => {
60
+ try {
61
+ return await promotionService.retrieveCampaign(campaignId, {
62
+ relations: [
63
+ "promotions",
64
+ "promotions.application_method",
65
+ "promotions.application_method.target_rules",
66
+ ],
67
+ });
68
+ }
69
+ catch (error) {
70
+ console.error(`Error fetching campaign ${campaignId}:`, error);
71
+ return null;
72
+ }
73
+ })).then((results) => results.filter((c) => c !== null))
59
74
  : [];
60
75
  console.log(`Found ${campaigns.length} matching campaigns`);
61
76
  campaigns.forEach((c) => {
@@ -66,7 +81,7 @@ const GET = async (req, res) => {
66
81
  // Create a map of campaign_id to campaign_type
67
82
  const campaignTypeMap = new Map(customCampaignTypes.map((ct) => [ct.campaign_id, ct.type]));
68
83
  // Process ALL campaigns first (without date filter) for debugging
69
- const allProcessedCampaigns = campaigns.map((campaign) => {
84
+ const allProcessedCampaigns = await Promise.all(campaigns.map(async (campaign) => {
70
85
  const startsAt = new Date(campaign.starts_at);
71
86
  const endsAt = new Date(campaign.ends_at);
72
87
  const isActive = startsAt <= now && endsAt >= now;
@@ -74,6 +89,61 @@ const GET = async (req, res) => {
74
89
  console.log(` Start: ${startsAt.toISOString()} (${startsAt <= now ? 'started' : 'not started'})`);
75
90
  console.log(` End: ${endsAt.toISOString()} (${endsAt >= now ? 'not ended' : 'ended'})`);
76
91
  console.log(` Active: ${isActive}`);
92
+ const campaignType = campaignTypeMap.get(campaign.id);
93
+ // Fetch products for flash-sale campaigns
94
+ let products = [];
95
+ if (campaignType === campaign_type_enum_1.CampaignTypeEnum.FlashSale) {
96
+ try {
97
+ // Fetch promotion usage limits for this campaign
98
+ const promotionUsageLimits = await customCampaignModuleService.listPromotionUsageLimits({
99
+ campaign_id: campaign.id,
100
+ });
101
+ // Create a map of promotion usage limits by promotion ID
102
+ const promotionLimitsMap = new Map();
103
+ promotionUsageLimits.forEach((limit) => {
104
+ promotionLimitsMap.set(limit.promotion_id, limit);
105
+ });
106
+ // Process promotions to extract product information
107
+ for (const promotion of campaign.promotions ?? []) {
108
+ if (!promotion.application_method?.target_rules?.length) {
109
+ continue;
110
+ }
111
+ const promotionLimit = promotionLimitsMap.get(promotion.id);
112
+ if (!promotionLimit?.product_id) {
113
+ continue;
114
+ }
115
+ try {
116
+ const product = await productService.retrieveProduct(promotionLimit.product_id, {
117
+ select: ["id", "title", "thumbnail", "handle", "description"],
118
+ relations: ["images"],
119
+ });
120
+ if (promotion.application_method.value !== undefined) {
121
+ products.push({
122
+ product: {
123
+ id: product.id,
124
+ title: product.title,
125
+ thumbnail: product.thumbnail,
126
+ handle: product.handle,
127
+ description: product.description,
128
+ images: product.images,
129
+ },
130
+ discountType: promotion.application_method?.type,
131
+ discountValue: promotion.application_method?.value,
132
+ maxQty: promotion.application_method?.max_quantity ?? 0,
133
+ limit: promotionLimit?.limit ?? 0,
134
+ used: promotionLimit?.used ?? 0,
135
+ });
136
+ }
137
+ }
138
+ catch (error) {
139
+ console.error(`Error fetching product ${promotionLimit.product_id}:`, error);
140
+ }
141
+ }
142
+ }
143
+ catch (error) {
144
+ console.error(`Error fetching products for campaign ${campaign.id}:`, error);
145
+ }
146
+ }
77
147
  return {
78
148
  id: campaign.id,
79
149
  name: campaign.name,
@@ -81,10 +151,11 @@ const GET = async (req, res) => {
81
151
  campaign_identifier: campaign.campaign_identifier,
82
152
  starts_at: campaign.starts_at,
83
153
  ends_at: campaign.ends_at,
84
- campaign_type: campaignTypeMap.get(campaign.id),
85
- is_active: isActive
154
+ campaign_type: campaignType,
155
+ is_active: isActive,
156
+ ...(products.length > 0 && { products }),
86
157
  };
87
- });
158
+ }));
88
159
  // Filter for active campaigns
89
160
  const activeCampaigns = allProcessedCampaigns.filter(c => c.is_active);
90
161
  console.log(`Returning ${activeCampaigns.length} active campaigns out of ${allProcessedCampaigns.length} total`);
@@ -125,4 +196,4 @@ const GET = async (req, res) => {
125
196
  }
126
197
  };
127
198
  exports.GET = GET;
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2NhbXBhaWducy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBK0U7QUFDL0UscURBQStFO0FBQy9FLG1HQUE4RjtBQUM5Rix3RUFBMkU7QUFHM0U7O0dBRUc7QUFDSSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSwyQkFBMkIsR0FDL0IscUJBQVMsQ0FBQyxPQUFPLENBQThCLHlDQUFzQixDQUFDLENBQUM7SUFDekUsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUV2QixJQUFJLENBQUM7UUFDSCw0REFBNEQ7UUFDNUQsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFvQyxDQUFDO1FBRXJFLE1BQU0sT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUN4QixJQUFJLFlBQVksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLHFDQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDM0UsT0FBTyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7UUFDOUIsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXBELCtEQUErRDtRQUMvRCxNQUFNLHNCQUFzQixHQUMxQixNQUFNLDJCQUEyQixDQUFDLHVCQUF1QixD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
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2NhbXBhaWducy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBK0U7QUFDL0UscURBQW9EO0FBQ3BELG1HQUE4RjtBQUM5Rix3RUFBMkU7QUFHM0U7O0dBRUc7QUFDSSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSwyQkFBMkIsR0FDL0IscUJBQVMsQ0FBQyxPQUFPLENBQThCLHlDQUFzQixDQUFDLENBQUM7SUFDekUsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUQsTUFBTSxjQUFjLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFFdkIsSUFBSSxDQUFDO1FBQ0gsNERBQTREO1FBQzVELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBb0MsQ0FBQztRQUVyRSxNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDeEIsSUFBSSxZQUFZLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQ0FBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzNFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1FBQzlCLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxZQUFZLENBQUMs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
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const framework_1 = require("@medusajs/framework");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const campaign_type_enum_1 = require("../../../../modules/custom-campaigns/types/campaign-type.enum");
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
+ };
18
+ const GET = async (req, res) => {
19
+ const customCampaignModuleService = framework_1.container.resolve(custom_campaigns_1.CUSTOM_CAMPAIGN_MODULE);
20
+ const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
21
+ const usablePromoService = resolveOptional(USABLE_PROMO_MODULE);
22
+ const promotionCacheService = resolveOptional(PROMOTION_CACHE_MODULE);
23
+ const now = new Date();
24
+ const customerId = req?.auth_context?.actor_id;
25
+ const parsedLimit = req.query?.limit ? Number(req.query.limit) : 20;
26
+ const parsedOffset = req.query?.offset ? Number(req.query.offset) : 0;
27
+ const limit = Number.isNaN(parsedLimit) ? 20 : parsedLimit;
28
+ const offset = Number.isNaN(parsedOffset) ? 0 : parsedOffset;
29
+ const couponCampaignTypes = await customCampaignModuleService.listCustomCampaignTypes({
30
+ type: campaign_type_enum_1.CampaignTypeEnum.Coupon,
31
+ });
32
+ if (!couponCampaignTypes.length) {
33
+ return res.status(200).json({
34
+ coupons: [],
35
+ count: 0,
36
+ limit,
37
+ offset,
38
+ });
39
+ }
40
+ const campaignIds = couponCampaignTypes.map((ct) => ct.campaign_id);
41
+ const promotions = await promotionService.listPromotions({
42
+ campaign_id: { $in: campaignIds },
43
+ }, {
44
+ relations: ["campaign", "application_method"],
45
+ });
46
+ const campaignDetails = await customCampaignModuleService.listCampaignDetails({
47
+ campaign_id: campaignIds,
48
+ });
49
+ const detailMap = new Map(campaignDetails.map((detail) => [detail.campaign_id, detail]));
50
+ const usablePromotions = usablePromoService
51
+ ? await usablePromoService.listUsablePromotions({
52
+ promotion_id: promotions.map((promo) => promo.id),
53
+ })
54
+ : [];
55
+ const usableMap = new Map(usablePromotions.map((usable) => [usable.promotion_id, usable.enabled]));
56
+ const filteredPromotions = promotions.filter((promotion) => {
57
+ const campaign = promotion.campaign;
58
+ if (!campaign) {
59
+ return false;
60
+ }
61
+ const startsAt = campaign.starts_at ? new Date(campaign.starts_at) : null;
62
+ const endsAt = campaign.ends_at ? new Date(campaign.ends_at) : null;
63
+ const withinWindow = (!startsAt || startsAt <= now) && (!endsAt || endsAt >= now);
64
+ const isCollectable = usableMap.has(promotion.id)
65
+ ? usableMap.get(promotion.id)
66
+ : true;
67
+ return (campaign &&
68
+ withinWindow &&
69
+ promotion.status === "active" &&
70
+ !promotion.is_automatic &&
71
+ isCollectable);
72
+ });
73
+ const paginated = filteredPromotions.slice(offset, offset + limit);
74
+ const coupons = await Promise.all(paginated.map(async (promotion) => {
75
+ const campaign = promotion.campaign;
76
+ const detail = detailMap.get(campaign.id);
77
+ let isCollected = false;
78
+ if (customerId && promotionCacheService) {
79
+ const key = `user:${customerId}:promotion:${promotion.id}`;
80
+ isCollected = await promotionCacheService.exists(key);
81
+ }
82
+ return {
83
+ id: promotion.id,
84
+ code: promotion.code,
85
+ name: campaign.name,
86
+ description: campaign.description,
87
+ starts_at: campaign.starts_at,
88
+ ends_at: campaign.ends_at,
89
+ discount_type: promotion.application_method?.type,
90
+ discount_value: promotion.application_method?.value,
91
+ allocation: promotion.application_method?.allocation,
92
+ target_type: promotion.application_method?.target_type,
93
+ currency_code: promotion.application_method?.currency_code,
94
+ campaign_id: campaign.id,
95
+ is_collectable: usableMap.has(promotion.id)
96
+ ? usableMap.get(promotion.id)
97
+ : true,
98
+ is_collected: isCollected,
99
+ detail: detail ?? null,
100
+ };
101
+ }));
102
+ res.status(200).json({
103
+ coupons,
104
+ count: filteredPromotions.length,
105
+ limit,
106
+ offset,
107
+ });
108
+ };
109
+ exports.GET = GET;
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2NvdXBvbnMvcHVibGljL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUErRTtBQUMvRSxxREFBb0Q7QUFDcEQsc0dBQWlHO0FBQ2pHLDJFQUE4RTtBQWlCOUUsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQztBQUMvQyxNQUFNLHNCQUFzQixHQUFHLGlCQUFpQixDQUFDO0FBRWpELE1BQU0sZUFBZSxHQUFHLENBQUksS0FBYSxFQUFZLEVBQUU7SUFDckQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxxQkFBUyxDQUFDLE9BQU8sQ0FBSSxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUssTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sMkJBQTJCLEdBQy9CLHFCQUFTLENBQUMsT0FBTyxDQUE4Qix5Q0FBc0IsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sZ0JBQWdCLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTlELE1BQU0sa0JBQWtCLEdBQ3RCLGVBQWUsQ0FBMkIsbUJBQW1CLENBQUMsQ0FBQztJQUNqRSxNQUFNLHFCQUFxQixHQUFHLGVBQWUsQ0FDM0Msc0JBQXNCLENBQ3ZCLENBQUM7SUFFRixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sVUFBVSxHQUNkLEdBQ0QsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDO0lBRTFCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FB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