@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,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCustomCampaignWorkflow = void 0;
4
+ const framework_1 = require("@medusajs/framework");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
7
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
8
+ const custom_campaigns_1 = require("../../modules/custom-campaigns");
9
+ const createCustomCampaignStep = (0, workflows_sdk_1.createStep)("create-custom-campaign-step", async (data) => {
10
+ const link = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.LINK);
11
+ const customCampaignModuleService = framework_1.container.resolve(custom_campaigns_1.CUSTOM_CAMPAIGN_MODULE);
12
+ const campaignIdentifier = `${data.type}-${Date.now()}`;
13
+ let campaign;
14
+ let promotions;
15
+ let customCampaignType;
16
+ let promotionUsageLimit;
17
+ const { result: [_campaign], } = await core_flows_1.createCampaignsWorkflow.run({
18
+ input: {
19
+ campaignsData: [
20
+ {
21
+ name: data.name,
22
+ campaign_identifier: campaignIdentifier,
23
+ description: data.description,
24
+ starts_at: new Date(data.starts_at),
25
+ ends_at: new Date(data.ends_at),
26
+ },
27
+ ],
28
+ },
29
+ });
30
+ campaign = _campaign;
31
+ try {
32
+ const { result: _promotions } = await core_flows_1.createPromotionsWorkflow.run({
33
+ input: {
34
+ promotionsData: data.products.map((product) => ({
35
+ code: `${campaignIdentifier}-${product.product.id}`,
36
+ type: "standard",
37
+ status: "active",
38
+ is_automatic: true,
39
+ campaign_id: campaign.id,
40
+ application_method: {
41
+ target_type: "items",
42
+ allocation: "each",
43
+ type: product.discountType,
44
+ value: product.discountValue,
45
+ max_quantity: product.maxQty,
46
+ target_rules: [
47
+ {
48
+ attribute: "items.product.id",
49
+ operator: "eq",
50
+ values: [product.product.id],
51
+ },
52
+ ],
53
+ },
54
+ })),
55
+ },
56
+ });
57
+ promotions = _promotions;
58
+ const productPromotionMap = new Map();
59
+ promotions.forEach((promotion) => {
60
+ const productId = promotion.code?.split("-").at(-1);
61
+ if (!productId) {
62
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid product id");
63
+ }
64
+ productPromotionMap.set(productId, promotion.id);
65
+ });
66
+ customCampaignType =
67
+ await customCampaignModuleService.createCustomCampaignTypes({
68
+ campaign_id: campaign.id,
69
+ type: data.type,
70
+ });
71
+ promotionUsageLimit =
72
+ await customCampaignModuleService.createPromotionUsageLimits(data.products.map((product) => ({
73
+ campaign_id: campaign.id,
74
+ promotion_id: productPromotionMap.get(product.product.id),
75
+ product_id: product.product.id,
76
+ limit: product.limit,
77
+ used: 0,
78
+ })));
79
+ // link campaign type
80
+ await link.create([
81
+ {
82
+ [utils_1.Modules.PROMOTION]: {
83
+ campaign_id: campaign.id,
84
+ },
85
+ [custom_campaigns_1.CUSTOM_CAMPAIGN_MODULE]: {
86
+ custom_campaign_type_id: customCampaignType.id,
87
+ },
88
+ },
89
+ ]);
90
+ return new workflows_sdk_1.StepResponse({
91
+ campaign,
92
+ promotions,
93
+ });
94
+ }
95
+ catch (error) {
96
+ console.log({ error });
97
+ await core_flows_1.deleteCampaignsWorkflow.run({
98
+ input: {
99
+ ids: campaign.id,
100
+ },
101
+ });
102
+ if (promotions) {
103
+ await core_flows_1.deletePromotionsWorkflow.run({
104
+ input: {
105
+ ids: promotions.map((promotion) => promotion.id),
106
+ },
107
+ });
108
+ }
109
+ if (customCampaignType) {
110
+ await customCampaignModuleService.deleteCustomCampaignTypes(customCampaignType.id);
111
+ }
112
+ if (promotionUsageLimit) {
113
+ await customCampaignModuleService.deletePromotionUsageLimits(promotionUsageLimit.map((limit) => limit.id));
114
+ }
115
+ }
116
+ });
117
+ exports.createCustomCampaignWorkflow = (0, workflows_sdk_1.createWorkflow)("create-custom-campaign", (data) => {
118
+ const customCampaign = createCustomCampaignStep(data);
119
+ return new workflows_sdk_1.WorkflowResponse(customCampaign);
120
+ });
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ3VzdG9tQ2FtcGFpZ25Xb3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvY3VzdG9tLWNhbXBhaWduL2NyZWF0ZUN1c3RvbUNhbXBhaWduV29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdEO0FBT2hELHFEQUltQztBQUNuQyxxRUFLMkM7QUFDM0MsNERBS3FDO0FBRXJDLHFFQUF3RTtBQUd4RSxNQUFNLHdCQUF3QixHQUFHLElBQUEsMEJBQVUsRUFDekMsNkJBQTZCLEVBQzdCLEtBQUssRUFBRSxJQUFvQixFQUFFLEVBQUU7SUFDN0IsTUFBTSxJQUFJLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsTUFBTSwyQkFBMkIsR0FDL0IscUJBQVMsQ0FBQyxPQUFPLENBQThCLHlDQUFzQixDQUFDLENBQUM7SUFDekUsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFFeEQsSUFBSSxRQUFpQyxDQUFDO0lBQ3RDLElBQUksVUFBc0MsQ0FBQztJQUMzQyxJQUFJLGtCQUlTLENBQUM7SUFDZCxJQUFJLG1CQUlTLENBQUM7SUFFZCxNQUFNLEVBQ0osTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQ3BCLEdBQUcsTUFBTSxvQ0FBdUIsQ0FBQyxHQUFHLENBQUM7UUFDcEMsS0FBSyxFQUFFO1lBQ0wsYUFBYSxFQUFFO2dCQUNiO29CQUNFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixtQkFBbUIsRUFBRSxrQkFBa0I7b0JBQ3ZDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ25DLE9BQU8sRUFBRSxJ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
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateCustomFlashSaleWorkflow = void 0;
4
+ const framework_1 = require("@medusajs/framework");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
7
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
8
+ const custom_campaigns_1 = require("../../modules/custom-campaigns");
9
+ const updateCustomFlashSaleStep = (0, workflows_sdk_1.createStep)("update-custom-flash-sale-step", async (data) => {
10
+ const campaign_id = data.id;
11
+ const customCampaignModuleService = framework_1.container.resolve(custom_campaigns_1.CUSTOM_CAMPAIGN_MODULE);
12
+ const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
13
+ if (!campaign_id) {
14
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Campaign ID is required");
15
+ }
16
+ // Fetch the existing campaign
17
+ const campaign = await promotionService.retrieveCampaign(campaign_id);
18
+ // Fetch existing promotion usage limits
19
+ const promotionUsageLimits = await customCampaignModuleService.listPromotionUsageLimits({
20
+ campaign_id: campaign_id,
21
+ });
22
+ // Create maps for existing promotions and usage limits
23
+ const existingPromotionUsageMapByProductId = new Map(promotionUsageLimits.map((limit) => [limit.product_id, limit]));
24
+ const promotionsToBeCreate = data.products.filter((product) => !existingPromotionUsageMapByProductId.has(product.product.id));
25
+ const productPromotionsToBeUpdate = data.products.filter((product) => existingPromotionUsageMapByProductId.has(product.product.id));
26
+ const inputProductIdSet = new Set(data.products.map((product) => product.product.id));
27
+ const promotionsToBeDelete = promotionUsageLimits.filter((limit) => !inputProductIdSet.has(limit.product_id));
28
+ console.log("update campaign");
29
+ // 1. Update the campaign details
30
+ await core_flows_1.updateCampaignsWorkflow.run({
31
+ input: {
32
+ campaignsData: [
33
+ {
34
+ id: campaign_id,
35
+ name: data.name,
36
+ description: data.description,
37
+ starts_at: new Date(data.starts_at),
38
+ ends_at: new Date(data.ends_at),
39
+ },
40
+ ],
41
+ },
42
+ });
43
+ // 2.1 Update promotions to be updated
44
+ await promotionService.updatePromotions(productPromotionsToBeUpdate.map((product) => {
45
+ const promotion_id = existingPromotionUsageMapByProductId.get(product.product.id)
46
+ ?.promotion_id ?? "";
47
+ return {
48
+ id: promotion_id,
49
+ application_method: {
50
+ value: product.discountValue,
51
+ max_quantity: product.maxQty,
52
+ },
53
+ };
54
+ }));
55
+ // 2.2 Update promotion usage limits to be updated
56
+ await customCampaignModuleService.updatePromotionUsageLimits(productPromotionsToBeUpdate.map((product) => ({
57
+ id: existingPromotionUsageMapByProductId.get(product.product.id)?.id ??
58
+ "",
59
+ limit: product.limit,
60
+ })));
61
+ // 3. Delete promotions to be deleted
62
+ await core_flows_1.deletePromotionsWorkflow.run({
63
+ input: {
64
+ ids: promotionsToBeDelete.map((limit) => limit.promotion_id),
65
+ },
66
+ });
67
+ await customCampaignModuleService.softDeletePromotionUsageLimits(promotionsToBeDelete.map((limit) => limit.id));
68
+ // 4. Create promotions to be created
69
+ const { result: createdPromotions } = await core_flows_1.createPromotionsWorkflow.run({
70
+ input: {
71
+ promotionsData: promotionsToBeCreate.map((product) => ({
72
+ code: `${campaign.campaign_identifier}-${product.product.id}`,
73
+ type: "standard",
74
+ status: "active",
75
+ is_automatic: true,
76
+ campaign_id: campaign_id,
77
+ application_method: {
78
+ target_type: "items",
79
+ allocation: "each",
80
+ type: product.discountType,
81
+ value: product.discountValue,
82
+ max_quantity: product.maxQty,
83
+ target_rules: [
84
+ {
85
+ attribute: "items.product.id",
86
+ operator: "eq",
87
+ values: [product.product.id],
88
+ },
89
+ ],
90
+ },
91
+ })),
92
+ },
93
+ });
94
+ const productPromotionMap = new Map();
95
+ createdPromotions.forEach((promotion) => {
96
+ const productId = promotion.code?.split("-").at(-1);
97
+ if (!productId) {
98
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid product id");
99
+ }
100
+ productPromotionMap.set(productId, promotion.id);
101
+ });
102
+ await customCampaignModuleService.createPromotionUsageLimits(promotionsToBeCreate.map((product) => ({
103
+ campaign_id: campaign.id,
104
+ promotion_id: productPromotionMap.get(product.product.id) ?? "",
105
+ product_id: product.product.id,
106
+ limit: product.limit,
107
+ used: 0,
108
+ })));
109
+ return new workflows_sdk_1.StepResponse();
110
+ });
111
+ exports.updateCustomFlashSaleWorkflow = (0, workflows_sdk_1.createWorkflow)("update-custom-flash-sale", (data) => {
112
+ const updatedFlashSale = updateCustomFlashSaleStep(data);
113
+ return new workflows_sdk_1.WorkflowResponse(updatedFlashSale);
114
+ });
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlQ3VzdG9tRmxhc2hTYWxlV29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2N1c3RvbS1jYW1wYWlnbi91cGRhdGVDdXN0b21GbGFzaFNhbGVXb3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBZ0Q7QUFPaEQscURBQWlFO0FBQ2pFLHFFQUsyQztBQUMzQyw0REFLcUM7QUFFckMscUVBQXdFO0FBT3hFLE1BQU0seUJBQXlCLEdBQUcsSUFBQSwwQkFBVSxFQUMxQywrQkFBK0IsRUFDL0IsS0FBSyxFQUFFLElBQTBCLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBRTVCLE1BQU0sMkJBQTJCLEdBQy9CLHFCQUFTLENBQUMsT0FBTyxDQUE4Qix5Q0FBc0IsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sZ0JBQWdCLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTlELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5QkFBeUIsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV0RSx3Q0FBd0M7SUFDeEMsTUFBTSxvQkFBb0IsR0FDeEIsTUFBTSwyQkFBMkIsQ0FBQyx3QkFBd0IsQ0FBQztRQUN6RCxXQUFXLEVBQUUsV0FBVztLQUN6QixDQUFDLENBQUM7SUFFTCx1REFBdUQ7SUFDdkQsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLEdBQUcsQ0FDbEQsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FB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
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updatePromotionUsageWorkflow = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const custom_campaigns_1 = require("../../modules/custom-campaigns");
7
+ const updatePromotionUsageStep = (0, workflows_sdk_1.createStep)("update-promotion-usage-step", async ({ order_id }, { container }) => {
8
+ const orderService = await container.resolve(utils_1.Modules.ORDER);
9
+ const promotionService = await container.resolve(utils_1.Modules.PROMOTION);
10
+ const customCampaignTypeService = container.resolve(custom_campaigns_1.CUSTOM_CAMPAIGN_MODULE);
11
+ const order = await orderService.retrieveOrder(order_id, {
12
+ relations: ["items.adjustments"],
13
+ });
14
+ const promotionSet = new Set(order.items
15
+ ?.map((item) => item.adjustments?.map((adjustment) => adjustment.promotion_id))
16
+ .flat());
17
+ const promotionIds = Array.from(promotionSet);
18
+ const promotionUsageLimits = await customCampaignTypeService.listPromotionUsageLimits({
19
+ promotion_id: promotionIds,
20
+ });
21
+ const updatePromotionUsagePayload = promotionUsageLimits.map((limit) => ({
22
+ ...limit,
23
+ used: limit.used + 1,
24
+ }));
25
+ const limitReachedPromotions = updatePromotionUsagePayload.filter((limit) => limit.used >= limit.limit);
26
+ if (limitReachedPromotions.length > 0) {
27
+ await promotionService.updatePromotions(limitReachedPromotions.map((limit) => ({
28
+ id: limit.promotion_id,
29
+ status: "inactive",
30
+ })));
31
+ }
32
+ await customCampaignTypeService.updatePromotionUsageLimits(updatePromotionUsagePayload);
33
+ });
34
+ exports.updatePromotionUsageWorkflow = (0, workflows_sdk_1.createWorkflow)("update-promotion-usage", (data) => {
35
+ updatePromotionUsageStep(data);
36
+ return new workflows_sdk_1.WorkflowResponse({ success: true });
37
+ });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlUHJvbW90aW9uVXNhZ2VXb3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvY3VzdG9tLWNhbXBhaWduL3VwZGF0ZVByb21vdGlvblVzYWdlV29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQW9EO0FBQ3BELHFFQUkyQztBQUMzQyxxRUFBd0U7QUFPeEUsTUFBTSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ3pDLDZCQUE2QixFQUM3QixLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQTZCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQy9ELE1BQU0sWUFBWSxHQUFHLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFNUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0seUJBQXlCLEdBQzdCLFNBQVMsQ0FBQyxPQUFPLENBQThCLHlDQUFzQixDQUFDLENBQUM7SUFFekUsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTtRQUN2RCxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztLQUNqQyxDQUFDLENBQUM7SUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FDMUIsS0FBSyxDQUFDLEtBQUs7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2IsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FDL0Q7U0FDQSxJQUFJLEVBQUUsQ0FDVixDQUFDO0lBQ0YsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5QyxNQUFNLG9CQUFvQixHQUN4QixNQUFNLHlCQUF5QixDQUFDLHdCQUF3QixDQUFDO1FBQ3ZELFlBQVksRUFBRSxZQUFZO0tBQzNCLENBQUMsQ0FBQztJQUVMLE1BQU0sMkJBQTJCLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLEdBQUcsS0FBSztRQUNSLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUM7S0FDckIsQ0FBQyxDQUFDLENBQUM7SUFFSixNQUFNLHNCQUFzQixHQUFHLDJCQUEyQixDQUFDLE1BQU0sQ0FDL0QsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FDckMsQ0FBQztJQUVGLElBQUksc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sZ0JBQWdCLENBQUMsZ0JBQWdCLENBQ3JDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDdEIsTUFBTSxFQUFFLFVBQVU7U0FDbkIsQ0FBQyxDQUFDLENBQ0osQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLHlCQUF5QixDQUFDLDBCQUEwQixDQUN4RCwyQkFBMkIsQ0FDNUIsQ0FBQztBQUNKLENBQUMsQ0FDRixDQUFDO0FBRVcsUUFBQSw0QkFBNEIsR0FBRyxJQUFBLDhCQUFjLEVBQ3hELHdCQUF3QixFQUN4QixDQUFDLElBQStCLEVBQUUsRUFBRTtJQUNsQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixPQUFPLElBQUksZ0NBQWdCLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQ0YsQ0FBQyJ9
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
4
+ const custom_campaigns_1 = require("../../modules/custom-campaigns");
5
+ core_flows_1.deleteCampaignsWorkflow.hooks.campaignsDeleted(async ({ ids }, { container }) => {
6
+ const customCampaignModuleService = container.resolve(custom_campaigns_1.CUSTOM_CAMPAIGN_MODULE);
7
+ const promotionLimits = await customCampaignModuleService.listPromotionUsageLimits({
8
+ campaign_id: ids,
9
+ }, {
10
+ select: ["id", "promotion_id"],
11
+ });
12
+ await core_flows_1.deletePromotionsWorkflow.run({
13
+ input: {
14
+ ids: promotionLimits.map((limit) => limit.promotion_id),
15
+ },
16
+ });
17
+ await customCampaignModuleService.softDeletePromotionUsageLimits(promotionLimits.map((limit) => limit.id));
18
+ const customCampaignIds = await customCampaignModuleService.listCustomCampaignTypes({
19
+ campaign_id: Array.from(new Set(promotionLimits.map((limit) => limit.campaign_id))),
20
+ }, {
21
+ select: ["id"],
22
+ });
23
+ await customCampaignModuleService.softDeleteCustomCampaignTypes(customCampaignIds.map((campaign) => campaign.id));
24
+ });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlUHJvbW90aW9uT25DYW1wYWlnbkRlbGV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvaG9va3MvZGVsZXRlUHJvbW90aW9uT25DYW1wYWlnbkRlbGV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDREQUdxQztBQUNyQyxxRUFBd0U7QUFHeEUsb0NBQXVCLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUM1QyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDL0IsTUFBTSwyQkFBMkIsR0FDL0IsU0FBUyxDQUFDLE9BQU8sQ0FBOEIseUNBQXNCLENBQUMsQ0FBQztJQUV6RSxNQUFNLGVBQWUsR0FDbkIsTUFBTSwyQkFBMkIsQ0FBQyx3QkFBd0IsQ0FDeEQ7UUFDRSxXQUFXLEVBQUUsR0FBRztLQUNqQixFQUNEO1FBQ0UsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQztLQUMvQixDQUNGLENBQUM7SUFFSixNQUFNLHFDQUF3QixDQUFDLEdBQUcsQ0FBQztRQUNqQyxLQUFLLEVBQUU7WUFDTCxHQUFHLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztTQUN4RDtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sMkJBQTJCLENBQUMsOEJBQThCLENBQzlELGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDekMsQ0FBQztJQUVGLE1BQU0saUJBQWlCLEdBQ3JCLE1BQU0sMkJBQTJCLENBQUMsdUJBQXVCLENBQ3ZEO1FBQ0UsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQ3JCLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUMzRDtLQUNGLEVBQ0Q7UUFDRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7S0FDZixDQUNGLENBQUM7SUFFSixNQUFNLDJCQUEyQixDQUFDLDZCQUE2QixDQUM3RCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FDakQsQ0FBQztBQUNKLENBQUMsQ0FDRixDQUFDIn0=
package/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # Medusa Plugin Campaign
2
+
3
+ ## How to install
4
+ 1. add the plugin to your medusa backend
5
+ ```bash
6
+ yarn add medusa-campaign
7
+ ```
8
+ 2. configure your medusa backend `medusa-config.ts`
9
+ ```ts
10
+ module.exports = defineConfig({
11
+ // ... rest of the config
12
+ plugins: [
13
+ // ... rest of the plugins
14
+ {
15
+ resolve: "medusa-campaign",
16
+ options: {},
17
+ },
18
+ ],
19
+ });
20
+ ```
21
+
22
+ 3. run the migrations in your medusa core backend
23
+ ```bash
24
+ yarn medusa db:migrate
25
+ ```
26
+
27
+ 4. all done now just start your medusa backend
28
+ `yarn dev` `yarn start` or whatever you use to start your backend
package/package.json ADDED
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "@lodashventure/medusa-campaign",
3
+ "version": "0.0.6",
4
+ "description": "A starter for Medusa plugins.",
5
+ "author": "Medusa (https://medusajs.com)",
6
+ "license": "MIT",
7
+ "files": [
8
+ ".medusa/server"
9
+ ],
10
+ "exports": {
11
+ "./package.json": "./package.json",
12
+ "./workflows": "./.medusa/server/src/workflows/index.js",
13
+ "./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
14
+ "./modules/*": "./.medusa/server/src/modules/*/index.js",
15
+ "./providers/*": "./.medusa/server/src/providers/*/index.js",
16
+ "./*": "./.medusa/server/src/*.js"
17
+ },
18
+ "keywords": [
19
+ "medusa",
20
+ "plugin",
21
+ "medusa-plugin-other",
22
+ "medusa-plugin",
23
+ "medusa-v2"
24
+ ],
25
+ "scripts": {
26
+ "build": "medusa plugin:build",
27
+ "dev": "medusa plugin:develop",
28
+ "prepublishOnly": "medusa plugin:build"
29
+ },
30
+ "devDependencies": {
31
+ "@medusajs/admin-sdk": "2.7.0",
32
+ "@medusajs/cli": "2.7.0",
33
+ "@medusajs/framework": "2.7.0",
34
+ "@medusajs/icons": "2.7.0",
35
+ "@medusajs/medusa": "2.7.0",
36
+ "@medusajs/test-utils": "2.7.0",
37
+ "@medusajs/ui": "4.0.4",
38
+ "@mikro-orm/cli": "6.4.3",
39
+ "@mikro-orm/core": "6.4.3",
40
+ "@mikro-orm/knex": "6.4.3",
41
+ "@mikro-orm/migrations": "6.4.3",
42
+ "@mikro-orm/postgresql": "6.4.3",
43
+ "@swc/core": "1.5.7",
44
+ "@types/lodash": "^4",
45
+ "@types/node": "^20.0.0",
46
+ "@types/react": "^18.3.2",
47
+ "@types/react-dom": "^18.2.25",
48
+ "awilix": "^8.0.1",
49
+ "pg": "^8.13.0",
50
+ "prop-types": "^15.8.1",
51
+ "react": "^18.2.0",
52
+ "react-dom": "^18.2.0",
53
+ "ts-node": "^10.9.2",
54
+ "typescript": "^5.6.2",
55
+ "vite": "^5.2.11",
56
+ "yalc": "^1.0.0-pre.53"
57
+ },
58
+ "peerDependencies": {
59
+ "@medusajs/admin-sdk": "2.7.0",
60
+ "@medusajs/cli": "2.7.0",
61
+ "@medusajs/framework": "2.7.0",
62
+ "@medusajs/icons": "2.7.0",
63
+ "@medusajs/medusa": "2.7.0",
64
+ "@medusajs/test-utils": "2.7.0",
65
+ "@medusajs/ui": "4.0.3",
66
+ "@mikro-orm/cli": "6.4.3",
67
+ "@mikro-orm/core": "6.4.3",
68
+ "@mikro-orm/knex": "6.4.3",
69
+ "@mikro-orm/migrations": "6.4.3",
70
+ "@mikro-orm/postgresql": "6.4.3",
71
+ "awilix": "^8.0.1",
72
+ "pg": "^8.13.0"
73
+ },
74
+ "engines": {
75
+ "node": ">=20"
76
+ },
77
+ "dependencies": {
78
+ "dayjs": "^1.11.13",
79
+ "lodash": "^4.17.21"
80
+ }
81
+ }