@lodashventure/medusa-campaign 0.0.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.
Files changed (23) hide show
  1. package/.medusa/server/src/admin/index.js +5456 -0
  2. package/.medusa/server/src/admin/index.mjs +5454 -0
  3. package/.medusa/server/src/api/admin/flash-sales/[id]/route.js +119 -0
  4. package/.medusa/server/src/api/admin/flash-sales/route.js +71 -0
  5. package/.medusa/server/src/api/middlewares.js +27 -0
  6. package/.medusa/server/src/api/store/campaigns/[id]/route.js +99 -0
  7. package/.medusa/server/src/api/store/campaigns/route.js +35 -0
  8. package/.medusa/server/src/links/campaign-type.js +13 -0
  9. package/.medusa/server/src/modules/custom-campaigns/index.js +13 -0
  10. package/.medusa/server/src/modules/custom-campaigns/migrations/Migration20250524150901.js +22 -0
  11. package/.medusa/server/src/modules/custom-campaigns/migrations/Migration20250526010310.js +19 -0
  12. package/.medusa/server/src/modules/custom-campaigns/migrations/Migration20250529011904.js +14 -0
  13. package/.medusa/server/src/modules/custom-campaigns/models/custom-campaign-type.js +11 -0
  14. package/.medusa/server/src/modules/custom-campaigns/models/promotion-usage-limit.js +15 -0
  15. package/.medusa/server/src/modules/custom-campaigns/service.js +15 -0
  16. package/.medusa/server/src/modules/custom-campaigns/types/campaign-type.enum.js +8 -0
  17. package/.medusa/server/src/subscribers/order-placed.js +17 -0
  18. package/.medusa/server/src/workflows/custom-campaign/createCustomCampaignWorkflow.js +121 -0
  19. package/.medusa/server/src/workflows/custom-campaign/updateCustomFlashSaleWorkflow.js +115 -0
  20. package/.medusa/server/src/workflows/custom-campaign/updatePromotionUsageWorkflow.js +38 -0
  21. package/.medusa/server/src/workflows/hooks/deletePromotionOnCampaignDelete.js +25 -0
  22. package/README.md +28 -0
  23. package/package.json +81 -0
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PUT = 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 updateCustomFlashSaleWorkflow_1 = require("../../../../workflows/custom-campaign/updateCustomFlashSaleWorkflow");
8
+ /**
9
+ * GET handler for fetching a specific flash sale by ID
10
+ */
11
+ const GET = async (req, res) => {
12
+ const { id } = req.params;
13
+ if (!id) {
14
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Campaign ID is required");
15
+ }
16
+ const query = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
17
+ const productService = framework_1.container.resolve(utils_1.Modules.PRODUCT);
18
+ try {
19
+ // First, find the custom campaign type by campaign ID
20
+ const { data: [customCampaignTypes], } = await query.graph({
21
+ entity: "custom_campaign_type",
22
+ fields: [
23
+ "id",
24
+ "campaign.*",
25
+ "campaign.promotions.*",
26
+ "campaign.promotions.application_method.*",
27
+ "campaign.promotions.application_method.target_rules.*",
28
+ ],
29
+ filters: {
30
+ type: campaign_type_enum_1.CampaignTypeEnum.FlashSale,
31
+ campaign_id: id,
32
+ },
33
+ });
34
+ const campaign = customCampaignTypes.campaign;
35
+ if (!campaign) {
36
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Flash sale with ID ${id} not found`);
37
+ }
38
+ // Fetch promotion usage limits for the campaign
39
+ const { data: promotionUsageLimits } = await query.graph({
40
+ entity: "promotion_usage_limit",
41
+ fields: ["id", "promotion_id", "product_id", "limit", "used"],
42
+ filters: {
43
+ campaign_id: id,
44
+ },
45
+ });
46
+ // Create a map of promotion usage limits by promotion ID
47
+ const promotionLimitsMap = new Map();
48
+ promotionUsageLimits.forEach((limit) => {
49
+ promotionLimitsMap.set(limit.promotion_id, limit);
50
+ });
51
+ // Process promotions to extract product information
52
+ const products = [];
53
+ for await (const promotion of campaign.promotions ?? []) {
54
+ if (!promotion.application_method?.target_rules?.length) {
55
+ continue;
56
+ }
57
+ const productRule = promotion.application_method.target_rules.find((rule) => rule.attribute === "items.product.id" && rule.operator === "eq");
58
+ const promotionLimit = promotionLimitsMap.get(promotion.id);
59
+ const product = await productService.retrieveProduct(promotionLimit?.product_id);
60
+ if (productRule && promotion.application_method.value) {
61
+ products.push({
62
+ product: {
63
+ id: product.id,
64
+ title: product.title,
65
+ },
66
+ discountType: promotion.application_method?.type,
67
+ discountValue: promotion.application_method?.value,
68
+ maxQty: promotion.application_method?.max_quantity,
69
+ limit: promotionLimitsMap.get(promotion.id)?.limit,
70
+ });
71
+ }
72
+ }
73
+ res.status(200).json({
74
+ ...campaign,
75
+ products,
76
+ });
77
+ }
78
+ catch (error) {
79
+ if (error instanceof utils_1.MedusaError) {
80
+ throw error;
81
+ }
82
+ console.error("Error fetching flash sale:", error);
83
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "An error occurred while fetching the flash sale");
84
+ }
85
+ };
86
+ exports.GET = GET;
87
+ /**
88
+ * PUT handler for updating a specific flash sale by ID
89
+ */
90
+ const PUT = async (req, res) => {
91
+ const { id } = req.params;
92
+ const body = req.body;
93
+ if (!id) {
94
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Campaign ID is required");
95
+ }
96
+ try {
97
+ // Check if start date is before end date
98
+ if (new Date(body.ends_at) < new Date(body.starts_at)) {
99
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "End date must be after start date");
100
+ }
101
+ // Update the flash sale
102
+ const result = await updateCustomFlashSaleWorkflow_1.updateCustomFlashSaleWorkflow.run({
103
+ input: {
104
+ ...body,
105
+ id,
106
+ },
107
+ });
108
+ res.status(200).json(result.result);
109
+ }
110
+ catch (error) {
111
+ if (error instanceof utils_1.MedusaError) {
112
+ throw error;
113
+ }
114
+ console.error("Error updating flash sale:", error);
115
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "An error occurred while updating the flash sale");
116
+ }
117
+ };
118
+ exports.PUT = PUT;
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ZsYXNoLXNhbGVzL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQStFO0FBQy9FLHFEQUltQztBQUNuQyxzR0FBaUc7QUFFakcsdUhBQW9IO0FBRXBIOztHQUVHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBRTFCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNSLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHlCQUF5QixDQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sY0FBYyxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUxRCxJQUFJLENBQUM7UUFDSCxzREFBc0Q7UUFDdEQsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLEdBQzVCLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxzQkFBc0I7WUFDOUIsTUFBTSxFQUFFO2dCQUNOLElBQUk7Z0JBQ0osWUFBWTtnQkFDWix1QkFBdUI7Z0JBQ3ZCLDBDQUEwQztnQkFDMUMsdURBQXVEO2FBQ3hEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxxQ0FBZ0IsQ0FBQyxTQUFTO2dCQUNoQyxXQUFXLEVBQUUsRUFBRTthQUNoQjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztRQUU5QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixzQkFBc0IsRUFBRSxZQUFZLENBQ3JDLENBQUM7UUFDSixDQUFDO1FBRUQsZ0RBQWdEO1FBQ2hELE1BQU0sRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDdkQsTUFBTSxFQUFFLHVCQUF1QjtZQUMvQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQzdELE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUUsRUFBRTthQUNoQjtTQUNGLENBQUMsQ0FBQztRQUVILHlEQUF5RDtRQUN6RCxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDckMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxvREFBb0Q7UUFDcEQsTUFBTSxRQUFRLEdBQStCLEVBQUUsQ0FBQztRQUNoRCxJQUFJLEtBQUssRUFBRSxNQUFNLFNBQVMsSUFBSSxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUN4RCxTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNoRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsSUFBSSxDQUFDLFNBQVMsS0FBSyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FDbEUsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFNUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsZUFBZSxDQUNsRCxjQUFjLEVBQUUsVUFBVSxDQUMzQixDQUFDO1lBRUYsSUFBSSxXQUFXLElBQUksU0FBUyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN0RCxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNaLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7d0JBQ2QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO3FCQUNyQjtvQkFDRCxZQUFZLEVBQUUsU0FBUyxDQUFDLGtCQUFrQixFQUFFLElBQUk7b0JBQ2hELGFBQWEsRUFBRSxTQUFTLENBQUMsa0JBQWtCLEVBQUUsS0FBSztvQkFDbEQsTUFBTSxFQUFFLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxZQUFZO29CQUNsRCxLQUFLLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLO2lCQUNuRCxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLEdBQUcsUUFBUTtZQUNYLFFBQVE7U0FDZ0IsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksbUJBQVcsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxpREFBaUQsQ0FDbEQsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUM7QUF0R1csUUFBQSxHQUFHLE9Bc0dkO0FBRUY7O0dBRUc7QUFDSSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQWtDLEVBQ2xDLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUMxQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBRXRCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNSLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHlCQUF5QixDQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQztRQUNILHlDQUF5QztRQUN6QyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixtQ0FBbUMsQ0FDcEMsQ0FBQztRQUNKLENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsTUFBTSxNQUFNLEdBQUcsTUFBTSw2REFBNkIsQ0FBQyxHQUFHLENBQUM7WUFDckQsS0FBSyxFQUFFO2dCQUNMLEdBQUcsSUFBSTtnQkFDUCxFQUFFO2FBQ0g7U0FDRixDQUFDLENBQUM7UUFFSCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxtQkFBVyxFQUFFLENBQUM7WUFDakMsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLGlEQUFpRCxDQUNsRCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQztBQTNDVyxRQUFBLEdBQUcsT0EyQ2QifQ==
@@ -0,0 +1,71 @@
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.GetFlashSalesSchema = exports.createCustomCampaignSchema = 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 createCustomCampaignWorkflow_1 = require("../../../workflows/custom-campaign/createCustomCampaignWorkflow");
13
+ exports.createCustomCampaignSchema = zod_1.default.object({
14
+ name: zod_1.default.string().min(1, "Name is required"),
15
+ description: zod_1.default.string().min(1, "Description is required"),
16
+ type: zod_1.default.nativeEnum(campaign_type_enum_1.CampaignTypeEnum),
17
+ starts_at: zod_1.default.coerce.date(),
18
+ ends_at: zod_1.default.coerce.date(),
19
+ products: zod_1.default
20
+ .array(zod_1.default.object({
21
+ product: zod_1.default.object({
22
+ id: zod_1.default.string(),
23
+ title: zod_1.default.string(),
24
+ }),
25
+ discountType: zod_1.default.enum([
26
+ "percentage",
27
+ // need to handle fixed discount and currency
28
+ // "fixed",
29
+ ]),
30
+ discountValue: zod_1.default.number().min(1),
31
+ limit: zod_1.default.number().min(1),
32
+ maxQty: zod_1.default.number().min(1),
33
+ }))
34
+ .min(1, "At least one product is required"),
35
+ });
36
+ exports.GetFlashSalesSchema = (0, validators_1.createFindParams)({
37
+ order: "-created_at",
38
+ });
39
+ const POST = async (req, res) => {
40
+ const body = req.body;
41
+ if (new Date(body.ends_at) < new Date(body.starts_at)) {
42
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "End date must be after start date");
43
+ }
44
+ const customCampaign = await createCustomCampaignWorkflow_1.createCustomCampaignWorkflow.run({
45
+ input: body,
46
+ });
47
+ res.status(200).json(customCampaign);
48
+ };
49
+ exports.POST = POST;
50
+ const GET = async (req, res) => {
51
+ const query = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
52
+ const { data: customCampaigns, metadata: { count, take, skip } = {
53
+ count: 0,
54
+ take: 20,
55
+ skip: 0,
56
+ }, } = await query.graph({
57
+ entity: "custom_campaign_type",
58
+ ...req.queryConfig,
59
+ fields: ["id", "campaign.*", "campaign.promotions.*"],
60
+ filters: { type: campaign_type_enum_1.CampaignTypeEnum.FlashSale },
61
+ });
62
+ const campaigns = customCampaigns.map((campaign) => campaign.campaign);
63
+ res.status(200).json({
64
+ campaigns,
65
+ count,
66
+ limit: take,
67
+ offset: skip,
68
+ });
69
+ };
70
+ exports.GET = GET;
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ZsYXNoLXNhbGVzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUErRTtBQUMvRSxxREFHbUM7QUFDbkMsc0VBQXlFO0FBQ3pFLDhDQUFvQjtBQUNwQixtR0FBOEY7QUFDOUYsa0hBQStHO0FBRWxHLFFBQUEsMEJBQTBCLEdBQUcsYUFBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxJQUFJLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUM7SUFDM0MsV0FBVyxFQUFFLGFBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDO0lBQ3pELElBQUksRUFBRSxhQUFDLENBQUMsVUFBVSxDQUFDLHFDQUFnQixDQUFDO0lBQ3BDLFNBQVMsRUFBRSxhQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtJQUMxQixPQUFPLEVBQUUsYUFBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7SUFDeEIsUUFBUSxFQUFFLGFBQUM7U0FDUixLQUFLLENBQ0osYUFBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxhQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2hCLEVBQUUsRUFBRSxhQUFDLENBQUMsTUFBTSxFQUFFO1lBQ2QsS0FBSyxFQUFFLGFBQUMsQ0FBQyxNQUFNLEVBQUU7U0FDbEIsQ0FBQztRQUNGLFlBQVksRUFBRSxhQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLFlBQVk7WUFDWiw2Q0FBNkM7WUFDN0MsV0FBVztTQUNaLENBQUM7UUFDRixhQUFhLEVBQUUsYUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEMsS0FBSyxFQUFFLGFBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sRUFBRSxhQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUMxQixDQUFDLENBQ0g7U0FDQSxHQUFHLENBQUMsQ0FBQyxFQUFFLGtDQUFrQyxDQUFDO0NBQzlDLENBQUMsQ0FBQztBQUlVLFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQztJQUNsRCxLQUFLLEVBQUUsYUFBYTtDQUNyQixDQUFDLENBQUM7QUFFSSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQWtDLEVBQ2xDLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBRXRCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG1DQUFtQyxDQUNwQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0sMkRBQTRCLENBQUMsR0FBRyxDQUFDO1FBQzVELEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBbEJXLFFBQUEsSUFBSSxRQWtCZjtBQUVLLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEtBQUssR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLEVBQ0osSUFBSSxFQUFFLGVBQWUsRUFDckIsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRztRQUNoQyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksRUFBRSxFQUFFO1FBQ1IsSUFBSSxFQUFFLENBQUM7S0FDUixHQUNGLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxzQkFBc0I7UUFDOUIsR0FBRyxHQUFHLENBQUMsV0FBVztRQUNsQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixDQUFDO1FBQ3JELE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxxQ0FBZ0IsQ0FBQyxTQUFTLEVBQUU7S0FDOUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXZFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25CLFNBQVM7UUFDVCxLQUFLO1FBQ0wsS0FBSyxFQUFFLElBQUk7UUFDWCxNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQXhCVyxRQUFBLEdBQUcsT0F3QmQifQ==
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const framework_1 = require("@medusajs/framework");
4
+ const route_1 = require("./admin/flash-sales/route");
5
+ exports.default = (0, framework_1.defineMiddlewares)([
6
+ {
7
+ methods: ["POST"],
8
+ matcher: "/admin/flash-sales",
9
+ middlewares: [(0, framework_1.validateAndTransformBody)(route_1.createCustomCampaignSchema)],
10
+ },
11
+ {
12
+ methods: ["PUT"],
13
+ matcher: "/admin/flash-sales/:id",
14
+ middlewares: [(0, framework_1.validateAndTransformBody)(route_1.createCustomCampaignSchema)],
15
+ },
16
+ {
17
+ methods: ["GET"],
18
+ matcher: "/admin/flash-sales",
19
+ middlewares: [
20
+ (0, framework_1.validateAndTransformQuery)(route_1.GetFlashSalesSchema, {
21
+ defaults: ["*", "campaign.*"],
22
+ isList: true,
23
+ }),
24
+ ],
25
+ },
26
+ ]);
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBSTZCO0FBQzdCLHFEQUdtQztBQUVuQyxrQkFBZSxJQUFBLDZCQUFpQixFQUFDO0lBQy9CO1FBQ0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxvQkFBb0I7UUFDN0IsV0FBVyxFQUFFLENBQUMsSUFBQSxvQ0FBd0IsRUFBQyxrQ0FBMEIsQ0FBQyxDQUFDO0tBQ3BFO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDaEIsT0FBTyxFQUFFLHdCQUF3QjtRQUNqQyxXQUFXLEVBQUUsQ0FBQyxJQUFBLG9DQUF3QixFQUFDLGtDQUEwQixDQUFDLENBQUM7S0FDcEU7SUFDRDtRQUNFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNoQixPQUFPLEVBQUUsb0JBQW9CO1FBQzdCLFdBQVcsRUFBRTtZQUNYLElBQUEscUNBQXlCLEVBQUMsMkJBQW1CLEVBQUU7Z0JBQzdDLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUM7Z0JBQzdCLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztTQUNIO0tBQ0Y7Q0FDRixDQUFDLENBQUMifQ==
@@ -0,0 +1,99 @@
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 GET = async (req, res) => {
8
+ const { id } = req.params;
9
+ if (!id) {
10
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Campaign ID is required");
11
+ }
12
+ const query = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
13
+ const productService = framework_1.container.resolve(utils_1.Modules.PRODUCT);
14
+ try {
15
+ // First, find the custom campaign type by campaign ID
16
+ const { data: [customCampaignTypes], } = await query.graph({
17
+ entity: "custom_campaign_type",
18
+ fields: [
19
+ "id",
20
+ "campaign.*",
21
+ "campaign.promotions.*",
22
+ "campaign.promotions.application_method.*",
23
+ "campaign.promotions.application_method.target_rules.*",
24
+ ],
25
+ filters: {
26
+ type: campaign_type_enum_1.CampaignTypeEnum.FlashSale,
27
+ campaign_id: id,
28
+ },
29
+ });
30
+ const campaign = customCampaignTypes.campaign;
31
+ if (!campaign) {
32
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Flash sale with ID ${id} not found`);
33
+ }
34
+ // Fetch promotion usage limits for the campaign
35
+ const { data: promotionUsageLimits } = await query.graph({
36
+ entity: "promotion_usage_limit",
37
+ fields: ["id", "promotion_id", "product_id", "limit", "used"],
38
+ filters: {
39
+ campaign_id: id,
40
+ },
41
+ });
42
+ // Create a map of promotion usage limits by promotion ID
43
+ const promotionLimitsMap = new Map();
44
+ promotionUsageLimits.forEach((limit) => {
45
+ promotionLimitsMap.set(limit.promotion_id, limit);
46
+ });
47
+ // Process promotions to extract product information
48
+ const products = [];
49
+ for await (const promotion of campaign.promotions ?? []) {
50
+ if (!promotion.application_method?.target_rules?.length) {
51
+ continue;
52
+ }
53
+ const productRule = promotion.application_method.target_rules.find((rule) => rule.attribute === "items.product.id" && rule.operator === "eq");
54
+ const promotionLimit = promotionLimitsMap.get(promotion.id);
55
+ const product = await productService.retrieveProduct(promotionLimit?.product_id);
56
+ if (productRule && promotion.application_method.value) {
57
+ products.push({
58
+ product: {
59
+ id: product.id,
60
+ title: product.title,
61
+ },
62
+ discountType: promotion.application_method?.type,
63
+ discountValue: promotion.application_method?.value,
64
+ maxQty: promotion.application_method?.max_quantity,
65
+ limit: promotionLimitsMap.get(promotion.id)?.limit,
66
+ });
67
+ }
68
+ }
69
+ const campaignData = {
70
+ id: campaign.id,
71
+ name: campaign.name,
72
+ description: campaign.description,
73
+ type: campaign.type,
74
+ startsAt: campaign.starts_at,
75
+ endsAt: campaign.ends_at,
76
+ };
77
+ const productData = products.map((product) => ({
78
+ id: product.product.id,
79
+ title: product.product.title,
80
+ discountType: product.discountType,
81
+ discountValue: product.discountValue,
82
+ maxQty: product.maxQty,
83
+ limit: product.limit,
84
+ }));
85
+ res.status(200).json({
86
+ ...campaignData,
87
+ products: productData,
88
+ });
89
+ }
90
+ catch (error) {
91
+ if (error instanceof utils_1.MedusaError) {
92
+ throw error;
93
+ }
94
+ console.error("Error fetching flash sale:", error);
95
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "An error occurred while fetching the flash sale");
96
+ }
97
+ };
98
+ exports.GET = GET;
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2NhbXBhaWducy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUErRTtBQUMvRSxxREFJbUM7QUFDbkMsc0dBQWlHO0FBRzFGLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBa0MsRUFDbEMsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBRTFCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNSLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHlCQUF5QixDQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sY0FBYyxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUxRCxJQUFJLENBQUM7UUFDSCxzREFBc0Q7UUFDdEQsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLEdBQzVCLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxzQkFBc0I7WUFDOUIsTUFBTSxFQUFFO2dCQUNOLElBQUk7Z0JBQ0osWUFBWTtnQkFDWix1QkFBdUI7Z0JBQ3ZCLDBDQUEwQztnQkFDMUMsdURBQXVEO2FBQ3hEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxxQ0FBZ0IsQ0FBQyxTQUFTO2dCQUNoQyxXQUFXLEVBQUUsRUFBRTthQUNoQjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztRQUU5QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixzQkFBc0IsRUFBRSxZQUFZLENBQ3JDLENBQUM7UUFDSixDQUFDO1FBRUQsZ0RBQWdEO1FBQ2hELE1BQU0sRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDdkQsTUFBTSxFQUFFLHVCQUF1QjtZQUMvQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQzdELE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUUsRUFBRTthQUNoQjtTQUNGLENBQUMsQ0FBQztRQUVILHlEQUF5RDtRQUN6RCxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDckMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxvREFBb0Q7UUFDcEQsTUFBTSxRQUFRLEdBQStCLEVBQUUsQ0FBQztRQUNoRCxJQUFJLEtBQUssRUFBRSxNQUFNLFNBQVMsSUFBSSxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUN4RCxTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNoRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsSUFBSSxDQUFDLFNBQVMsS0FBSyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FDbEUsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFNUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsZUFBZSxDQUNsRCxjQUFjLEVBQUUsVUFBVSxDQUMzQixDQUFDO1lBRUYsSUFBSSxXQUFXLElBQUksU0FBUyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN0RCxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNaLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7d0JBQ2QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO3FCQUNyQjtvQkFDRCxZQUFZLEVBQUUsU0FBUyxDQUFDLGtCQUFrQixFQUFFLElBQUk7b0JBQ2hELGFBQWEsRUFBRSxTQUFTLENBQUMsa0JBQWtCLEVBQUUsS0FBSztvQkFDbEQsTUFBTSxFQUFFLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxZQUFZO29CQUNsRCxLQUFLLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLO2lCQUNuRCxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHO1lBQ25CLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUNmLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtZQUNuQixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7WUFDakMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLFFBQVEsRUFBRSxRQUFRLENBQUMsU0FBUztZQUM1QixNQUFNLEVBQUUsUUFBUSxDQUFDLE9BQU87U0FDekIsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsRUFBRSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN0QixLQUFLLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLO1lBQzVCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDcEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztTQUNyQixDQUFDLENBQUMsQ0FBQztRQUVKLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLEdBQUcsWUFBWTtZQUNmLFFBQVEsRUFBRSxXQUFXO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksbUJBQVcsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxpREFBaUQsQ0FDbEQsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUM7QUEzSFcsUUFBQSxHQUFHLE9BMkhkIn0=
@@ -0,0 +1,35 @@
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 GET = async (req, res) => {
8
+ const query = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
9
+ const { data: customCampaigns, metadata: { count, take, skip } = {
10
+ count: 0,
11
+ take: 20,
12
+ skip: 0,
13
+ }, } = await query.graph({
14
+ entity: "custom_campaign_type",
15
+ ...req.queryConfig,
16
+ fields: [
17
+ "id",
18
+ "campaign.name",
19
+ "campaign.description",
20
+ "campaign.type",
21
+ "campaign.starts_at",
22
+ "campaign.ends_at",
23
+ ],
24
+ filters: { type: campaign_type_enum_1.CampaignTypeEnum.FlashSale },
25
+ });
26
+ const campaigns = customCampaigns.map((campaign) => campaign.campaign);
27
+ res.status(200).json({
28
+ campaigns,
29
+ count,
30
+ limit: take,
31
+ offset: skip,
32
+ });
33
+ };
34
+ exports.GET = GET;
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2NhbXBhaWducy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBK0U7QUFDL0UscURBQXNFO0FBQ3RFLG1HQUE4RjtBQUV2RixNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSxLQUFLLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsTUFBTSxFQUNKLElBQUksRUFBRSxlQUFlLEVBQ3JCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUc7UUFDaEMsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLEVBQUUsRUFBRTtRQUNSLElBQUksRUFBRSxDQUFDO0tBQ1IsR0FDRixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsc0JBQXNCO1FBQzlCLEdBQUcsR0FBRyxDQUFDLFdBQVc7UUFDbEIsTUFBTSxFQUFFO1lBQ04sSUFBSTtZQUNKLGVBQWU7WUFDZixzQkFBc0I7WUFDdEIsZUFBZTtZQUNmLG9CQUFvQjtZQUNwQixrQkFBa0I7U0FDbkI7UUFDRCxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUscUNBQWdCLENBQUMsU0FBUyxFQUFFO0tBQzlDLENBQUMsQ0FBQztJQUVILE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV2RSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuQixTQUFTO1FBQ1QsS0FBSztRQUNMLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUEvQlcsUUFBQSxHQUFHLE9BK0JkIn0=
@@ -0,0 +1,13 @@
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
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const promotion_1 = __importDefault(require("@medusajs/medusa/promotion"));
8
+ const custom_campaigns_1 = __importDefault(require("../modules/custom-campaigns"));
9
+ exports.default = (0, utils_1.defineLink)(promotion_1.default.linkable.campaign, {
10
+ linkable: custom_campaigns_1.default.linkable.customCampaignType,
11
+ deleteCascade: true,
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtcGFpZ24tdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW5rcy9jYW1wYWlnbi10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQXVEO0FBQ3ZELDJFQUF5RDtBQUN6RCxtRkFBK0Q7QUFFL0Qsa0JBQWUsSUFBQSxrQkFBVSxFQUFDLG1CQUFlLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtJQUMzRCxRQUFRLEVBQUUsMEJBQW9CLENBQUMsUUFBUSxDQUFDLGtCQUFrQjtJQUMxRCxhQUFhLEVBQUUsSUFBSTtDQUNwQixDQUFDLENBQUMifQ==
@@ -0,0 +1,13 @@
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.CUSTOM_CAMPAIGN_MODULE = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const service_1 = __importDefault(require("./service"));
9
+ exports.CUSTOM_CAMPAIGN_MODULE = "customCampaign";
10
+ exports.default = (0, utils_1.Module)(exports.CUSTOM_CAMPAIGN_MODULE, {
11
+ service: service_1.default,
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jdXN0b20tY2FtcGFpZ25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUFtRDtBQUNuRCx3REFBb0Q7QUFFdkMsUUFBQSxzQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUV2RCxrQkFBZSxJQUFBLGNBQU0sRUFBQyw4QkFBc0IsRUFBRTtJQUM1QyxPQUFPLEVBQUUsaUJBQTJCO0NBQ3JDLENBQUMsQ0FBQyJ9
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20250524150901 = void 0;
4
+ const migrations_1 = require("@mikro-orm/migrations");
5
+ class Migration20250524150901 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "promotion_usage_limit" drop constraint if exists "promotion_usage_limit_promotion_id_unique";`);
8
+ this.addSql(`alter table if exists "custom_campaign_type" drop constraint if exists "custom_campaign_type_campaign_id_unique";`);
9
+ this.addSql(`create table if not exists "custom_campaign_type" ("id" text not null, "campaign_id" text not null, "type" text check ("type" in ('flash-sale')) not null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "custom_campaign_type_pkey" primary key ("id"));`);
10
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_custom_campaign_type_campaign_id_unique" ON "custom_campaign_type" (campaign_id) WHERE deleted_at IS NULL;`);
11
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_custom_campaign_type_deleted_at" ON "custom_campaign_type" (deleted_at) WHERE deleted_at IS NULL;`);
12
+ this.addSql(`create table if not exists "promotion_usage_limit" ("id" text not null, "promotion_id" text not null, "limit" integer not null, "used" integer not null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "promotion_usage_limit_pkey" primary key ("id"));`);
13
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_promotion_usage_limit_promotion_id_unique" ON "promotion_usage_limit" (promotion_id) WHERE deleted_at IS NULL;`);
14
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_promotion_usage_limit_deleted_at" ON "promotion_usage_limit" (deleted_at) WHERE deleted_at IS NULL;`);
15
+ }
16
+ async down() {
17
+ this.addSql(`drop table if exists "custom_campaign_type" cascade;`);
18
+ this.addSql(`drop table if exists "promotion_usage_limit" cascade;`);
19
+ }
20
+ }
21
+ exports.Migration20250524150901 = Migration20250524150901;
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA1MjQxNTA5MDEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jdXN0b20tY2FtcGFpZ25zL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTA1MjQxNTA5MDEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0RBQWtEO0FBRWxELE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFFM0MsS0FBSyxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLHNIQUFzSCxDQUFDLENBQUM7UUFDcEksSUFBSSxDQUFDLE1BQU0sQ0FBQyxtSEFBbUgsQ0FBQyxDQUFDO1FBQ2pJLElBQUksQ0FBQyxNQUFNLENBQUMseVZBQXlWLENBQUMsQ0FBQztRQUN2VyxJQUFJLENBQUMsTUFBTSxDQUFDLG1KQUFtSixDQUFDLENBQUM7UUFDakssSUFBSSxDQUFDLE1BQU0sQ0FBQyxtSUFBbUksQ0FBQyxDQUFDO1FBRWpKLElBQUksQ0FBQyxNQUFNLENBQUMsd1ZBQXdWLENBQUMsQ0FBQztRQUN0VyxJQUFJLENBQUMsTUFBTSxDQUFDLHVKQUF1SixDQUFDLENBQUM7UUFDckssSUFBSSxDQUFDLE1BQU0sQ0FBQyxxSUFBcUksQ0FBQyxDQUFDO0lBQ3JKLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Q0FFRjtBQXBCRCwwREFvQkMifQ==
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20250526010310 = void 0;
4
+ const migrations_1 = require("@mikro-orm/migrations");
5
+ class Migration20250526010310 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "promotion_usage_limit" drop constraint if exists "promotion_usage_limit_campaign_id_promotion_id_unique";`);
8
+ this.addSql(`drop index if exists "IDX_promotion_usage_limit_promotion_id_unique";`);
9
+ this.addSql(`alter table if exists "promotion_usage_limit" add column if not exists "campaign_id" text not null;`);
10
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_promotion_usage_limit_campaign_id_promotion_id_unique" ON "promotion_usage_limit" (campaign_id, promotion_id) WHERE deleted_at IS NULL;`);
11
+ }
12
+ async down() {
13
+ this.addSql(`drop index if exists "IDX_promotion_usage_limit_campaign_id_promotion_id_unique";`);
14
+ this.addSql(`alter table if exists "promotion_usage_limit" drop column if exists "campaign_id";`);
15
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_promotion_usage_limit_promotion_id_unique" ON "promotion_usage_limit" (promotion_id) WHERE deleted_at IS NULL;`);
16
+ }
17
+ }
18
+ exports.Migration20250526010310 = Migration20250526010310;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA1MjYwMTAzMTAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jdXN0b20tY2FtcGFpZ25zL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTA1MjYwMTAzMTAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0RBQWtEO0FBRWxELE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFFM0MsS0FBSyxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLGtJQUFrSSxDQUFDLENBQUM7UUFDaEosSUFBSSxDQUFDLE1BQU0sQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO1FBRXJGLElBQUksQ0FBQyxNQUFNLENBQUMscUdBQXFHLENBQUMsQ0FBQztRQUNuSCxJQUFJLENBQUMsTUFBTSxDQUFDLGdMQUFnTCxDQUFDLENBQUM7SUFDaE0sQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsbUZBQW1GLENBQUMsQ0FBQztRQUNqRyxJQUFJLENBQUMsTUFBTSxDQUFDLG9GQUFvRixDQUFDLENBQUM7UUFFbEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1SkFBdUosQ0FBQyxDQUFDO0lBQ3ZLLENBQUM7Q0FFRjtBQWpCRCwwREFpQkMifQ==
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20250529011904 = void 0;
4
+ const migrations_1 = require("@mikro-orm/migrations");
5
+ class Migration20250529011904 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "promotion_usage_limit" add column if not exists "product_id" text not null;`);
8
+ }
9
+ async down() {
10
+ this.addSql(`alter table if exists "promotion_usage_limit" drop column if exists "product_id";`);
11
+ }
12
+ }
13
+ exports.Migration20250529011904 = Migration20250529011904;
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA1MjkwMTE5MDQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jdXN0b20tY2FtcGFpZ25zL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTA1MjkwMTE5MDQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0RBQWtEO0FBRWxELE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFFM0MsS0FBSyxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLG9HQUFvRyxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsbUZBQW1GLENBQUMsQ0FBQztJQUNuRyxDQUFDO0NBRUY7QUFWRCwwREFVQyJ9
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const campaign_type_enum_1 = require("../types/campaign-type.enum");
5
+ const CustomCampaignType = utils_1.model.define("custom_campaign_type", {
6
+ id: utils_1.model.id().primaryKey(),
7
+ campaign_id: utils_1.model.text().unique(),
8
+ type: utils_1.model.enum(campaign_type_enum_1.CampaignTypeEnum),
9
+ });
10
+ exports.default = CustomCampaignType;
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNhbXBhaWduLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jdXN0b20tY2FtcGFpZ25zL21vZGVscy9jdXN0b20tY2FtcGFpZ24tdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFrRDtBQUNsRCxvRUFBK0Q7QUFFL0QsTUFBTSxrQkFBa0IsR0FBRyxhQUFLLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFO0lBQzlELEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLFdBQVcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO0lBQ2xDLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxDQUFDLHFDQUFnQixDQUFDO0NBQ25DLENBQUMsQ0FBQztBQUVILGtCQUFlLGtCQUFrQixDQUFDIn0=
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const PromotionUsageLimit = utils_1.model
5
+ .define("promotion_usage_limit", {
6
+ id: utils_1.model.id().primaryKey(),
7
+ campaign_id: utils_1.model.text(),
8
+ promotion_id: utils_1.model.text(),
9
+ product_id: utils_1.model.text(),
10
+ limit: utils_1.model.number(),
11
+ used: utils_1.model.number(),
12
+ })
13
+ .indexes([{ on: ["campaign_id", "promotion_id"], unique: true }]);
14
+ exports.default = PromotionUsageLimit;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbW90aW9uLXVzYWdlLWxpbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvY3VzdG9tLWNhbXBhaWducy9tb2RlbHMvcHJvbW90aW9uLXVzYWdlLWxpbWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQWtEO0FBRWxELE1BQU0sbUJBQW1CLEdBQUcsYUFBSztLQUM5QixNQUFNLENBQUMsdUJBQXVCLEVBQUU7SUFDL0IsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDekIsWUFBWSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDMUIsVUFBVSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDeEIsS0FBSyxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUU7SUFDckIsSUFBSSxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUU7Q0FDckIsQ0FBQztLQUNELE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFcEUsa0JBQWUsbUJBQW1CLENBQUMifQ==
@@ -0,0 +1,15 @@
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
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const custom_campaign_type_1 = __importDefault(require("./models/custom-campaign-type"));
8
+ const promotion_usage_limit_1 = __importDefault(require("./models/promotion-usage-limit"));
9
+ class CustomCampaignModuleService extends (0, utils_1.MedusaService)({
10
+ CustomCampaignType: custom_campaign_type_1.default,
11
+ PromotionUsageLimit: promotion_usage_limit_1.default,
12
+ }) {
13
+ }
14
+ exports.default = CustomCampaignModuleService;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2N1c3RvbS1jYW1wYWlnbnMvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUEwRDtBQUMxRCx5RkFBK0Q7QUFDL0QsMkZBQWlFO0FBRWpFLE1BQU0sMkJBQTRCLFNBQVEsSUFBQSxxQkFBYSxFQUFDO0lBQ3RELGtCQUFrQixFQUFsQiw4QkFBa0I7SUFDbEIsbUJBQW1CLEVBQW5CLCtCQUFtQjtDQUNwQixDQUFDO0NBQUc7QUFFTCxrQkFBZSwyQkFBMkIsQ0FBQyJ9
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CampaignTypeEnum = void 0;
4
+ var CampaignTypeEnum;
5
+ (function (CampaignTypeEnum) {
6
+ CampaignTypeEnum["FlashSale"] = "flash-sale";
7
+ })(CampaignTypeEnum || (exports.CampaignTypeEnum = CampaignTypeEnum = {}));
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtcGFpZ24tdHlwZS5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvY3VzdG9tLWNhbXBhaWducy90eXBlcy9jYW1wYWlnbi10eXBlLmVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxnQkFFWDtBQUZELFdBQVksZ0JBQWdCO0lBQzFCLDRDQUF3QixDQUFBO0FBQzFCLENBQUMsRUFGVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQUUzQiJ9
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = updatePromotionUsage;
5
+ const updatePromotionUsageWorkflow_1 = require("../workflows/custom-campaign/updatePromotionUsageWorkflow");
6
+ async function updatePromotionUsage({ event: { data }, }) {
7
+ // update promotion usage
8
+ await updatePromotionUsageWorkflow_1.updatePromotionUsageWorkflow.run({
9
+ input: {
10
+ order_id: data.id,
11
+ },
12
+ });
13
+ }
14
+ exports.config = {
15
+ event: `order.placed`,
16
+ };
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcGxhY2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLXBsYWNlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSx1Q0FTQztBQVhELDRHQUF5RztBQUUxRixLQUFLLFVBQVUsb0JBQW9CLENBQUMsRUFDakQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQ2dCO0lBQy9CLHlCQUF5QjtJQUN6QixNQUFNLDJEQUE0QixDQUFDLEdBQUcsQ0FBQztRQUNyQyxLQUFLLEVBQUU7WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDbEI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSxjQUFjO0NBQ3RCLENBQUMifQ==