@lodashventure/medusa-campaign 0.0.1
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.
- package/.medusa/server/src/admin/index.js +5758 -0
- package/.medusa/server/src/admin/index.mjs +5756 -0
- package/.medusa/server/src/api/admin/flash-sales/[id]/route.js +119 -0
- package/.medusa/server/src/api/admin/flash-sales/route.js +71 -0
- package/.medusa/server/src/api/middlewares.js +27 -0
- package/.medusa/server/src/api/store/campaigns/[id]/route.js +99 -0
- package/.medusa/server/src/api/store/campaigns/route.js +35 -0
- package/.medusa/server/src/links/campaign-type.js +13 -0
- package/.medusa/server/src/modules/custom-campaigns/index.js +13 -0
- package/.medusa/server/src/modules/custom-campaigns/migrations/Migration20250524150901.js +22 -0
- package/.medusa/server/src/modules/custom-campaigns/migrations/Migration20250526010310.js +19 -0
- package/.medusa/server/src/modules/custom-campaigns/migrations/Migration20250529011904.js +14 -0
- package/.medusa/server/src/modules/custom-campaigns/models/custom-campaign-type.js +11 -0
- package/.medusa/server/src/modules/custom-campaigns/models/promotion-usage-limit.js +15 -0
- package/.medusa/server/src/modules/custom-campaigns/service.js +15 -0
- package/.medusa/server/src/modules/custom-campaigns/types/campaign-type.enum.js +8 -0
- package/.medusa/server/src/subscribers/order-placed.js +17 -0
- package/.medusa/server/src/workflows/custom-campaign/createCustomCampaignWorkflow.js +121 -0
- package/.medusa/server/src/workflows/custom-campaign/updateCustomFlashSaleWorkflow.js +115 -0
- package/.medusa/server/src/workflows/custom-campaign/updatePromotionUsageWorkflow.js +38 -0
- package/.medusa/server/src/workflows/hooks/deletePromotionOnCampaignDelete.js +25 -0
- package/README.md +28 -0
- package/package.json +84 -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,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lodashventure/medusa-campaign",
|
|
3
|
+
"version": "0.0.1",
|
|
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
|
+
"./admin": "./.medusa/server/src/admin/index.mjs",
|
|
17
|
+
"./*": "./.medusa/server/src/*.js"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"medusa",
|
|
21
|
+
"plugin",
|
|
22
|
+
"medusa-plugin-other",
|
|
23
|
+
"medusa-plugin",
|
|
24
|
+
"medusa-v2"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "medusa plugin:build",
|
|
28
|
+
"dev": "medusa plugin:develop",
|
|
29
|
+
"prepublishOnly": "medusa plugin:build"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@medusajs/admin-sdk": "2.10.0",
|
|
33
|
+
"@medusajs/cli": "2.10.0",
|
|
34
|
+
"@medusajs/framework": "2.10.0",
|
|
35
|
+
"@medusajs/icons": "^2.10.0",
|
|
36
|
+
"@medusajs/medusa": "2.10.0",
|
|
37
|
+
"@medusajs/test-utils": "2.10.0",
|
|
38
|
+
"@medusajs/ui": "4.0.4",
|
|
39
|
+
"@mikro-orm/cli": "6.4.3",
|
|
40
|
+
"@mikro-orm/core": "6.4.3",
|
|
41
|
+
"@mikro-orm/knex": "6.4.3",
|
|
42
|
+
"@mikro-orm/migrations": "6.4.3",
|
|
43
|
+
"@mikro-orm/postgresql": "6.4.3",
|
|
44
|
+
"@swc/core": "1.5.7",
|
|
45
|
+
"@types/lodash": "^4",
|
|
46
|
+
"@types/node": "^20.0.0",
|
|
47
|
+
"@types/react": "^18.3.2",
|
|
48
|
+
"@types/react-dom": "^18.2.25",
|
|
49
|
+
"awilix": "^8.0.1",
|
|
50
|
+
"pg": "^8.13.0",
|
|
51
|
+
"prop-types": "^15.8.1",
|
|
52
|
+
"react": "^18.2.0",
|
|
53
|
+
"react-dom": "^18.2.0",
|
|
54
|
+
"ts-node": "^10.9.2",
|
|
55
|
+
"typescript": "^5.6.2",
|
|
56
|
+
"vite": "^5.2.11",
|
|
57
|
+
"yalc": "^1.0.0-pre.53"
|
|
58
|
+
},
|
|
59
|
+
"peerDependencies": {
|
|
60
|
+
"@medusajs/admin-sdk": "2.10.0",
|
|
61
|
+
"@medusajs/cli": "2.10.0",
|
|
62
|
+
"@medusajs/framework": "2.10.0",
|
|
63
|
+
"@medusajs/icons": "^2.10.0",
|
|
64
|
+
"@medusajs/medusa": "2.10.0",
|
|
65
|
+
"@medusajs/test-utils": "2.10.0",
|
|
66
|
+
"@medusajs/ui": "4.0.3",
|
|
67
|
+
"@medusajs/js-sdk": "*",
|
|
68
|
+
"@tanstack/react-query": "*",
|
|
69
|
+
"@mikro-orm/cli": "6.4.3",
|
|
70
|
+
"@mikro-orm/core": "6.4.3",
|
|
71
|
+
"@mikro-orm/knex": "6.4.3",
|
|
72
|
+
"@mikro-orm/migrations": "6.4.3",
|
|
73
|
+
"@mikro-orm/postgresql": "6.4.3",
|
|
74
|
+
"awilix": "^8.0.1",
|
|
75
|
+
"pg": "^8.13.0"
|
|
76
|
+
},
|
|
77
|
+
"engines": {
|
|
78
|
+
"node": ">=20"
|
|
79
|
+
},
|
|
80
|
+
"dependencies": {
|
|
81
|
+
"dayjs": "^1.11.13",
|
|
82
|
+
"lodash": "^4.17.21"
|
|
83
|
+
}
|
|
84
|
+
}
|