@devx-commerce/plugin-discounts-svaraa 0.0.2-beta.1 → 0.0.2-beta.11
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/api/admin/discounts/validators.js +16 -1
- package/.medusa/server/src/api/store/discounts/apply/route.js +129 -8
- package/.medusa/server/src/api/store/discounts/auto-apply/route.js +143 -80
- package/.medusa/server/src/api/store/discounts/cart-eligible-coupons/[cart_id]/route.js +23 -3
- package/.medusa/server/src/api/store/discounts/price-rules/route.js +49 -2
- package/.medusa/server/src/api/store/discounts/remove/route.js +25 -2
- package/.medusa/server/src/index.js +2 -1
- package/.medusa/server/src/lib/constant.js +5 -0
- package/.medusa/server/src/lib/helper.js +68 -0
- package/.medusa/server/src/lib/redis-utils.js +33 -0
- package/.medusa/server/src/lib/utils.js +11 -2
- package/.medusa/server/src/modules/discounts/migrations/Migration20250822052209.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250825073038.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250901083847.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250918095658.js +14 -0
- package/.medusa/server/src/modules/discounts/models/price-rule.js +13 -1
- package/.medusa/server/src/modules/discounts/service.js +9 -7
- package/.medusa/server/src/subscribers/index.js +18 -0
- package/.medusa/server/src/subscribers/promocode-subscriber.js +77 -0
- package/.medusa/server/src/workflows/discount/add-more-code-in-price-rule/index.js +3 -3
- package/.medusa/server/src/workflows/discount/apply-coupon/index.js +36 -26
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/apply-coupon-step.js +25 -187
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/generate-adjustment-line-item.js +32 -8
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/validate-coupon-step.js +3 -5
- package/.medusa/server/src/workflows/discount/auto-apply-coupon/steps/auto-apply-coupon.js +157 -87
- package/.medusa/server/src/workflows/discount/calculate-coupon-discount/index.js +36 -32
- package/.medusa/server/src/workflows/discount/calculate-coupon-discount/step/fetch-price-rule-by-code.js +36 -0
- package/.medusa/server/src/workflows/discount/create-discount-price-rule/steps/create-discount-price-rule-step.js +2 -2
- package/.medusa/server/src/workflows/discount/create-subscriber-to-discount-price-rule.js +10 -0
- package/.medusa/server/src/workflows/discount/get-cart-eligible-coupons/index.js +2 -1
- package/.medusa/server/src/workflows/discount/get-cart-eligible-coupons/step/get-cart-eligible-coupon.js +33 -10
- package/.medusa/server/src/workflows/discount/index.js +4 -1
- package/.medusa/server/src/workflows/discount/remove-coupon/index.js +19 -2
- package/.medusa/server/src/workflows/discount/remove-coupon/step/remove-coupon-step.js +45 -26
- package/.medusa/server/src/workflows/discount/update-coupon-code-stats/index.js +12 -0
- package/.medusa/server/src/workflows/discount/update-coupon-code-stats/step/update-coupon-code-stats.js +52 -0
- package/.medusa/server/src/workflows/discount/update-discount-price-rule/index.js +1 -3
- package/package.json +1 -1
|
@@ -5,114 +5,184 @@ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
|
5
5
|
const apply_coupon_1 = require("../../apply-coupon");
|
|
6
6
|
const calculate_coupon_discount_1 = require("../../calculate-coupon-discount");
|
|
7
7
|
const remove_coupon_1 = require("../../remove-coupon");
|
|
8
|
+
const utils_1 = require("../../../../lib/utils");
|
|
9
|
+
const utils_2 = require("@medusajs/framework/utils");
|
|
10
|
+
const redis_utils_1 = require("../../../../lib/redis-utils");
|
|
8
11
|
exports.autoApplyCouponStep = (0, workflows_sdk_1.createStep)("auto-apply-coupon", async (input, { container }) => {
|
|
9
|
-
const query = container.resolve(
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const query = container.resolve(utils_2.ContainerRegistrationKeys.QUERY);
|
|
13
|
+
const cache = container.resolve(utils_2.Modules.CACHE);
|
|
14
|
+
const userId = input.customerId;
|
|
15
|
+
// -----------------------------
|
|
16
|
+
// 1. Fetch cart once (avoid re-query inside workflows)
|
|
17
|
+
// -----------------------------
|
|
18
|
+
const { data: [cart], } = await query.graph({
|
|
19
|
+
entity: "cart",
|
|
20
|
+
fields: [
|
|
21
|
+
"*",
|
|
22
|
+
"items.*",
|
|
23
|
+
"items.adjustments.*",
|
|
24
|
+
"items.variant.*",
|
|
25
|
+
"items.variant.prices.*",
|
|
26
|
+
"items.variant.extended_variant.*",
|
|
27
|
+
"items.variant.extended_variant.party_style_details.*",
|
|
28
|
+
],
|
|
29
|
+
filters: { id: { $eq: input.cart_id } },
|
|
30
|
+
pagination: { take: 1 },
|
|
31
|
+
});
|
|
32
|
+
// -----------------------------
|
|
33
|
+
// 2. Build filters (birthday / anniversary / guest)
|
|
34
|
+
// -----------------------------
|
|
35
|
+
let filters = {};
|
|
36
|
+
if (userId) {
|
|
37
|
+
const { data: customer } = await query.graph({
|
|
38
|
+
entity: "customer",
|
|
39
|
+
fields: ["metadata"],
|
|
40
|
+
filters: { id: userId },
|
|
41
|
+
pagination: { take: 1 },
|
|
42
|
+
});
|
|
43
|
+
const externalId = customer?.[0]?.metadata?.external_id;
|
|
44
|
+
if (externalId) {
|
|
45
|
+
const { data: ext } = await query.graph({
|
|
46
|
+
entity: "extended_customer",
|
|
47
|
+
fields: ["birth_date", "anniversary_date"],
|
|
48
|
+
filters: { external_id: externalId },
|
|
49
|
+
});
|
|
50
|
+
const todayIST = (0, utils_1.getISTMonthDay)(new Date());
|
|
51
|
+
const bday = ext?.[0]?.birth_date;
|
|
52
|
+
const anniv = ext?.[0]?.anniversary_date;
|
|
53
|
+
const isBirthday = bday && (0, utils_1.getISTMonthDay)(bday) === todayIST;
|
|
54
|
+
const isAnniversary = anniv && (0, utils_1.getISTMonthDay)(anniv) === todayIST;
|
|
55
|
+
if (isBirthday || isAnniversary) {
|
|
56
|
+
filters.$or = [
|
|
57
|
+
...(isBirthday ? [{ is_birthday: true }] : []),
|
|
58
|
+
...(isAnniversary ? [{ is_anniversary: true }] : []),
|
|
59
|
+
{ is_birthday: false, is_anniversary: false },
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
filters.is_birthday = false;
|
|
64
|
+
filters.is_anniversary = false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
filters = {
|
|
70
|
+
usage_limit: "UNLIMITED",
|
|
71
|
+
is_birthday: false,
|
|
72
|
+
is_anniversary: false,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// -----------------------------
|
|
76
|
+
// 3. Fetch auto-apply rules (cached with filters)
|
|
77
|
+
// -----------------------------
|
|
78
|
+
const rulesCacheKey = (0, redis_utils_1.buildRedisKey)("discount_price_rule", {
|
|
15
79
|
fields: ["*"],
|
|
16
|
-
filters: { auto_apply: true },
|
|
80
|
+
filters: { ...filters, auto_apply: true },
|
|
17
81
|
});
|
|
18
|
-
|
|
82
|
+
let priceRules = (await cache.get(rulesCacheKey));
|
|
83
|
+
if (!priceRules) {
|
|
84
|
+
const { data } = await query.graph({
|
|
85
|
+
entity: "discount_price_rule",
|
|
86
|
+
fields: ["*"],
|
|
87
|
+
filters: { ...filters, auto_apply: true },
|
|
88
|
+
});
|
|
89
|
+
priceRules = data;
|
|
90
|
+
await cache.set(rulesCacheKey, data, redis_utils_1.CACHE_VALIDATION_TIMES.PRICE_RULE);
|
|
91
|
+
}
|
|
92
|
+
// -----------------------------
|
|
93
|
+
// 4. Pick the best discount among all rules
|
|
94
|
+
// -----------------------------
|
|
95
|
+
const discounts = await Promise.allSettled(priceRules.map(async (rule) => {
|
|
19
96
|
let code = null;
|
|
20
|
-
if (!
|
|
21
|
-
code =
|
|
97
|
+
if (!rule.prefix) {
|
|
98
|
+
code = rule.discount_code;
|
|
99
|
+
}
|
|
22
100
|
else {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
fields: ["*"],
|
|
101
|
+
const codeCacheKey = (0, redis_utils_1.buildRedisKey)("discount_code", {
|
|
102
|
+
fields: ["code"],
|
|
26
103
|
filters: {
|
|
27
104
|
$and: [
|
|
28
|
-
{ price_rule_id: { $eq:
|
|
29
|
-
|
|
105
|
+
{ price_rule_id: { $eq: rule.id } },
|
|
106
|
+
...((rule.usage_limit_per_customer_type === "SPECIFIC" || rule.usage_limit_per_customer_type === "ONLY_ONCE")
|
|
107
|
+
? [{ usage_count: 0 }]
|
|
108
|
+
: []),
|
|
30
109
|
],
|
|
31
110
|
},
|
|
111
|
+
pagination: { take: 1 },
|
|
32
112
|
});
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
113
|
+
let cachedCode = (await cache.get(codeCacheKey));
|
|
114
|
+
if (!cachedCode) {
|
|
115
|
+
const { data } = await query.graph({
|
|
116
|
+
entity: "discount_code",
|
|
117
|
+
fields: ["code"],
|
|
118
|
+
filters: {
|
|
119
|
+
$and: [
|
|
120
|
+
{ price_rule_id: { $eq: rule.id } },
|
|
121
|
+
...((rule.usage_limit_per_customer_type === "SPECIFIC" || rule.usage_limit_per_customer_type === "ONLY_ONCE")
|
|
122
|
+
? [{ usage_count: 0 }]
|
|
123
|
+
: []),
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
pagination: { take: 1,
|
|
127
|
+
order: {
|
|
128
|
+
created_at: "DESC"
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
cachedCode = data;
|
|
133
|
+
await cache.set(codeCacheKey, cachedCode, redis_utils_1.CACHE_VALIDATION_TIMES.DISCOUNT_CODE);
|
|
54
134
|
}
|
|
55
|
-
|
|
56
|
-
|
|
135
|
+
if (cachedCode.length > 0)
|
|
136
|
+
code = cachedCode[0].code;
|
|
57
137
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
entity: "cart",
|
|
62
|
-
fields: ["*", "items.*", "items.adjustments.*"],
|
|
63
|
-
filters: { id: { $eq: input.cart_id } },
|
|
64
|
-
});
|
|
65
|
-
logger.debug("cart.items: " + JSON.stringify(cart.items, null, 2));
|
|
66
|
-
for (const item of cart?.items) {
|
|
67
|
-
for (const adjustmentLineItem of item.adjustments) {
|
|
68
|
-
moreCouponToTest.push(adjustmentLineItem.code);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
logger.debug("moreCouponToTest: " + JSON.stringify(Array.from(new Set(moreCouponToTest)), null, 2));
|
|
72
|
-
for (const coupon of Array.from(new Set(moreCouponToTest))) {
|
|
73
|
-
const { result: { discount }, } = await (0, calculate_coupon_discount_1.calculateCouponDiscountWorkflow)(container).run({
|
|
138
|
+
if (!code)
|
|
139
|
+
return { discount: 0 };
|
|
140
|
+
const { result: { discount, adjustmentLineItems }, } = await (0, calculate_coupon_discount_1.calculateCouponDiscountWorkflow)(container).run({
|
|
74
141
|
input: {
|
|
142
|
+
cart,
|
|
75
143
|
cart_id: input.cart_id,
|
|
76
|
-
code
|
|
77
|
-
customerId:
|
|
144
|
+
code,
|
|
145
|
+
customerId: userId,
|
|
78
146
|
},
|
|
79
|
-
throwOnError: false
|
|
80
147
|
});
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
148
|
+
return { discount, code, adjustmentLineItems };
|
|
149
|
+
}));
|
|
150
|
+
let bestDiscount = 0;
|
|
151
|
+
let bestCode = null;
|
|
152
|
+
let bestAdjustments = [];
|
|
153
|
+
for (const d of discounts) {
|
|
154
|
+
if (d.status === "fulfilled" && d.value.discount > bestDiscount) {
|
|
155
|
+
bestDiscount = d.value.discount;
|
|
156
|
+
bestCode = d.value.code || "";
|
|
157
|
+
bestAdjustments = d.value.adjustmentLineItems;
|
|
84
158
|
}
|
|
85
159
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
160
|
+
// -----------------------------
|
|
161
|
+
// 5. Apply or remove coupon
|
|
162
|
+
// -----------------------------
|
|
163
|
+
if (!bestCode || bestDiscount <= 0) {
|
|
164
|
+
await (0, remove_coupon_1.removeCouponWorkflow)(container).run({ input: { cart_id: input.cart_id } });
|
|
165
|
+
return new workflows_sdk_1.StepResponse({ discount: 0, code: "", isApplied: false });
|
|
90
166
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
167
|
+
const { result } = await (0, apply_coupon_1.applyCouponWorkflow)(container).run({
|
|
168
|
+
input: {
|
|
169
|
+
cart,
|
|
170
|
+
code: bestCode,
|
|
171
|
+
cart_id: input.cart_id,
|
|
172
|
+
customerId: userId,
|
|
173
|
+
calculateCouponDiscountResponse: {
|
|
174
|
+
adjustmentLineItems: bestAdjustments,
|
|
175
|
+
discount: bestDiscount,
|
|
97
176
|
},
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
code: "",
|
|
103
|
-
isApplied: false,
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
return new workflows_sdk_1.StepResponse({
|
|
107
|
-
discount: currentDiscount,
|
|
108
|
-
code: currentCode,
|
|
109
|
-
isApplied: true,
|
|
110
|
-
});
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
if (!result) {
|
|
180
|
+
return new workflows_sdk_1.StepResponse({ discount: 0, code: "", isApplied: false });
|
|
111
181
|
}
|
|
112
182
|
return new workflows_sdk_1.StepResponse({
|
|
113
|
-
discount:
|
|
114
|
-
code:
|
|
115
|
-
isApplied:
|
|
183
|
+
discount: bestDiscount,
|
|
184
|
+
code: bestCode,
|
|
185
|
+
isApplied: true,
|
|
116
186
|
});
|
|
117
187
|
});
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1hcHBseS1jb3Vwb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2F1dG8tYXBwbHktY291cG9uL3N0ZXBzL2F1dG8tYXBwbHktY291cG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE0RTtBQUM1RSxxREFBd0Q7QUFDeEQsK0VBQWlGO0FBQ2pGLHVEQUEwRDtBQUMxRCxpREFBc0Q7QUFDdEQscURBQThFO0FBQzlFLDZEQUFtRjtBQUV0RSxRQUFBLG1CQUFtQixHQUFHLElBQUEsMEJBQVUsRUFDM0MsbUJBQW1CLEVBQ25CLEtBQUssRUFBRSxLQUErQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN2RSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTlDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUE7SUFFL0IsZ0NBQWdDO0lBQ2hDLHVEQUF1RDtJQUN2RCxnQ0FBZ0M7SUFDaEMsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUNiLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFO1lBQ04sR0FBRztZQUNILFNBQVM7WUFDVCxxQkFBcUI7WUFDckIsaUJBQWlCO1lBQ2pCLHdCQUF3QjtZQUN4QixrQ0FBa0M7WUFDbEMsc0RBQXNEO1NBQ3ZEO1FBQ0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUN2QyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxF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
|
|
@@ -2,14 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.calculateCouponDiscountWorkflow = void 0;
|
|
4
4
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
-
const
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const utils_1 = require("../../../lib/utils");
|
|
6
7
|
const throw_error_step_1 = require("../../steps/throw-error-step");
|
|
7
8
|
const apply_coupon_step_1 = require("../apply-coupon/steps/apply-coupon-step");
|
|
8
9
|
const validate_coupon_step_1 = require("../apply-coupon/steps/validate-coupon-step");
|
|
9
|
-
const
|
|
10
|
+
const fetch_price_rule_by_code_1 = require("./step/fetch-price-rule-by-code");
|
|
10
11
|
exports.calculateCouponDiscountWorkflow = (0, workflows_sdk_1.createWorkflow)("calculate-coupon-discount", (input) => {
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
// ----------------------------------
|
|
13
|
+
// 1. Fetch price rule (can later move to Redis cache)
|
|
14
|
+
// ----------------------------------
|
|
15
|
+
const priceRule = (0, fetch_price_rule_by_code_1.fetchPriceRuleByCodeStep)({
|
|
16
|
+
code: input.code,
|
|
13
17
|
fields: [
|
|
14
18
|
"*",
|
|
15
19
|
"product_categories.*",
|
|
@@ -17,59 +21,59 @@ exports.calculateCouponDiscountWorkflow = (0, workflows_sdk_1.createWorkflow)("c
|
|
|
17
21
|
"product_categories.products.id",
|
|
18
22
|
"customers.*",
|
|
19
23
|
],
|
|
20
|
-
|
|
24
|
+
pagination: { take: 1 },
|
|
21
25
|
});
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"items.*",
|
|
27
|
-
"items.variant.*",
|
|
28
|
-
"items.variant.prices.*",
|
|
29
|
-
"items.variant.extended_variant.mrp",
|
|
30
|
-
"items.variant.extended_variant.party_style_details.*",
|
|
31
|
-
],
|
|
32
|
-
filters: { id: input.cart_id },
|
|
33
|
-
options: { throwIfKeyNotFound: true },
|
|
34
|
-
}).config({ name: "get-cart" });
|
|
35
|
-
const cart = (0, workflows_sdk_1.transform)({ carts }, ({ carts }) => {
|
|
36
|
-
let cart = carts[0];
|
|
26
|
+
// ----------------------------------
|
|
27
|
+
// 2. Transform cart (remove freebies)
|
|
28
|
+
// ----------------------------------
|
|
29
|
+
const cart = (0, workflows_sdk_1.transform)({ cart: input.cart }, ({ cart }) => {
|
|
37
30
|
return {
|
|
38
31
|
...cart,
|
|
39
32
|
items: cart?.items?.filter((item) => item?.metadata?.item_type != utils_1.ProductType.Values.FREEBIE) || [],
|
|
40
33
|
};
|
|
41
34
|
});
|
|
42
|
-
|
|
35
|
+
// ----------------------------------
|
|
36
|
+
// 3. Validate coupon
|
|
37
|
+
// ----------------------------------
|
|
43
38
|
const validationResult = (0, validate_coupon_step_1.validateCouponStep)({
|
|
44
|
-
priceRule,
|
|
39
|
+
priceRule: priceRule,
|
|
45
40
|
code: input.code,
|
|
46
|
-
cart,
|
|
41
|
+
cart: cart,
|
|
47
42
|
customerId: input.customerId,
|
|
48
43
|
});
|
|
49
|
-
(0, workflows_sdk_1.when)(validationResult, ({ hasError }) => {
|
|
50
|
-
return hasError;
|
|
51
|
-
}).then(() => {
|
|
44
|
+
(0, workflows_sdk_1.when)(validationResult, ({ hasError }) => hasError).then(() => {
|
|
52
45
|
(0, throw_error_step_1.throwErrorStep)({ errorMessage: validationResult.message }).config({
|
|
53
46
|
name: "throw-error-validate-coupon",
|
|
54
47
|
});
|
|
55
48
|
});
|
|
49
|
+
// ----------------------------------
|
|
50
|
+
// 4. Hook for max cap % (extensible logic)
|
|
51
|
+
// ----------------------------------
|
|
52
|
+
const setDiscountMaxCapPercent = (0, workflows_sdk_1.createHook)("setDiscountMaxCapPercent", { priceRule }, { resultValidator: zod_1.z.object({ discountMaxCapPercent: zod_1.z.number() }) });
|
|
53
|
+
const setDiscountMaxCapPercentResult = setDiscountMaxCapPercent.getResult();
|
|
54
|
+
// ----------------------------------
|
|
55
|
+
// 5. Calculate discount
|
|
56
|
+
// ----------------------------------
|
|
56
57
|
const calculateDiscountResult = (0, apply_coupon_step_1.calculateDiscount)({
|
|
57
|
-
priceRule,
|
|
58
|
+
priceRule: priceRule,
|
|
58
59
|
code: input.code,
|
|
59
|
-
cart,
|
|
60
|
+
cart: cart,
|
|
60
61
|
});
|
|
61
|
-
(0, workflows_sdk_1.when)(calculateDiscountResult, ({ hasError }) => {
|
|
62
|
-
return hasError;
|
|
63
|
-
}).then(() => {
|
|
62
|
+
(0, workflows_sdk_1.when)(calculateDiscountResult, ({ hasError }) => hasError).then(() => {
|
|
64
63
|
(0, throw_error_step_1.throwErrorStep)({ errorMessage: calculateDiscountResult.message }).config({
|
|
65
64
|
name: "throw-error-calculate-discount",
|
|
66
65
|
});
|
|
67
66
|
});
|
|
67
|
+
// ----------------------------------
|
|
68
|
+
// 6. Return result
|
|
69
|
+
// ----------------------------------
|
|
68
70
|
return new workflows_sdk_1.WorkflowResponse({
|
|
69
71
|
discount: calculateDiscountResult.discount,
|
|
70
72
|
isApplied: calculateDiscountResult.isApplied,
|
|
71
73
|
message: calculateDiscountResult.message,
|
|
72
74
|
adjustmentLineItems: calculateDiscountResult.adjustmentLineItems,
|
|
75
|
+
isMaxCapHit: calculateDiscountResult.isMaxCapHit,
|
|
76
|
+
applicablePaymentMode: calculateDiscountResult.applicablePaymentMode,
|
|
73
77
|
});
|
|
74
78
|
});
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2NhbGN1bGF0ZS1jb3Vwb24tZGlzY291bnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBTTJDO0FBQzNDLDZCQUF3QjtBQVF4Qiw4Q0FBaUQ7QUFDakQsbUVBQThEO0FBQzlELCtFQUE0RTtBQUM1RSxxRkFBZ0Y7QUFDaEYsOEVBQTJFO0FBRTlELFFBQUEsK0JBQStCLEdBQUcsSUFBQSw4QkFBYyxFQUMzRCwyQkFBMkIsRUFDM0IsQ0FBQyxLQW9CQSxFQUFFLEVBQUU7SUFDSCxxQ0FBcUM7SUFDckMsc0RBQXNEO0lBQ3RELHFDQUFxQztJQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFBLG1EQUF3QixFQUFDO1FBQ3pDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtRQUNoQixNQUFNLEVBQUU7WUFDTixHQUFHO1lBQ0gsc0JBQXNCO1lBQ3RCLG9CQUFvQjtZQUNwQixnQ0FBZ0M7WUFDaEMsYUFBYTtTQUNkO1FBQ0QsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtLQUN4QixDQUFDLENBQUM7SUFFSCxxQ0FBcUM7SUFDckMsc0NBQXNDO0lBQ3RDLHFDQUFxQztJQUNyQyxNQUFNLElBQUksR0FBRyxJQUFBLHlCQUFTLEVBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1FBQ3hELE9BQU87WUFDTCxHQUFHLElBQUk7WUFDUCxLQUFLLEVBQ0gsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQ2pCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsSUFBSSxtQkFBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ2xFLElBQUksRUFBRTtTQUNWLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILHFDQUFxQztJQUNyQyxxQkFBcUI7SUFDckIscUNBQXFDO0lBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSx5Q0FBa0IsRUFBQztRQUMxQyxTQUFTLEVBQUUsU0FBZ0I7UUFDM0IsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLElBQUksRUFBRSxJQUFXO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtLQUM3QixDQUFDLENBQUM7SUFFSCxJQUFBLG9CQUFJLEVBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQzNELElBQUEsaUNBQWMsRUFBQyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNoRSxJQUFJLEVBQUUsNkJBQTZCO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgscUNBQXFDO0lBQ3JDLDJDQUEyQztJQUMzQyxxQ0FBcUM7SUFDckMsTUFBTSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ3pDLDBCQUEwQixFQUMxQixFQUFFLFNBQVMsRUFBRSxFQUNiLEVBQUUsZUFBZSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQ3JFLENBQUM7SUFFRixNQUFNLDhCQUE4QixHQUFHLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBRTVFLHFDQUFxQztJQUNyQyx3QkFBd0I7SUFDeEIscUNBQXFDO0lBQ3JDLE1BQU0sdUJBQXVCLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQztRQUNoRCxTQUFTLEVBQUUsU0FBZ0I7UUFDM0IsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLElBQUksRUFBRSxJQUFXO0tBQ2xCLENBQUMsQ0FBQztJQUVILElBQUEsb0JBQUksRUFBQyx1QkFBdUIsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDbEUsSUFBQSxpQ0FBYyxFQUFDLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3ZFLElBQUksRUFBRSxnQ0FBZ0M7U0FDdkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxxQ0FBcUM7SUFDckMsbUJBQW1CO0lBQ25CLHFDQUFxQztJQUNyQyxPQUFPLElBQUksZ0NBQWdCLENBQUM7UUFDMUIsUUFBUSxFQUFFLHVCQUF1QixDQUFDLFFBQVE7UUFDMUMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLFNBQVM7UUFDNUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDLE9BQU87UUFDeEMsbUJBQW1CLEVBQUUsdUJBQXVCLENBQUMsbUJBQW1CO1FBQ2hFLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxXQUFXO1FBQ2hELHFCQUFxQixFQUFFLHVCQUF1QixDQUFDLHFCQUFxQjtLQUNyRSxDQUFDLENBQUM7QUFDTCxDQUFDLENBQ0YsQ0FBQyJ9
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchPriceRuleByCodeStep = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
+
const redis_utils_1 = require("../../../../lib/redis-utils");
|
|
7
|
+
/**
|
|
8
|
+
* Fetches a discount price rule by code.
|
|
9
|
+
* Input: { code: string }
|
|
10
|
+
* Output: { priceRule: any }
|
|
11
|
+
*/
|
|
12
|
+
exports.fetchPriceRuleByCodeStep = (0, workflows_sdk_1.createStep)("fetch-price-rule-by-code", async (input, { container }) => {
|
|
13
|
+
// console.time(`fetchPriceRuleByCode-${input.code}`);
|
|
14
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
15
|
+
const cache = container.resolve(utils_1.Modules.CACHE);
|
|
16
|
+
const key = (0, redis_utils_1.buildRedisKey)("discount_price_rule", input);
|
|
17
|
+
// console.time(`fetchPriceRuleByCode-cache-${input.code}`);
|
|
18
|
+
let priceRule = await cache.get(key);
|
|
19
|
+
// console.timeEnd(`fetchPriceRuleByCode-cache-${input.code}`);
|
|
20
|
+
if (priceRule) {
|
|
21
|
+
// console.timeEnd(`fetchPriceRuleByCode-${input.code}`);
|
|
22
|
+
return new workflows_sdk_1.StepResponse(priceRule);
|
|
23
|
+
}
|
|
24
|
+
// console.time(`fetchPriceRuleByCode-db-${input.code}`);
|
|
25
|
+
const { data: priceRules } = await query.graph({
|
|
26
|
+
entity: "discount_price_rule",
|
|
27
|
+
fields: input.fields,
|
|
28
|
+
filters: { discount_codes: { code: input.code } },
|
|
29
|
+
...(input.pagination && { pagination: input.pagination }),
|
|
30
|
+
});
|
|
31
|
+
// console.timeEnd(`fetchPriceRuleByCode-db-${input.code}`);
|
|
32
|
+
await cache.set(key, priceRules[0], redis_utils_1.CACHE_VALIDATION_TIMES.PRICE_RULE);
|
|
33
|
+
// console.timeEnd(`fetchPriceRuleByCode-${input.code}`);
|
|
34
|
+
return new workflows_sdk_1.StepResponse(priceRules[0] || null);
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2gtcHJpY2UtcnVsZS1ieS1jb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9kaXNjb3VudC9jYWxjdWxhdGUtY291cG9uLWRpc2NvdW50L3N0ZXAvZmV0Y2gtcHJpY2UtcnVsZS1ieS1jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUErRTtBQUMvRSxxRUFBNkU7QUFDN0UsNkRBR3FDO0FBR3JDOzs7O0dBSUc7QUFDVSxRQUFBLHdCQUF3QixHQUFHLElBQUEsMEJBQVUsRUFDaEQsMEJBQTBCLEVBQzFCLEtBQUssRUFDSCxLQUF3RSxFQUN4RSxFQUFFLFNBQVMsRUFBRSxFQUNiLEVBQUU7SUFDRixzREFBc0Q7SUFDdEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUvQyxNQUFNLEdBQUcsR0FBRyxJQUFBLDJCQUFhLEVBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEQsNERBQTREO0lBQzVELElBQUksU0FBUyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQywrREFBK0Q7SUFFL0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLHlEQUF5RDtRQUN6RCxPQUFPLElBQUksNEJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQseURBQXlEO0lBQ3pELE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzdDLE1BQU0sRUFBRSxxQkFBcUI7UUFDN0IsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQ3BCLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDakQsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0tBQzFELENBQUMsQ0FBQztJQUNILDREQUE0RDtJQUU1RCxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxvQ0FBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV2RSx5REFBeUQ7SUFDekQsT0FBTyxJQUFJLDRCQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FDRixDQUFDIn0=
|
|
@@ -25,7 +25,7 @@ exports.createDiscountPriceRuleStep = (0, workflows_sdk_1.createStep)("create-di
|
|
|
25
25
|
ends_at: input.ends_at ? new Date(input.ends_at) : null,
|
|
26
26
|
starts_at: new Date(input.starts_at),
|
|
27
27
|
status,
|
|
28
|
-
code_count: input.prefix ? 0 : 1,
|
|
28
|
+
code_count: input.prefix ? 0 : input.code_count || 1,
|
|
29
29
|
applies_on_components: applies_on_components && applies_on_components.length > 0
|
|
30
30
|
? applies_on_components[0]
|
|
31
31
|
: null,
|
|
@@ -59,4 +59,4 @@ exports.createDiscountPriceRuleStep = (0, workflows_sdk_1.createStep)("create-di
|
|
|
59
59
|
const link = container.resolve("link");
|
|
60
60
|
await link.delete({ [discounts_1.DISCOUNT_MODULE]: { discount_price_rule_id: id } });
|
|
61
61
|
});
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWRpc2NvdW50LXByaWNlLXJ1bGUtc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZGlzY291bnQvY3JlYXRlLWRpc2NvdW50LXByaWNlLXJ1bGUvc3RlcHMvY3JlYXRlLWRpc2NvdW50LXByaWNlLXJ1bGUtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBb0Q7QUFDcEQscUVBQTZFO0FBRzdFLDZEQUFnRTtBQU9uRCxRQUFBLDJCQUEyQixHQUFHLElBQUEsMEJBQVUsRUFDbkQsNEJBQTRCLEVBQzVCLEtBQUssRUFBRSxLQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN4Qyw4RUFBOEU7SUFDOUUsTUFBTSxFQUNKLEtBQUssRUFDTCx1QkFBdUIsRUFDdkIsOEJBQThCLEVBQzlCLHVCQUF1QixFQUN2QixHQUFHLGNBQWMsRUFDbEIsR0FBRyxLQUFLLENBQUM7SUFFVixNQUFNLHdCQUF3QixHQUM1QixTQUFTLENBQUMsT0FBTyxDQUFDLDJCQUFlLENBQUMsQ0FBQztJQUVyQyxJQUFJLE1BQU0sR0FBdUMsUUFBUSxDQUFDO0lBRTFELE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRTlELElBQUksTUFBTSxJQUFJLE1BQU0sR0FBRyxHQUFHO1FBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztTQUMxQyxJQUFJLFFBQVEsR0FBRyxHQUFHO1FBQUUsTUFBTSxHQUFHLFdBQVcsQ0FBQzs7UUFDekMsTUFBTSxH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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSubScriberToDiscountPriceRuleWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const create_discount_price_rule_step_1 = require("./create-discount-price-rule/steps/create-discount-price-rule-step");
|
|
6
|
+
exports.createSubScriberToDiscountPriceRuleWorkflow = (0, workflows_sdk_1.createWorkflow)("create-discount-price-rule-workflow", (input) => {
|
|
7
|
+
const discountCode = (0, create_discount_price_rule_step_1.createDiscountPriceRuleStep)(input);
|
|
8
|
+
return new workflows_sdk_1.WorkflowResponse(discountCode);
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN1YnNjcmliZXItdG8tZGlzY291bnQtcHJpY2UtcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZGlzY291bnQvY3JlYXRlLXN1YnNjcmliZXItdG8tZGlzY291bnQtcHJpY2UtcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFHMkM7QUFDM0Msd0hBQWdIO0FBR25HLFFBQUEsMkNBQTJDLEdBQUcsSUFBQSw4QkFBYyxFQUN2RSxxQ0FBcUMsRUFDckMsQ0FBQyxLQUE2QixFQUFFLEVBQUU7SUFDaEMsTUFBTSxZQUFZLEdBQUssSUFBQSw2REFBMkIsRUFBQyxLQUFLLENBQUMsQ0FBQTtJQUN6RCxPQUFPLElBQUksZ0NBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUNGLENBQUEifQ==
|
|
@@ -9,7 +9,8 @@ exports.getCartEligibleCouponsWorkflow = (0, workflows_sdk_1.createWorkflow)("ge
|
|
|
9
9
|
const getCartEligibleCoupons = (0, get_cart_eligible_coupon_1.getCartEligibleCouponsStep)({
|
|
10
10
|
cart_id: input.cart_id,
|
|
11
11
|
customerId: input.customerId,
|
|
12
|
+
cart: input.cart,
|
|
12
13
|
});
|
|
13
14
|
return new workflows_sdk_1.WorkflowResponse(getCartEligibleCoupons);
|
|
14
15
|
});
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2dldC1jYXJ0LWVsaWdpYmxlLWNvdXBvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSTJDO0FBRTNDLHdFQUFtRTtBQUNuRSw4RUFBNkU7QUFRaEUsUUFBQSw4QkFBOEIsR0FBRyxJQUFBLDhCQUFjLEVBQzFELDJCQUEyQixFQUMzQixDQUFDLEtBbUJBLEVBQUUsRUFBRTtJQUNILElBQUEseUNBQWtCLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFL0MsTUFBTSxzQkFBc0IsR0FBRyxJQUFBLHFEQUEwQixFQUFDO1FBQ3hELE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7UUFDNUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0tBQ2pCLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3RELENBQUMsQ0FDRixDQUFDIn0=
|
|
@@ -6,41 +6,64 @@ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
|
6
6
|
const calculate_coupon_discount_1 = require("../../calculate-coupon-discount");
|
|
7
7
|
exports.getCartEligibleCouponsStep = (0, workflows_sdk_1.createStep)("get-cart-eligible-coupons-step", async (input, { container }) => {
|
|
8
8
|
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
9
|
+
// 1. Fetch price rules
|
|
9
10
|
const { data: priceRules } = await query.graph({
|
|
10
11
|
entity: "discount_price_rule",
|
|
11
|
-
fields: [
|
|
12
|
+
fields: [
|
|
13
|
+
"*",
|
|
14
|
+
"product_variants.*",
|
|
15
|
+
"product_categories.*",
|
|
16
|
+
"product_categories.products.*",
|
|
17
|
+
],
|
|
12
18
|
filters: {
|
|
13
19
|
$and: [
|
|
14
20
|
{ visibility: true },
|
|
15
21
|
{ prefix: { $eq: null } },
|
|
16
22
|
{ status: "ACTIVE" },
|
|
17
|
-
]
|
|
23
|
+
],
|
|
18
24
|
},
|
|
19
25
|
});
|
|
26
|
+
// 2. Evaluate discounts
|
|
20
27
|
const discounts = await Promise.allSettled(priceRules.map(async (priceRule) => {
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
const code = priceRule.discount_code || undefined;
|
|
29
|
+
if (!code) {
|
|
30
|
+
return {
|
|
31
|
+
discount: 0,
|
|
32
|
+
code,
|
|
33
|
+
priceRule,
|
|
34
|
+
errorMessage: "Coupon code is required",
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const { result, errors } = await (0, calculate_coupon_discount_1.calculateCouponDiscountWorkflow)(container).run({
|
|
23
38
|
input: {
|
|
24
39
|
cart_id: input.cart_id,
|
|
25
|
-
|
|
40
|
+
cart: input.cart,
|
|
41
|
+
code,
|
|
26
42
|
customerId: input.customerId,
|
|
27
43
|
},
|
|
28
44
|
throwOnError: false,
|
|
29
45
|
});
|
|
30
46
|
let errorMessage = "";
|
|
31
|
-
if (!discount || errors?.[0]?.error?.message) {
|
|
32
|
-
errorMessage =
|
|
47
|
+
if (!result?.discount || errors?.[0]?.error?.message) {
|
|
48
|
+
errorMessage =
|
|
49
|
+
errors?.[0]?.error?.message ||
|
|
50
|
+
"Cart is not eligible for this coupon";
|
|
33
51
|
}
|
|
34
|
-
return {
|
|
52
|
+
return {
|
|
53
|
+
discount: result?.discount || 0,
|
|
54
|
+
code,
|
|
55
|
+
priceRule,
|
|
56
|
+
errorMessage,
|
|
57
|
+
};
|
|
35
58
|
}));
|
|
36
59
|
function isFulfilledWithPositiveDiscount(r) {
|
|
37
|
-
// after `status === "fulfilled"` narrows, `r.value` is safe to touch
|
|
38
60
|
return r.status === "fulfilled";
|
|
39
61
|
}
|
|
62
|
+
// 4. Sort eligible rules by discount amount
|
|
40
63
|
const eligiblePriceRules = discounts
|
|
41
64
|
.filter(isFulfilledWithPositiveDiscount)
|
|
42
65
|
// @ts-ignore
|
|
43
66
|
.map(r => r.value).sort((a, b) => b.discount - a.discount);
|
|
44
67
|
return new workflows_sdk_1.StepResponse(eligiblePriceRules);
|
|
45
68
|
});
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNhcnQtZWxpZ2libGUtY291cG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9kaXNjb3VudC9nZXQtY2FydC1lbGlnaWJsZS1jb3Vwb25zL3N0ZXAvZ2V0LWNhcnQtZWxpZ2libGUtY291cG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUFzRTtBQUN0RSxxRUFBNkU7QUFHN0UsK0VBQWtGO0FBZXJFLFFBQUEsMEJBQTBCLEdBQUcsSUFBQSwwQkFBVSxFQUNsRCxnQ0FBZ0MsRUFDaEMsS0FBSyxFQUNILEtBbUJDLEVBQ0QsRUFBRSxTQUFTLEVBQUUsRUFDYixFQUFFO0lBQ0YsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSx1QkFBdUI7SUFDdkIsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDN0MsTUFBTSxFQUFFLHFCQUFxQjtRQUM3QixNQUFNLEVBQUU7WUFDTixHQUFHO1lBQ0gsb0JBQW9CO1lBQ3BCLHNCQUFzQjtZQUN0QiwrQkFBK0I7U0FDaEM7UUFDRCxPQUFPLEVBQUU7WUFDUCxJQUFJLEVBQUU7Z0JBQ0osRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO2dCQUNwQixFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDekIsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO2FBQ3JCO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCx3QkFBd0I7SUFDeEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUN4QyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRTtRQUNqQyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQztRQUVsRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPO2dCQUNMLFFBQVEsRUFBRSxDQUFDO2dCQUNYLElBQUk7Z0JBQ0osU0FBUztnQkFDVCxZQUFZLEVBQUUseUJBQXlCO2FBQ3hDLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FDdEIsTUFBTSxJQUFBLDJEQUErQixFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNuRCxLQUFLLEVBQUU7Z0JBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLElBQUk7Z0JBQ0osVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO2FBQzdCO1lBQ0QsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO1FBRUwsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNyRCxZQUFZO2dCQUNWLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPO29CQUMzQixzQ0FBc0MsQ0FBQztRQUMzQyxDQUFDO1FBRUQsT0FBTztZQUNMLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxJQUFJLENBQUM7WUFDL0IsSUFBSTtZQUNKLFNBQVM7WUFDVCxZQUFZO1NBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFFRixTQUFTLCtCQUErQixDQUN0QyxDQUF1QztRQUV2QyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsTUFBTSxrQkFBa0IsR0FBcUIsU0FBUztTQUNuRCxNQUFNLENBQUMsK0JBQStCLENBQUM7UUFDeEMsYUFBYTtTQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU3RCxPQUFPLElBQUksNEJBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FDRixDQUFDIn0=
|
|
@@ -25,4 +25,7 @@ __exportStar(require("./create-freebie-rule"), exports);
|
|
|
25
25
|
__exportStar(require("./update-freebie-price-rule"), exports);
|
|
26
26
|
__exportStar(require("./create-discount-price-rule"), exports);
|
|
27
27
|
__exportStar(require("./update-discount-price-rule"), exports);
|
|
28
|
-
|
|
28
|
+
__exportStar(require("./update-discount-price-rule"), exports);
|
|
29
|
+
__exportStar(require("./update-coupon-code-stats"), exports);
|
|
30
|
+
__exportStar(require("./remove-coupon"), exports);
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBK0I7QUFDL0Isc0RBQW9DO0FBQ3BDLGtEQUFnQztBQUNoQyx1REFBcUM7QUFDckMseURBQXVDO0FBQ3ZDLGdFQUE4QztBQUM5QyxpREFBK0I7QUFDL0Isd0RBQXNDO0FBQ3RDLDhEQUE0QztBQUM1QywrREFBNkM7QUFDN0MsK0RBQTZDO0FBQzdDLCtEQUE2QztBQUM3Qyw2REFBMkM7QUFDM0Msa0RBQStCIn0=
|