@devx-commerce/plugin-discounts-svaraa 0.0.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +20 -0
- package/.medusa/server/src/admin/index.mjs +21 -0
- package/.medusa/server/src/api/admin/discounts/freebie-rules/[id]/route.js +75 -0
- package/.medusa/server/src/api/admin/discounts/freebie-rules/route.js +73 -0
- package/.medusa/server/src/api/admin/discounts/middlewares.js +113 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/[id]/codes/export/route.js +41 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/[id]/codes/route.js +20 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/[id]/route.js +50 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/bulk/[id]/add-more-codes/route.js +34 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/bulk/route.js +33 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/route.js +47 -0
- package/.medusa/server/src/api/admin/discounts/validators.js +649 -0
- package/.medusa/server/src/api/admin/plugin/route.js +7 -0
- package/.medusa/server/src/api/middlewares.js +14 -0
- package/.medusa/server/src/api/store/discounts/apply/route.js +24 -0
- package/.medusa/server/src/api/store/discounts/apply-freebie/route.js +20 -0
- package/.medusa/server/src/api/store/discounts/auto-apply/route.js +125 -0
- package/.medusa/server/src/api/store/discounts/cart-eligible-coupons/[cart_id]/route.js +19 -0
- package/.medusa/server/src/api/store/discounts/middlewares.js +49 -0
- package/.medusa/server/src/api/store/discounts/offers-on-product/[variant_id]/route.js +19 -0
- package/.medusa/server/src/api/store/discounts/price-rules/route.js +20 -0
- package/.medusa/server/src/api/store/discounts/remove/route.js +21 -0
- package/.medusa/server/src/api/store/plugin/route.js +7 -0
- package/.medusa/server/src/index.js +18 -0
- package/.medusa/server/src/jobs/price-rule-status-updates.js +80 -0
- package/.medusa/server/src/lib/api-response.js +42 -0
- package/.medusa/server/src/lib/utils.js +10 -0
- package/.medusa/server/src/links/mtm-freebie-rule-with-customers.js +16 -0
- package/.medusa/server/src/links/mtm-freebie-rule-with-products-categories.js +16 -0
- package/.medusa/server/src/links/mtm-freebie-rule-with-products-variants.js +18 -0
- package/.medusa/server/src/links/mtm-price-rule-with-customers.js +16 -0
- package/.medusa/server/src/links/mtm-price-rule-with-products-categories.js +16 -0
- package/.medusa/server/src/links/mtm-price-rule-with-products-variants.js +16 -0
- package/.medusa/server/src/modules/discounts/index.js +13 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250526174351.js +21 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250527074936.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250527104919.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250527113947.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250529123956.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250602052234.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250602052239.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250602165037.js +16 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250602194000.js +130 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250603053221.js +16 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250604162727.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250604162741.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250604175305.js +15 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250605161922.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250605162116.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250605164908.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250610063653.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250611105345.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250611105356.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250617113007.js +14 -0
- package/.medusa/server/src/modules/discounts/models/discount-code.js +20 -0
- package/.medusa/server/src/modules/discounts/models/freebie-rule.js +27 -0
- package/.medusa/server/src/modules/discounts/models/price-rule.js +53 -0
- package/.medusa/server/src/modules/discounts/service.js +98 -0
- package/.medusa/server/src/workflows/discount/add-more-code-in-price-rule/index.js +28 -0
- package/.medusa/server/src/workflows/discount/apply-coupon/index.js +41 -0
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/apply-coupon-step-backup.js +245 -0
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/apply-coupon-step.js +244 -0
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/generate-adjustment-line-item.js +28 -0
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/validate-coupon-step.js +212 -0
- package/.medusa/server/src/workflows/discount/apply-freebie/index.js +31 -0
- package/.medusa/server/src/workflows/discount/apply-freebie/steps/add-freebie-items-to-cart.js +212 -0
- package/.medusa/server/src/workflows/discount/apply-freebie/steps/remove-freebie-from-cart.js +16 -0
- package/.medusa/server/src/workflows/discount/auto-apply-coupon/index.js +10 -0
- package/.medusa/server/src/workflows/discount/auto-apply-coupon/steps/auto-apply-coupon.js +81 -0
- package/.medusa/server/src/workflows/discount/calculate-coupon-discount/index.js +74 -0
- package/.medusa/server/src/workflows/discount/create-bulk-discount/index.js +46 -0
- package/.medusa/server/src/workflows/discount/create-bulk-discount/steps/add-bulk-codes-to-rule.js +84 -0
- package/.medusa/server/src/workflows/discount/create-discount-code/index.js +10 -0
- package/.medusa/server/src/workflows/discount/create-discount-code/steps/create-discount-code-step.js +20 -0
- package/.medusa/server/src/workflows/discount/create-discount-price-rule/index.js +56 -0
- package/.medusa/server/src/workflows/discount/create-discount-price-rule/steps/create-discount-price-rule-step.js +58 -0
- package/.medusa/server/src/workflows/discount/create-discount-price-rule/steps/validate-customer-exists.js +21 -0
- package/.medusa/server/src/workflows/discount/create-freebie-rule/index.js +44 -0
- package/.medusa/server/src/workflows/discount/create-freebie-rule/steps/create-freebie-rule-step.js +64 -0
- package/.medusa/server/src/workflows/discount/export-codes/index.js +14 -0
- package/.medusa/server/src/workflows/discount/export-codes/steps/export-codes-step.js +116 -0
- package/.medusa/server/src/workflows/discount/get-cart-eligible-coupons/index.js +15 -0
- package/.medusa/server/src/workflows/discount/get-cart-eligible-coupons/step/get-cart-eligible-coupon.js +39 -0
- package/.medusa/server/src/workflows/discount/get-product-offers/index.js +25 -0
- package/.medusa/server/src/workflows/discount/get-product-offers/step/calculate-product-offers.js +53 -0
- package/.medusa/server/src/workflows/discount/index.js +28 -0
- package/.medusa/server/src/workflows/discount/remove-coupon/index.js +18 -0
- package/.medusa/server/src/workflows/discount/remove-coupon/step/remove-coupon-step.js +32 -0
- package/.medusa/server/src/workflows/discount/steps/validate-cart-exists.js +22 -0
- package/.medusa/server/src/workflows/discount/steps/validate-discount-code-exists.js +20 -0
- package/.medusa/server/src/workflows/discount/steps/validate-freebie-code-exists.js +16 -0
- package/.medusa/server/src/workflows/discount/steps/validate-same-prefix-rule-exists.js +20 -0
- package/.medusa/server/src/workflows/discount/update-discount-price-rule/index.js +42 -0
- package/.medusa/server/src/workflows/discount/update-discount-price-rule/steps/update-discount-price-rule-step.js +160 -0
- package/.medusa/server/src/workflows/discount/update-discount-price-rule/steps/validate-discount-price-rule-update-step.js +175 -0
- package/.medusa/server/src/workflows/discount/update-freebie-price-rule/index.js +44 -0
- package/.medusa/server/src/workflows/discount/update-freebie-price-rule/steps/update-freebie-price-rule-step.js +201 -0
- package/.medusa/server/src/workflows/discount/update-freebie-price-rule/steps/validate-freebie-rule-update-step.js +44 -0
- package/.medusa/server/src/workflows/index.js +18 -0
- package/.medusa/server/src/workflows/product/steps/validate-product-category-exists.js +26 -0
- package/.medusa/server/src/workflows/product/steps/validate-product-exists.js +28 -0
- package/.medusa/server/src/workflows/product/steps/validate-product-variant-exists.js +26 -0
- package/.medusa/server/src/workflows/steps/throw-error-step.js +9 -0
- package/README.md +64 -0
- package/package.json +87 -0
|
@@ -0,0 +1,649 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApplyFreebieInputValidator = exports.AdminGetFreebieRulesParams = exports.ListFreebieRulesParams = exports.ListFreebieRulesDirectFields = exports.defaultFreebieRuleFields = exports.UpdateFreebieDetailsInputValidator = exports.UpdateFreebieDetailsBaseSchema = exports.CreateFreebieDetailsInputValidator = exports.AutoApplyDiscountInputValidator = exports.ListDiscountCodeParams = exports.ListDiscountCodeDirectFields = exports.defaultDiscountCodeFields = exports.RemoveDiscountInputValidator = exports.ApplyDiscountInputValidator = exports.AdminGetDiscountPriceRulesParams = exports.ListDiscountPriceRulesParams = exports.ListDiscountPriceRulesParamsFields = exports.ListDiscountPriceRulesDirectFields = exports.defaultDiscountPriceRuleFields = exports.UpdateDiscountPriceRuleInputValidator = exports.UpdateDiscountPriceRuleSchema = exports.AddMoreCodesToDiscountParamsValidator = exports.AddMoreCodesToDiscountParams = exports.AddMoreCodesToDiscountInputValidator = exports.CreateBulkDiscountDetailsInputValidator = exports.CreateDiscountDetailsInputValidator = exports.DiscountApplicableCategoriesType = exports.DiscountApplicableProductsType = exports.DiscountUsageLimitPerCartType = exports.DiscountUsageLimitType = exports.DiscountUsageLimitPerCustomerType = exports.DiscountAppliesOn = exports.DiscountType = exports.DiscountStatus = void 0;
|
|
4
|
+
const common_1 = require("@medusajs/medusa/api/utils/common-validators/common");
|
|
5
|
+
const validators_1 = require("@medusajs/medusa/api/utils/validators");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
// ##################### ENUMS #####################
|
|
8
|
+
exports.DiscountStatus = zod_1.z.enum(["ACTIVE", "EXPIRED", "SCHEDULED"]);
|
|
9
|
+
exports.DiscountType = zod_1.z.enum(["FIXED", "PERCENTAGE", "BXGY", "BXAY"]);
|
|
10
|
+
exports.DiscountAppliesOn = zod_1.z.enum(["MRP", "PRICE"]);
|
|
11
|
+
exports.DiscountUsageLimitPerCustomerType = zod_1.z.enum([
|
|
12
|
+
"ONLY_ONCE",
|
|
13
|
+
"UNLIMITED",
|
|
14
|
+
"SPECIFIC",
|
|
15
|
+
]);
|
|
16
|
+
exports.DiscountUsageLimitType = zod_1.z.enum([
|
|
17
|
+
"ONLY_ONCE",
|
|
18
|
+
"UNLIMITED",
|
|
19
|
+
"SPECIFIC",
|
|
20
|
+
]);
|
|
21
|
+
exports.DiscountUsageLimitPerCartType = zod_1.z.enum([
|
|
22
|
+
"ONLY_ONCE",
|
|
23
|
+
"UNLIMITED",
|
|
24
|
+
"SPECIFIC",
|
|
25
|
+
]);
|
|
26
|
+
exports.DiscountApplicableProductsType = zod_1.z.enum([
|
|
27
|
+
"ALL",
|
|
28
|
+
"SPECIFIC",
|
|
29
|
+
"NONE",
|
|
30
|
+
]);
|
|
31
|
+
exports.DiscountApplicableCategoriesType = zod_1.z.enum([
|
|
32
|
+
"ALL",
|
|
33
|
+
"SPECIFIC",
|
|
34
|
+
"NONE",
|
|
35
|
+
]);
|
|
36
|
+
// ##################### ENUMS #####################
|
|
37
|
+
// Extract the base object schema for reuse
|
|
38
|
+
const CreateDiscountDetailsBaseSchema = zod_1.z.object({
|
|
39
|
+
title: zod_1.z.string().optional(),
|
|
40
|
+
description: zod_1.z.string().optional(),
|
|
41
|
+
type: exports.DiscountType,
|
|
42
|
+
starts_at: zod_1.z.string().datetime(),
|
|
43
|
+
ends_at: zod_1.z.string().datetime().optional(),
|
|
44
|
+
applies_on: exports.DiscountAppliesOn.optional().default(exports.DiscountAppliesOn.Values.PRICE),
|
|
45
|
+
min_order_value: zod_1.z.number().optional(),
|
|
46
|
+
min_order_qty: zod_1.z.number().optional(),
|
|
47
|
+
max_discount: zod_1.z.number().optional(),
|
|
48
|
+
usage_limit_per_customer_type: exports.DiscountUsageLimitPerCustomerType.optional().default(exports.DiscountUsageLimitPerCustomerType.Values.UNLIMITED),
|
|
49
|
+
usage_limit_per_customer_specific: zod_1.z.number().optional(),
|
|
50
|
+
usage_limit: exports.DiscountUsageLimitType.optional().default(exports.DiscountUsageLimitType.Values.UNLIMITED),
|
|
51
|
+
usage_limit_specific: zod_1.z.number().optional(),
|
|
52
|
+
usage_limit_per_cart_type: exports.DiscountUsageLimitPerCartType.optional().default(exports.DiscountUsageLimitPerCartType.Values.ONLY_ONCE),
|
|
53
|
+
usage_limit_per_cart_specific: zod_1.z.number().optional(),
|
|
54
|
+
get_percent: zod_1.z.number().optional(),
|
|
55
|
+
get_flat_discount: zod_1.z.number().optional(),
|
|
56
|
+
visibility: zod_1.z.boolean().default(false),
|
|
57
|
+
only_for_new_customer: zod_1.z.boolean().default(false),
|
|
58
|
+
auto_apply: zod_1.z.boolean().default(false),
|
|
59
|
+
applicable_on_bundle: zod_1.z.boolean().default(false),
|
|
60
|
+
buy_x: zod_1.z.number().optional(),
|
|
61
|
+
get_y: zod_1.z.number().optional(),
|
|
62
|
+
at_y: zod_1.z.number().optional(),
|
|
63
|
+
applicable_product_variant_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
64
|
+
applicable_category_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
65
|
+
applicable_customer_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
66
|
+
code: zod_1.z.string(),
|
|
67
|
+
// id: z.string().optional(),
|
|
68
|
+
// created_by: z.string().optional(),
|
|
69
|
+
// updated_by: z.string().optional(),
|
|
70
|
+
// sales_generated: z.number().optional(),
|
|
71
|
+
});
|
|
72
|
+
const createPriceRuleSuperRefine = (data, ctx) => {
|
|
73
|
+
/* ─────────────────────────────────────────────────────────────
|
|
74
|
+
* 1‒5. Rules you already had (unchanged)
|
|
75
|
+
* ────────────────────────────────────────────────────────────*/
|
|
76
|
+
if (data.usage_limit_per_customer_type ===
|
|
77
|
+
exports.DiscountUsageLimitPerCustomerType.Values.SPECIFIC &&
|
|
78
|
+
(data.usage_limit_per_customer_specific == null ||
|
|
79
|
+
data.usage_limit_per_customer_specific == undefined)) {
|
|
80
|
+
ctx.addIssue({
|
|
81
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
82
|
+
message: "usage_limit_per_customer_specific is required when usage_limit_per_customer_type is SPECIFIC",
|
|
83
|
+
path: ["usage_limit_per_customer_specific"],
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
if (data.usage_limit === exports.DiscountUsageLimitType.Values.SPECIFIC &&
|
|
87
|
+
(data.usage_limit_specific == null ||
|
|
88
|
+
data.usage_limit_specific == undefined)) {
|
|
89
|
+
ctx.addIssue({
|
|
90
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
91
|
+
message: "usage_limit_specific is required when usage_limit is SPECIFIC",
|
|
92
|
+
path: ["usage_limit_specific"],
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (data.usage_limit_per_cart_type ===
|
|
96
|
+
exports.DiscountUsageLimitPerCartType.Values.SPECIFIC &&
|
|
97
|
+
(data.usage_limit_per_cart_specific == null ||
|
|
98
|
+
data.usage_limit_per_cart_specific == undefined)) {
|
|
99
|
+
ctx.addIssue({
|
|
100
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
101
|
+
message: "usage_limit_per_cart_specific is required when usage_limit_per_cart_type is SPECIFIC",
|
|
102
|
+
path: ["usage_limit_per_cart_specific"],
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
if (data.type === exports.DiscountType.Values.FIXED &&
|
|
106
|
+
(data.get_flat_discount == null || data.get_flat_discount == undefined)) {
|
|
107
|
+
ctx.addIssue({
|
|
108
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
109
|
+
message: "get_flat_discount is required for FIXED discount type",
|
|
110
|
+
path: ["get_flat_discount"],
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
if (data.type === exports.DiscountType.Values.PERCENTAGE) {
|
|
114
|
+
if (data.get_percent == null ||
|
|
115
|
+
data.get_percent > 100 ||
|
|
116
|
+
data.get_percent < 0) {
|
|
117
|
+
ctx.addIssue({
|
|
118
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
119
|
+
message: "get_percent is required for PERCENTAGE discount type and must be between 0-100",
|
|
120
|
+
path: ["get_percent"],
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/* ─────────────────────────────────────────────────────────────
|
|
125
|
+
* 6. ends_at > starts_at (if ends_at provided)
|
|
126
|
+
* ────────────────────────────────────────────────────────────*/
|
|
127
|
+
if (data.ends_at &&
|
|
128
|
+
data.starts_at &&
|
|
129
|
+
new Date(data.ends_at) <= new Date(data.starts_at)) {
|
|
130
|
+
ctx.addIssue({
|
|
131
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
132
|
+
message: "ends_at must be later than starts_at",
|
|
133
|
+
path: ["ends_at"],
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/* ─────────────────────────────────────────────────────────────
|
|
137
|
+
* 7. usage_limit_per_cart_type allowed values depend on discount type
|
|
138
|
+
* ────────────────────────────────────────────────────────────*/
|
|
139
|
+
if (data.usage_limit_per_cart_type) {
|
|
140
|
+
if ([
|
|
141
|
+
exports.DiscountType.Values.FIXED,
|
|
142
|
+
exports.DiscountType.Values.BXGY,
|
|
143
|
+
exports.DiscountType.Values.BXAY,
|
|
144
|
+
].includes(data.type)) {
|
|
145
|
+
// For FIXED, BXGY, BXAY: all usage_limit_per_cart_type values allowed
|
|
146
|
+
// No validation needed here
|
|
147
|
+
}
|
|
148
|
+
else if (data.type === exports.DiscountType.Values.PERCENTAGE) {
|
|
149
|
+
// For PERCENTAGE: only ONLY_ONCE allowed
|
|
150
|
+
if (data.usage_limit_per_cart_type !== "ONLY_ONCE") {
|
|
151
|
+
ctx.addIssue({
|
|
152
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
153
|
+
message: "usage_limit_per_cart_type can only be 'ONLY_ONCE' when discount type is PERCENTAGE",
|
|
154
|
+
path: ["usage_limit_per_cart_type"],
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// For any other discount types (if any), disallow usage_limit_per_cart_type
|
|
160
|
+
ctx.addIssue({
|
|
161
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
162
|
+
message: `usage_limit_per_cart_type is not valid for discount type '${data.type}'`,
|
|
163
|
+
path: ["usage_limit_per_cart_type"],
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/* ─────────────────────────────────────────────────────────────
|
|
168
|
+
* 8. BXGY / BXAY must have buy_x, get_y (and at_y for BXAY)
|
|
169
|
+
* ────────────────────────────────────────────────────────────*/
|
|
170
|
+
if (data.type === exports.DiscountType.Values.BXGY) {
|
|
171
|
+
if (data.buy_x == null || data.get_y == null) {
|
|
172
|
+
ctx.addIssue({
|
|
173
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
174
|
+
message: "buy_x and get_y are required for BXGY discounts",
|
|
175
|
+
path: ["buy_x"],
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (data.type === exports.DiscountType.Values.BXAY) {
|
|
180
|
+
if (data.buy_x == null || data.at_y == null) {
|
|
181
|
+
ctx.addIssue({
|
|
182
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
183
|
+
message: "buy_x and at_y are required for BXAY discounts",
|
|
184
|
+
path: ["buy_x"],
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/* ─────────────────────────────────────────────────────────────
|
|
189
|
+
* 9. Product vs Category scope either works
|
|
190
|
+
* ────────────────────────────────────────────────────────────*/
|
|
191
|
+
if (data.applicable_product_variant_ids?.length &&
|
|
192
|
+
data.applicable_category_ids?.length) {
|
|
193
|
+
ctx.addIssue({
|
|
194
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
195
|
+
message: "You should provide either applicable_product_variant_ids or applicable_category_ids",
|
|
196
|
+
path: ["applicable_product_variant_ids"],
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/* ─────────────────────────────────────────────────────────────
|
|
200
|
+
* 10. min / max sanity checks
|
|
201
|
+
* ────────────────────────────────────────────────────────────*/
|
|
202
|
+
if (data.min_order_value != null && data.min_order_value < 0) {
|
|
203
|
+
ctx.addIssue({
|
|
204
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
205
|
+
message: "min_order_value cannot be negative",
|
|
206
|
+
path: ["min_order_value"],
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
if (data.min_order_qty != null && data.min_order_qty < 0) {
|
|
210
|
+
ctx.addIssue({
|
|
211
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
212
|
+
message: "min_order_qty cannot be negative",
|
|
213
|
+
path: ["min_order_qty"],
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
if (data.max_discount != null && data.max_discount < 0) {
|
|
217
|
+
ctx.addIssue({
|
|
218
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
219
|
+
message: "max_discount cannot be negative",
|
|
220
|
+
path: ["max_discount"],
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/* ─────────────────────────────────────────────────────────────
|
|
224
|
+
* 11. Mutual-exclusivity of value fields per discount type
|
|
225
|
+
* ────────────────────────────────────────────────────────────*/
|
|
226
|
+
if (data.type === exports.DiscountType.Values.FIXED) {
|
|
227
|
+
["get_percent", "buy_x", "get_y", "at_y"].forEach((fld) => {
|
|
228
|
+
if (data[fld] != null) {
|
|
229
|
+
ctx.addIssue({
|
|
230
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
231
|
+
message: `${fld} must be null when discount type is FIXED`,
|
|
232
|
+
path: [fld],
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
if (data.type === exports.DiscountType.Values.PERCENTAGE) {
|
|
238
|
+
["get_flat_discount", "buy_x", "get_y", "at_y"].forEach((fld) => {
|
|
239
|
+
if (data[fld] != null) {
|
|
240
|
+
ctx.addIssue({
|
|
241
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
242
|
+
message: `${fld} must be null when discount type is PERCENTAGE`,
|
|
243
|
+
path: [fld],
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
if (data.type === exports.DiscountType.Values.BXGY) {
|
|
249
|
+
["get_percent", "get_flat_discount", "at_y"].forEach((fld) => {
|
|
250
|
+
if (data[fld] != null) {
|
|
251
|
+
ctx.addIssue({
|
|
252
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
253
|
+
message: `${fld} must be null when discount type is BXGY`,
|
|
254
|
+
path: [fld],
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
if (data.type === exports.DiscountType.Values.BXAY) {
|
|
260
|
+
["get_percent", "get_flat_discount", "get_y"].forEach((fld) => {
|
|
261
|
+
if (data[fld] != null) {
|
|
262
|
+
ctx.addIssue({
|
|
263
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
264
|
+
message: `${fld} must be null when discount type is BXAY`,
|
|
265
|
+
path: [fld],
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
return data; // <- always return (even though Zod ignores it)
|
|
271
|
+
};
|
|
272
|
+
const createPriceRulePreprocessor = (input) => {
|
|
273
|
+
if (typeof input === "object" && input !== null && "type" in input) {
|
|
274
|
+
// If usage_limit_per_cart_type is missing, inject default based on type
|
|
275
|
+
if (!("usage_limit_per_cart_type" in input) ||
|
|
276
|
+
input.usage_limit_per_cart_type === undefined) {
|
|
277
|
+
if (["FIXED", "BXGY", "BXAY"].includes(input.type)) {
|
|
278
|
+
return { ...input, usage_limit_per_cart_type: "UNLIMITED" };
|
|
279
|
+
}
|
|
280
|
+
if (input.type === "PERCENTAGE") {
|
|
281
|
+
return { ...input, usage_limit_per_cart_type: "ONLY_ONCE" };
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return input;
|
|
286
|
+
};
|
|
287
|
+
exports.CreateDiscountDetailsInputValidator = zod_1.z.preprocess(createPriceRulePreprocessor, CreateDiscountDetailsBaseSchema
|
|
288
|
+
/* ---------- consolidated refinements ---------- */
|
|
289
|
+
.superRefine(createPriceRuleSuperRefine));
|
|
290
|
+
const CreateBulkDiscountDetailsBaseSchema = CreateDiscountDetailsBaseSchema.omit({ code: true }).extend({
|
|
291
|
+
prefix: zod_1.z
|
|
292
|
+
.string()
|
|
293
|
+
.min(1, { message: "prefix cannot be empty" })
|
|
294
|
+
.describe("String prefix to use when generating each discount code"),
|
|
295
|
+
count: zod_1.z
|
|
296
|
+
.number()
|
|
297
|
+
.int()
|
|
298
|
+
.min(1, { message: "count must be at least 1" })
|
|
299
|
+
.describe("Number of discount codes to generate in bulk"),
|
|
300
|
+
});
|
|
301
|
+
exports.CreateBulkDiscountDetailsInputValidator = zod_1.z.preprocess(createPriceRulePreprocessor, CreateBulkDiscountDetailsBaseSchema.superRefine(createPriceRuleSuperRefine));
|
|
302
|
+
exports.AddMoreCodesToDiscountInputValidator = zod_1.z.object({
|
|
303
|
+
count: zod_1.z
|
|
304
|
+
.number()
|
|
305
|
+
.int()
|
|
306
|
+
.min(1, { message: "count must be at least 1" })
|
|
307
|
+
.describe("Number of discount codes to generate in bulk"),
|
|
308
|
+
});
|
|
309
|
+
exports.AddMoreCodesToDiscountParams = zod_1.z.object({
|
|
310
|
+
id: zod_1.z.string(),
|
|
311
|
+
});
|
|
312
|
+
exports.AddMoreCodesToDiscountParamsValidator = (0, validators_1.createFindParams)({}).merge(exports.AddMoreCodesToDiscountParams);
|
|
313
|
+
const updatePriceRuleSuperRefine = (data, ctx) => {
|
|
314
|
+
// if (data.min_order_qty != null && data.min_order_value != null) {
|
|
315
|
+
// ctx.addIssue({
|
|
316
|
+
// code: z.ZodIssueCode.custom,
|
|
317
|
+
// message: "min_order_qty and min_order_value cannot be used together",
|
|
318
|
+
// path: ["min_order_qty"],
|
|
319
|
+
// });
|
|
320
|
+
// }
|
|
321
|
+
return data;
|
|
322
|
+
};
|
|
323
|
+
// Use the base schema for update, then apply .partial().omit()
|
|
324
|
+
exports.UpdateDiscountPriceRuleSchema = zod_1.z.object({
|
|
325
|
+
title: zod_1.z.string().optional(),
|
|
326
|
+
description: zod_1.z.string().optional(),
|
|
327
|
+
starts_at: zod_1.z.string().datetime().optional(),
|
|
328
|
+
ends_at: zod_1.z.string().datetime().optional(),
|
|
329
|
+
applies_on: exports.DiscountAppliesOn.optional(),
|
|
330
|
+
min_order_value: zod_1.z.number().optional(),
|
|
331
|
+
min_order_qty: zod_1.z.number().optional(),
|
|
332
|
+
max_discount: zod_1.z.number().optional(),
|
|
333
|
+
usage_limit_per_customer_type: exports.DiscountUsageLimitPerCustomerType.optional(),
|
|
334
|
+
usage_limit_per_customer_specific: zod_1.z.number().optional(),
|
|
335
|
+
usage_limit: exports.DiscountUsageLimitType.optional(),
|
|
336
|
+
usage_limit_specific: zod_1.z.number().optional(),
|
|
337
|
+
usage_limit_per_cart_type: exports.DiscountUsageLimitPerCartType.optional(),
|
|
338
|
+
usage_limit_per_cart_specific: zod_1.z.number().optional(),
|
|
339
|
+
is_active: zod_1.z.boolean().optional(),
|
|
340
|
+
get_percent: zod_1.z.number().optional(),
|
|
341
|
+
get_flat_discount: zod_1.z.number().optional(),
|
|
342
|
+
visibility: zod_1.z.boolean().optional(),
|
|
343
|
+
only_for_new_customer: zod_1.z.boolean().optional(),
|
|
344
|
+
auto_apply: zod_1.z.boolean().optional(),
|
|
345
|
+
applicable_on_bundle: zod_1.z.boolean().optional(),
|
|
346
|
+
buy_x: zod_1.z.number().optional(),
|
|
347
|
+
get_y: zod_1.z.number().optional(),
|
|
348
|
+
at_y: zod_1.z.number().optional(),
|
|
349
|
+
applicable_product_variant_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
350
|
+
applicable_category_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
351
|
+
applicable_customer_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
352
|
+
});
|
|
353
|
+
exports.UpdateDiscountPriceRuleInputValidator = exports.UpdateDiscountPriceRuleSchema.superRefine(updatePriceRuleSuperRefine);
|
|
354
|
+
exports.defaultDiscountPriceRuleFields = [
|
|
355
|
+
"id",
|
|
356
|
+
"title",
|
|
357
|
+
"description",
|
|
358
|
+
"type",
|
|
359
|
+
"starts_at",
|
|
360
|
+
"ends_at",
|
|
361
|
+
"status",
|
|
362
|
+
"applies_on",
|
|
363
|
+
"min_order_value",
|
|
364
|
+
"min_order_qty",
|
|
365
|
+
"max_discount",
|
|
366
|
+
"usage_limit_per_customer_type",
|
|
367
|
+
"usage_limit_per_customer_specific",
|
|
368
|
+
"usage_limit",
|
|
369
|
+
"usage_limit_specific",
|
|
370
|
+
"usage_limit_per_cart_type",
|
|
371
|
+
"usage_limit_per_cart_specific",
|
|
372
|
+
"get_percent",
|
|
373
|
+
"get_flat_discount",
|
|
374
|
+
"visibility",
|
|
375
|
+
"only_for_new_customer",
|
|
376
|
+
"auto_apply",
|
|
377
|
+
"applicable_on_bundle",
|
|
378
|
+
"buy_x",
|
|
379
|
+
"get_y",
|
|
380
|
+
"at_y",
|
|
381
|
+
// "applicable_product_variant_ids",
|
|
382
|
+
// "applicable_category_ids",
|
|
383
|
+
"created_at",
|
|
384
|
+
"updated_at",
|
|
385
|
+
"code_count",
|
|
386
|
+
"prefix",
|
|
387
|
+
"discount_code",
|
|
388
|
+
];
|
|
389
|
+
exports.ListDiscountPriceRulesDirectFields = (0, common_1.applyAndAndOrOperators)(zod_1.z.object({
|
|
390
|
+
id: (0, validators_1.createOperatorMap)().optional(),
|
|
391
|
+
title: (0, validators_1.createOperatorMap)().optional(),
|
|
392
|
+
description: (0, validators_1.createOperatorMap)().optional(),
|
|
393
|
+
type: (0, validators_1.createOperatorMap)().optional(),
|
|
394
|
+
starts_at: (0, validators_1.createOperatorMap)().optional(),
|
|
395
|
+
ends_at: (0, validators_1.createOperatorMap)().optional(),
|
|
396
|
+
status: (0, validators_1.createOperatorMap)().optional(),
|
|
397
|
+
applies_on: (0, validators_1.createOperatorMap)().optional(),
|
|
398
|
+
min_order_value: (0, validators_1.createOperatorMap)().optional(),
|
|
399
|
+
min_order_qty: (0, validators_1.createOperatorMap)().optional(),
|
|
400
|
+
max_discount: (0, validators_1.createOperatorMap)().optional(),
|
|
401
|
+
usage_limit_per_customer_type: (0, validators_1.createOperatorMap)().optional(),
|
|
402
|
+
usage_limit_per_customer_specific: (0, validators_1.createOperatorMap)().optional(),
|
|
403
|
+
usage_limit: (0, validators_1.createOperatorMap)().optional(),
|
|
404
|
+
usage_limit_specific: (0, validators_1.createOperatorMap)().optional(),
|
|
405
|
+
usage_limit_per_cart_type: (0, validators_1.createOperatorMap)().optional(),
|
|
406
|
+
usage_limit_per_cart_specific: (0, validators_1.createOperatorMap)().optional(),
|
|
407
|
+
get_percent: (0, validators_1.createOperatorMap)().optional(),
|
|
408
|
+
get_flat_discount: (0, validators_1.createOperatorMap)().optional(),
|
|
409
|
+
visibility: (0, validators_1.createOperatorMap)().optional(),
|
|
410
|
+
only_for_new_customer: (0, validators_1.createOperatorMap)().optional(),
|
|
411
|
+
auto_apply: (0, validators_1.createOperatorMap)().optional(),
|
|
412
|
+
applicable_on_bundle: (0, validators_1.createOperatorMap)().optional(),
|
|
413
|
+
buy_x: (0, validators_1.createOperatorMap)().optional(),
|
|
414
|
+
get_y: (0, validators_1.createOperatorMap)().optional(),
|
|
415
|
+
at_y: (0, validators_1.createOperatorMap)().optional(),
|
|
416
|
+
prefix: (0, validators_1.createOperatorMap)().optional(),
|
|
417
|
+
code_count: (0, validators_1.createOperatorMap)().optional(),
|
|
418
|
+
created_at: (0, validators_1.createOperatorMap)().optional(),
|
|
419
|
+
updated_at: (0, validators_1.createOperatorMap)().optional(),
|
|
420
|
+
}));
|
|
421
|
+
exports.ListDiscountPriceRulesParamsFields = zod_1.z.object({
|
|
422
|
+
q: zod_1.z.string().optional(),
|
|
423
|
+
title: zod_1.z.string().optional(),
|
|
424
|
+
id: zod_1.z.string().optional(),
|
|
425
|
+
});
|
|
426
|
+
exports.ListDiscountPriceRulesParams = (0, validators_1.createFindParams)({
|
|
427
|
+
limit: 10,
|
|
428
|
+
offset: 0,
|
|
429
|
+
order: "-created_at",
|
|
430
|
+
})
|
|
431
|
+
.merge(exports.ListDiscountPriceRulesDirectFields)
|
|
432
|
+
.merge(exports.ListDiscountPriceRulesParamsFields);
|
|
433
|
+
exports.AdminGetDiscountPriceRulesParams = (0, validators_1.createFindParams)({
|
|
434
|
+
offset: 0,
|
|
435
|
+
limit: 50,
|
|
436
|
+
});
|
|
437
|
+
exports.ApplyDiscountInputValidator = zod_1.z.object({
|
|
438
|
+
code: zod_1.z.string(),
|
|
439
|
+
cart_id: zod_1.z.string(),
|
|
440
|
+
customerId: zod_1.z.string().optional(),
|
|
441
|
+
});
|
|
442
|
+
exports.RemoveDiscountInputValidator = zod_1.z.object({
|
|
443
|
+
cart_id: zod_1.z.string(),
|
|
444
|
+
code: zod_1.z.string().optional(),
|
|
445
|
+
});
|
|
446
|
+
exports.defaultDiscountCodeFields = ["code", "usage_count"];
|
|
447
|
+
exports.ListDiscountCodeDirectFields = (0, common_1.applyAndAndOrOperators)(zod_1.z.object({
|
|
448
|
+
code: (0, validators_1.createOperatorMap)().optional(),
|
|
449
|
+
usage_count: (0, validators_1.createOperatorMap)().optional(),
|
|
450
|
+
}));
|
|
451
|
+
exports.ListDiscountCodeParams = (0, validators_1.createFindParams)({
|
|
452
|
+
limit: 10,
|
|
453
|
+
offset: 0,
|
|
454
|
+
order: "-updated_at",
|
|
455
|
+
}).merge(exports.ListDiscountCodeDirectFields);
|
|
456
|
+
exports.AutoApplyDiscountInputValidator = zod_1.z.object({
|
|
457
|
+
cart_id: zod_1.z.string(),
|
|
458
|
+
});
|
|
459
|
+
// ###################################################
|
|
460
|
+
// ##################### FREEBIE #####################
|
|
461
|
+
// ###################################################
|
|
462
|
+
const createFreebieRuleSuperRefine = (data, ctx) => {
|
|
463
|
+
if (data.usage_limit === exports.DiscountUsageLimitType.Values.SPECIFIC &&
|
|
464
|
+
(data.usage_limit_specific == null ||
|
|
465
|
+
data.usage_limit_specific == undefined)) {
|
|
466
|
+
ctx.addIssue({
|
|
467
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
468
|
+
message: "usage_limit_specific is required when usage_limit is SPECIFIC",
|
|
469
|
+
path: ["usage_limit_specific"],
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
if (data.ends_at &&
|
|
473
|
+
data.starts_at &&
|
|
474
|
+
new Date(data.ends_at) <= new Date(data.starts_at)) {
|
|
475
|
+
ctx.addIssue({
|
|
476
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
477
|
+
message: "ends_at must be later than starts_at",
|
|
478
|
+
path: ["ends_at"],
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
if (data.applicable_product_variant_ids?.length &&
|
|
482
|
+
data.applicable_category_ids?.length) {
|
|
483
|
+
ctx.addIssue({
|
|
484
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
485
|
+
message: "You should provide either applicable_product_variant_ids or applicable_category_ids",
|
|
486
|
+
path: ["applicable_product_variant_ids"],
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
if (data.min_order_value != null && data.min_order_value < 0) {
|
|
490
|
+
ctx.addIssue({
|
|
491
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
492
|
+
message: "min_order_value cannot be negative",
|
|
493
|
+
path: ["min_order_value"],
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
if (data.min_order_qty != null && data.min_order_qty < 0) {
|
|
497
|
+
ctx.addIssue({
|
|
498
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
499
|
+
message: "min_order_qty cannot be negative",
|
|
500
|
+
path: ["min_order_qty"],
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
// if (data.min_order_qty != null && data.min_order_value != null) {
|
|
504
|
+
// ctx.addIssue({
|
|
505
|
+
// code: z.ZodIssueCode.custom,
|
|
506
|
+
// message: "min_order_qty and min_order_value cannot be used together",
|
|
507
|
+
// path: ["min_order_qty"],
|
|
508
|
+
// });
|
|
509
|
+
// }
|
|
510
|
+
return data; // <- always return (even though Zod ignores it)
|
|
511
|
+
};
|
|
512
|
+
const CreateFreebieDetailsBaseSchema = zod_1.z.object({
|
|
513
|
+
code: zod_1.z.string(),
|
|
514
|
+
description: zod_1.z.string().optional(),
|
|
515
|
+
starts_at: zod_1.z.string().datetime(),
|
|
516
|
+
ends_at: zod_1.z.string().datetime().optional(),
|
|
517
|
+
usage_limit: exports.DiscountUsageLimitType.optional().default(exports.DiscountUsageLimitType.Values.UNLIMITED),
|
|
518
|
+
usage_limit_specific: zod_1.z.number().optional(),
|
|
519
|
+
usage_limit_per_customer_type: exports.DiscountUsageLimitPerCustomerType.optional().default(exports.DiscountUsageLimitPerCustomerType.Values.UNLIMITED),
|
|
520
|
+
usage_limit_per_customer_specific: zod_1.z.number().optional(),
|
|
521
|
+
applies_on: exports.DiscountAppliesOn.optional().default(exports.DiscountAppliesOn.Values.PRICE),
|
|
522
|
+
min_order_value: zod_1.z.number().optional(),
|
|
523
|
+
min_order_qty: zod_1.z.number().optional(),
|
|
524
|
+
freebie_product_variant_ids: zod_1.z.array(zod_1.z.string()).min(1),
|
|
525
|
+
applicable_on_bundle: zod_1.z.boolean().default(false),
|
|
526
|
+
only_for_new_customer: zod_1.z.boolean().default(false),
|
|
527
|
+
applicable_product_variant_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
528
|
+
applicable_category_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
529
|
+
applicable_customer_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
530
|
+
});
|
|
531
|
+
exports.CreateFreebieDetailsInputValidator = CreateFreebieDetailsBaseSchema.superRefine(createFreebieRuleSuperRefine);
|
|
532
|
+
const updateFreebieRuleSuperRefine = (data, ctx) => {
|
|
533
|
+
// if (data.min_order_qty != null && data.min_order_value != null) {
|
|
534
|
+
// ctx.addIssue({
|
|
535
|
+
// code: z.ZodIssueCode.custom,
|
|
536
|
+
// message: "min_order_qty and min_order_value cannot be used together",
|
|
537
|
+
// path: ["min_order_qty"],
|
|
538
|
+
// });
|
|
539
|
+
// }
|
|
540
|
+
if (data.usage_limit === exports.DiscountUsageLimitType.Values.SPECIFIC &&
|
|
541
|
+
(data.usage_limit_specific == null ||
|
|
542
|
+
data.usage_limit_specific == undefined)) {
|
|
543
|
+
ctx.addIssue({
|
|
544
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
545
|
+
message: "usage_limit_specific is required when usage_limit is SPECIFIC",
|
|
546
|
+
path: ["usage_limit_specific"],
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
if (data.usage_limit_per_customer_type ===
|
|
550
|
+
exports.DiscountUsageLimitPerCustomerType.Values.SPECIFIC &&
|
|
551
|
+
(data.usage_limit_per_customer_specific == null ||
|
|
552
|
+
data.usage_limit_per_customer_specific == undefined)) {
|
|
553
|
+
ctx.addIssue({
|
|
554
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
555
|
+
message: "usage_limit_per_customer_specific is required when usage_limit_per_customer_type is SPECIFIC",
|
|
556
|
+
path: ["usage_limit_per_customer_specific"],
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
if (data.applicable_product_variant_ids?.length &&
|
|
560
|
+
data.applicable_category_ids?.length) {
|
|
561
|
+
ctx.addIssue({
|
|
562
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
563
|
+
message: "You should provide either applicable_product_variant_ids or applicable_category_ids",
|
|
564
|
+
path: ["applicable_product_variant_ids"],
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
return data;
|
|
568
|
+
};
|
|
569
|
+
exports.UpdateFreebieDetailsBaseSchema = zod_1.z.object({
|
|
570
|
+
title: zod_1.z.string().optional(),
|
|
571
|
+
description: zod_1.z.string().optional(),
|
|
572
|
+
starts_at: zod_1.z.string().datetime().optional(),
|
|
573
|
+
ends_at: zod_1.z.string().datetime().optional(),
|
|
574
|
+
is_active: zod_1.z.boolean().optional(),
|
|
575
|
+
usage_limit: exports.DiscountUsageLimitType.optional(),
|
|
576
|
+
usage_limit_specific: zod_1.z.number().optional(),
|
|
577
|
+
usage_limit_per_customer_type: exports.DiscountUsageLimitPerCustomerType.optional(),
|
|
578
|
+
usage_limit_per_customer_specific: zod_1.z.number().optional(),
|
|
579
|
+
applies_on: exports.DiscountAppliesOn.optional(),
|
|
580
|
+
min_order_value: zod_1.z.number().positive().optional(),
|
|
581
|
+
min_order_qty: zod_1.z.number().positive().optional(),
|
|
582
|
+
freebie_product_variant_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
583
|
+
applicable_on_bundle: zod_1.z.boolean().optional(),
|
|
584
|
+
only_for_new_customer: zod_1.z.boolean().optional(),
|
|
585
|
+
applicable_product_variant_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
586
|
+
applicable_category_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
587
|
+
applicable_customer_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
588
|
+
});
|
|
589
|
+
exports.UpdateFreebieDetailsInputValidator = exports.UpdateFreebieDetailsBaseSchema.superRefine(updateFreebieRuleSuperRefine);
|
|
590
|
+
exports.defaultFreebieRuleFields = [
|
|
591
|
+
"id",
|
|
592
|
+
"code",
|
|
593
|
+
"description",
|
|
594
|
+
"starts_at",
|
|
595
|
+
"ends_at",
|
|
596
|
+
"status",
|
|
597
|
+
"applies_on",
|
|
598
|
+
"usage_limit",
|
|
599
|
+
"usage_limit_specific",
|
|
600
|
+
"usage_limit_per_customer_type",
|
|
601
|
+
"usage_limit_per_customer_specific",
|
|
602
|
+
"min_order_value",
|
|
603
|
+
"min_order_qty",
|
|
604
|
+
"only_for_new_customer",
|
|
605
|
+
"applicable_on_bundle",
|
|
606
|
+
"product_variants.*",
|
|
607
|
+
"product_categories.*",
|
|
608
|
+
"created_at",
|
|
609
|
+
"updated_at",
|
|
610
|
+
];
|
|
611
|
+
exports.ListFreebieRulesDirectFields = (0, common_1.applyAndAndOrOperators)(zod_1.z.object({
|
|
612
|
+
id: (0, validators_1.createOperatorMap)().optional(),
|
|
613
|
+
code: (0, validators_1.createOperatorMap)().optional(),
|
|
614
|
+
description: (0, validators_1.createOperatorMap)().optional(),
|
|
615
|
+
starts_at: (0, validators_1.createOperatorMap)().optional(),
|
|
616
|
+
ends_at: (0, validators_1.createOperatorMap)().optional(),
|
|
617
|
+
status: (0, validators_1.createOperatorMap)().optional(),
|
|
618
|
+
applies_on: (0, validators_1.createOperatorMap)().optional(),
|
|
619
|
+
usage_limit: (0, validators_1.createOperatorMap)().optional(),
|
|
620
|
+
usage_limit_specific: (0, validators_1.createOperatorMap)().optional(),
|
|
621
|
+
usage_limit_per_customer_type: (0, validators_1.createOperatorMap)().optional(),
|
|
622
|
+
usage_limit_per_customer_specific: (0, validators_1.createOperatorMap)().optional(),
|
|
623
|
+
min_order_value: (0, validators_1.createOperatorMap)().optional(),
|
|
624
|
+
min_order_qty: (0, validators_1.createOperatorMap)().optional(),
|
|
625
|
+
only_for_new_customer: (0, validators_1.createOperatorMap)().optional(),
|
|
626
|
+
applicable_on_bundle: (0, validators_1.createOperatorMap)().optional(),
|
|
627
|
+
created_at: (0, validators_1.createOperatorMap)().optional(),
|
|
628
|
+
updated_at: (0, validators_1.createOperatorMap)().optional(),
|
|
629
|
+
}));
|
|
630
|
+
const ListFreebieRulesParamsFields = zod_1.z.object({
|
|
631
|
+
q: zod_1.z.string().optional(),
|
|
632
|
+
id: zod_1.z.string().optional(),
|
|
633
|
+
code: zod_1.z.string().optional(),
|
|
634
|
+
});
|
|
635
|
+
exports.ListFreebieRulesParams = (0, validators_1.createFindParams)({
|
|
636
|
+
limit: 10,
|
|
637
|
+
offset: 0,
|
|
638
|
+
order: "-created_at",
|
|
639
|
+
})
|
|
640
|
+
.merge(exports.ListFreebieRulesDirectFields)
|
|
641
|
+
.merge(ListFreebieRulesParamsFields);
|
|
642
|
+
exports.AdminGetFreebieRulesParams = (0, validators_1.createFindParams)();
|
|
643
|
+
exports.ApplyFreebieInputValidator = zod_1.z.object({
|
|
644
|
+
cart_id: zod_1.z.string(),
|
|
645
|
+
});
|
|
646
|
+
// ###################################################
|
|
647
|
+
// ##################### FREEBIE #####################
|
|
648
|
+
// ###################################################
|
|
649
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vZGlzY291bnRzL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0ZBQTZGO0FBQzdGLHNFQUcrQztBQUMvQyw2QkFBd0I7QUFFeEIsb0RBQW9EO0FBRXZDLFFBQUEsY0FBYyxHQUFHLE9BQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFHNUQsUUFBQSxZQUFZLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFHL0QsUUFBQSxpQkFBaUIsR0FBRyxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFHN0MsUUFBQSxpQ0FBaUMsR0FBRyxPQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RELFdBQVc7SUFDWCxXQUFXO0lBQ1gsVUFBVTtDQUNYLENBQUMsQ0FBQztBQUtVLFFBQUEsc0JBQXNCLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQztJQUMzQyxXQUFXO0lBQ1gsV0FBVztJQUNYLFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFHVSxRQUFBLDZCQUE2QixHQUFHLE9BQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEQsV0FBVztJQUNYLFdBQVc7SUFDWCxVQUFVO0NBQ1gsQ0FBQyxDQUFDO0FBS1UsUUFBQSw4QkFBOEIsR0FBRyxPQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25ELEtBQUs7SUFDTCxVQUFVO0lBQ1YsTUFBTTtDQUNQLENBQUMsQ0FBQztBQUlVLFFBQUEsZ0NBQWdDLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRCxLQUFLO0lBQ0wsVUFBVTtJQUNWLE1BQU07Q0FDUCxDQUFDLENBQUM7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
|