@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,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
async function GET(req, res) {
|
|
5
|
+
res.sendStatus(200);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BsdWdpbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUVDO0FBRk0sS0FBSyxVQUFVLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQy9ELEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsQ0FBQyJ9
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const http_1 = require("@medusajs/framework/http");
|
|
4
|
+
const middlewares_1 = require("./admin/discounts/middlewares");
|
|
5
|
+
const middlewares_2 = require("./store/discounts/middlewares");
|
|
6
|
+
exports.default = (0, http_1.defineMiddlewares)({
|
|
7
|
+
routes: [
|
|
8
|
+
// admin routes
|
|
9
|
+
...middlewares_1.adminDiscountRoutesMiddlewares,
|
|
10
|
+
// store routes
|
|
11
|
+
...middlewares_2.storeDiscountRoutesMiddlewares,
|
|
12
|
+
],
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBQTZEO0FBQzdELCtEQUErRTtBQUMvRSwrREFBK0U7QUFFL0Usa0JBQWUsSUFBQSx3QkFBaUIsRUFBQztJQUMvQixNQUFNLEVBQUU7UUFDTixlQUFlO1FBQ2YsR0FBRyw0Q0FBOEI7UUFFakMsZUFBZTtRQUNmLEdBQUcsNENBQThCO0tBQ2xDO0NBQ0YsQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const api_response_1 = require("../../../../lib/api-response");
|
|
5
|
+
const apply_coupon_1 = require("../../../../workflows/discount/apply-coupon");
|
|
6
|
+
async function POST(req, res) {
|
|
7
|
+
try {
|
|
8
|
+
const { result } = await (0, apply_coupon_1.applyCouponWorkflow)(req.scope).run({
|
|
9
|
+
input: {
|
|
10
|
+
...req.validatedBody,
|
|
11
|
+
customerId: req.auth_context?.actor_id || undefined,
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
if (!result) {
|
|
15
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Failed to create discount price rule", 400));
|
|
16
|
+
}
|
|
17
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(result));
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
console.log("error: ", error);
|
|
21
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error.message, 500));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2Rpc2NvdW50cy9hcHBseS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWFBLG9CQXdCQztBQWhDRCwrREFJc0M7QUFDdEMsOEVBQWtGO0FBRzNFLEtBQUssVUFBVSxJQUFJLENBQ3hCLEdBQXVELEVBQ3ZELEdBQW1CO0lBRW5CLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsa0NBQW1CLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMxRCxLQUFLLEVBQUU7Z0JBQ0wsR0FBRyxHQUFHLENBQUMsYUFBYTtnQkFDcEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxJQUFJLFNBQVM7YUFDcEQ7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLElBQUEsOEJBQWUsRUFDcEIsR0FBRyxFQUNILElBQUEsa0NBQW1CLEVBQUMsc0NBQXNDLEVBQUUsR0FBRyxDQUFDLENBQ2pFLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFBLDhCQUFlLEVBQUMsR0FBRyxFQUFFLElBQUEsb0NBQXFCLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE9BQU8sSUFBQSw4QkFBZSxFQUFDLEdBQUcsRUFBRSxJQUFBLGtDQUFtQixFQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0FBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const api_response_1 = require("../../../../lib/api-response");
|
|
5
|
+
const apply_freebie_1 = require("../../../../workflows/discount/apply-freebie");
|
|
6
|
+
async function POST(req, res) {
|
|
7
|
+
try {
|
|
8
|
+
const { result } = await (0, apply_freebie_1.applyFreebieWorkflow)(req.scope).run({
|
|
9
|
+
input: req.validatedBody,
|
|
10
|
+
});
|
|
11
|
+
if (!result) {
|
|
12
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Failed to create discount price rule", 400));
|
|
13
|
+
}
|
|
14
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(result));
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error.message, 500));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2Rpc2NvdW50cy9hcHBseS1mcmVlYmllL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBYUEsb0JBb0JDO0FBNUJELCtEQUlzQztBQUN0QyxnRkFBb0Y7QUFHN0UsS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBc0QsRUFDdEQsR0FBbUI7SUFFbkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSxvQ0FBb0IsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzNELEtBQUssRUFBRSxHQUFHLENBQUMsYUFBYTtTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLElBQUEsOEJBQWUsRUFDcEIsR0FBRyxFQUNILElBQUEsa0NBQW1CLEVBQUMsc0NBQXNDLEVBQUUsR0FBRyxDQUFDLENBQ2pFLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFBLDhCQUFlLEVBQUMsR0FBRyxFQUFFLElBQUEsb0NBQXFCLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sSUFBQSw4QkFBZSxFQUFDLEdBQUcsRUFBRSxJQUFBLGtDQUFtQixFQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0FBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const api_response_1 = require("../../../../lib/api-response");
|
|
5
|
+
const apply_coupon_1 = require("../../../../workflows/discount/apply-coupon");
|
|
6
|
+
const calculate_coupon_discount_1 = require("../../../../workflows/discount/calculate-coupon-discount");
|
|
7
|
+
async function POST(req, res) {
|
|
8
|
+
try {
|
|
9
|
+
const query = req.scope.resolve("query");
|
|
10
|
+
const { data: priceRules } = await query.graph({
|
|
11
|
+
entity: "discount_price_rule",
|
|
12
|
+
fields: ["*"],
|
|
13
|
+
filters: { auto_apply: true },
|
|
14
|
+
});
|
|
15
|
+
console.log("===> priceRules: ", priceRules);
|
|
16
|
+
const discounts = await Promise.allSettled(priceRules.map(async (priceRule) => {
|
|
17
|
+
let code = null;
|
|
18
|
+
console.log("===> priceRule: ", priceRule);
|
|
19
|
+
if (!priceRule.prefix)
|
|
20
|
+
code = priceRule.discount_code;
|
|
21
|
+
else {
|
|
22
|
+
const { data: codes } = await query.graph({
|
|
23
|
+
entity: "discount_code",
|
|
24
|
+
fields: ["*"],
|
|
25
|
+
filters: {
|
|
26
|
+
$and: [
|
|
27
|
+
{ price_rule_id: { $eq: priceRule.id } },
|
|
28
|
+
{ usage_limit: 0 },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
console.log("===> codes: ", codes);
|
|
33
|
+
if (codes.length > 0)
|
|
34
|
+
code = codes[0].code;
|
|
35
|
+
else
|
|
36
|
+
return { discount: 0 };
|
|
37
|
+
}
|
|
38
|
+
console.log("===> code: ", code);
|
|
39
|
+
const { result: { discount }, } = await (0, calculate_coupon_discount_1.calculateCouponDiscountWorkflow)(req.scope).run({
|
|
40
|
+
input: {
|
|
41
|
+
cart_id: req.validatedBody.cart_id,
|
|
42
|
+
code: code,
|
|
43
|
+
customerId: req.auth_context?.actor_id || undefined,
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
console.log("===> discount <===");
|
|
47
|
+
console.log("===> discount: ", discount);
|
|
48
|
+
return { discount, code };
|
|
49
|
+
}));
|
|
50
|
+
console.log("Something Something");
|
|
51
|
+
let currentDiscount = 0;
|
|
52
|
+
let currentCode = undefined;
|
|
53
|
+
discounts.forEach((discount) => {
|
|
54
|
+
if (discount.status === "fulfilled") {
|
|
55
|
+
if (currentDiscount > 0 && currentDiscount > discount.value.discount) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
currentDiscount = discount.value.discount;
|
|
59
|
+
currentCode = discount.value.code || undefined;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
console.log("===> currentCode: ", currentCode);
|
|
63
|
+
// Fetch the cart and its items
|
|
64
|
+
const { data: carts } = await query.graph({
|
|
65
|
+
entity: "cart",
|
|
66
|
+
fields: ["*", "items.*"],
|
|
67
|
+
filters: { id: req.validatedBody.cart_id },
|
|
68
|
+
});
|
|
69
|
+
const cart = carts[0];
|
|
70
|
+
// Fetch line item adjustments to check for applied coupon code(s)
|
|
71
|
+
const { data: adjustments } = await query.graph({
|
|
72
|
+
entity: "line_item_adjustment",
|
|
73
|
+
fields: ["*"],
|
|
74
|
+
filters: {
|
|
75
|
+
item_id: { $in: cart.items.map((item) => item.id) },
|
|
76
|
+
code: { $ne: null },
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
// Group adjustments by code and sum their amounts
|
|
80
|
+
const codeDiscountMap = {};
|
|
81
|
+
adjustments.forEach((adj) => {
|
|
82
|
+
if (adj.code) {
|
|
83
|
+
codeDiscountMap[adj.code] = (codeDiscountMap[adj.code] || 0) + Math.abs(adj.amount || 0);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
// Find the code with the highest total discount
|
|
87
|
+
let appliedCouponCode = "";
|
|
88
|
+
let appliedCouponDiscount = 0;
|
|
89
|
+
for (const [code, total] of Object.entries(codeDiscountMap)) {
|
|
90
|
+
if (total > appliedCouponDiscount) {
|
|
91
|
+
appliedCouponDiscount = total;
|
|
92
|
+
appliedCouponCode = code;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// If a coupon is already applied and its discount is greater or equal, do not apply auto-applied coupon
|
|
96
|
+
if (appliedCouponCode && appliedCouponDiscount >= currentDiscount) {
|
|
97
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({
|
|
98
|
+
message: "Existing coupon provides better or equal discount. No auto coupon applied.",
|
|
99
|
+
code: appliedCouponCode,
|
|
100
|
+
discount: appliedCouponDiscount,
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
if (currentCode) {
|
|
104
|
+
const { result } = await (0, apply_coupon_1.applyCouponWorkflow)(req.scope).run({
|
|
105
|
+
input: {
|
|
106
|
+
code: currentCode,
|
|
107
|
+
cart_id: req.validatedBody.cart_id,
|
|
108
|
+
customerId: req.auth_context?.actor_id || undefined,
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
if (!result) {
|
|
112
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Failed to apply coupon", 400));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({
|
|
116
|
+
message: currentCode ? "Coupon applied" : "No coupon applied",
|
|
117
|
+
code: currentCode,
|
|
118
|
+
discount: currentDiscount,
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error.message, 500));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2Rpc2NvdW50cy9hdXRvLWFwcGx5L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBY0Esb0JBeUpDO0FBbEtELCtEQUlzQztBQUN0Qyw4RUFBa0Y7QUFDbEYsd0dBQTJHO0FBR3BHLEtBQUssVUFBVSxJQUFJLENBQ3hCLEdBQTJELEVBQzNELEdBQW1CO0lBRW5CLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXpDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzdDLE1BQU0sRUFBRSxxQkFBcUI7WUFDN0IsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ2IsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtTQUM5QixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTdDLE1BQU0sU0FBUyxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FDeEMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7WUFDakMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBRWhCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO2dCQUFFLElBQUksR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO2lCQUNqRCxDQUFDO2dCQUNKLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUN4QyxNQUFNLEVBQUUsZUFBZTtv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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const api_response_1 = require("../../../../../lib/api-response");
|
|
5
|
+
const get_cart_eligible_coupons_1 = require("../../../../../workflows/discount/get-cart-eligible-coupons");
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
try {
|
|
8
|
+
const { cart_id } = req.params;
|
|
9
|
+
const { result } = await (0, get_cart_eligible_coupons_1.getCartEligibleCouponsWorkflow)(req.scope).run({
|
|
10
|
+
input: { cart_id, customerId: req?.auth_context?.actor_id || undefined },
|
|
11
|
+
});
|
|
12
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(result));
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
console.log("error: ", error);
|
|
16
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error.message, 500));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2Rpc2NvdW50cy9jYXJ0LWVsaWdpYmxlLWNvdXBvbnMvW2NhcnRfaWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBWUEsa0JBZ0JDO0FBdkJELGtFQUl5QztBQUN6QywyR0FBNkc7QUFFdEcsS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBK0IsRUFDL0IsR0FBbUI7SUFFbkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFL0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSwwREFBOEIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3JFLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxRQUFRLElBQUksU0FBUyxFQUFFO1NBQ3pFLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSw4QkFBZSxFQUFDLEdBQUcsRUFBRSxJQUFBLG9DQUFxQixFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUEsOEJBQWUsRUFBQyxHQUFHLEVBQUUsSUFBQSxrQ0FBbUIsRUFBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.storeDiscountRoutesMiddlewares = void 0;
|
|
4
|
+
const http_1 = require("@medusajs/framework/http");
|
|
5
|
+
const validators_1 = require("../../admin/discounts/validators");
|
|
6
|
+
exports.storeDiscountRoutesMiddlewares = [
|
|
7
|
+
{
|
|
8
|
+
matcher: "/store/discounts/price-rules",
|
|
9
|
+
methods: ["GET"],
|
|
10
|
+
middlewares: [
|
|
11
|
+
(0, http_1.validateAndTransformQuery)(validators_1.ListDiscountPriceRulesParams, {
|
|
12
|
+
defaults: validators_1.defaultDiscountPriceRuleFields,
|
|
13
|
+
defaultLimit: 10,
|
|
14
|
+
isList: true,
|
|
15
|
+
}),
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
matcher: "/store/discounts/apply",
|
|
20
|
+
method: "POST",
|
|
21
|
+
middlewares: [(0, http_1.validateAndTransformBody)(validators_1.ApplyDiscountInputValidator)],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
matcher: "/store/discounts/auto-apply",
|
|
25
|
+
method: "POST",
|
|
26
|
+
middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AutoApplyDiscountInputValidator)],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
matcher: "/store/discounts/apply-freebie",
|
|
30
|
+
method: "POST",
|
|
31
|
+
middlewares: [(0, http_1.validateAndTransformBody)(validators_1.ApplyFreebieInputValidator)],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
matcher: "/store/discounts/remove",
|
|
35
|
+
method: "POST",
|
|
36
|
+
middlewares: [(0, http_1.validateAndTransformBody)(validators_1.RemoveDiscountInputValidator)],
|
|
37
|
+
},
|
|
38
|
+
///////////////////// OFFERS ON PRODUCT ////////////////////
|
|
39
|
+
{
|
|
40
|
+
matcher: "/store/discounts/offers-on-product/:variant_id",
|
|
41
|
+
method: "GET",
|
|
42
|
+
},
|
|
43
|
+
///////////////////// CART ELIGIBLE COUPONS ////////////////////
|
|
44
|
+
{
|
|
45
|
+
matcher: "/store/discounts/cart-eligible-coupons/:cart_id",
|
|
46
|
+
method: "GET",
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2Rpc2NvdW50cy9taWRkbGV3YXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFJa0M7QUFFbEMsaUVBTzBDO0FBRTdCLFFBQUEsOEJBQThCLEdBQXNCO0lBQy9EO1FBQ0UsT0FBTyxFQUFFLDhCQUE4QjtRQUN2QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDaEIsV0FBVyxFQUFFO1lBQ1gsSUFBQSxnQ0FBeUIsRUFBQyx5Q0FBNEIsRUFBRTtnQkFDdEQsUUFBUSxFQUFFLDJDQUE4QjtnQkFDeEMsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztTQUNIO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSx3QkFBd0I7UUFDakMsTUFBTSxFQUFFLE1BQU07UUFDZCxXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLHdDQUEyQixDQUFDLENBQUM7S0FDckU7SUFDRDtRQUNFLE9BQU8sRUFBRSw2QkFBNkI7UUFDdEMsTUFBTSxFQUFFLE1BQU07UUFDZCxXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLDRDQUErQixDQUFDLENBQUM7S0FDekU7SUFDRDtRQUNFLE9BQU8sRUFBRSxnQ0FBZ0M7UUFDekMsTUFBTSxFQUFFLE1BQU07UUFDZCxXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLHVDQUEwQixDQUFDLENBQUM7S0FDcEU7SUFDRDtRQUNFLE9BQU8sRUFBRSx5QkFBeUI7UUFDbEMsTUFBTSxFQUFFLE1BQU07UUFDZCxXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLHlDQUE0QixDQUFDLENBQUM7S0FDdEU7SUFDRCw0REFBNEQ7SUFDNUQ7UUFDRSxPQUFPLEVBQUUsZ0RBQWdEO1FBQ3pELE1BQU0sRUFBRSxLQUFLO0tBQ2Q7SUFFRCxnRUFBZ0U7SUFDaEU7UUFDRSxPQUFPLEVBQUUsaURBQWlEO1FBQzFELE1BQU0sRUFBRSxLQUFLO0tBQ2Q7Q0FDRixDQUFDIn0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const api_response_1 = require("../../../../../lib/api-response");
|
|
5
|
+
const get_product_offers_1 = require("../../../../../workflows/discount/get-product-offers");
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
try {
|
|
8
|
+
const { variant_id } = req.params;
|
|
9
|
+
const { result } = await (0, get_product_offers_1.calculateProductOfferWorkflow)(req.scope).run({
|
|
10
|
+
input: { variant_id },
|
|
11
|
+
});
|
|
12
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(result));
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
console.log(error);
|
|
16
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error.message, 500));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2Rpc2NvdW50cy9vZmZlcnMtb24tcHJvZHVjdC9bdmFyaWFudF9pZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxrQkFnQkM7QUF2QkQsa0VBSXlDO0FBQ3pDLDZGQUFxRztBQUU5RixLQUFLLFVBQVUsR0FBRyxDQUN2QixHQUErQixFQUMvQixHQUFtQjtJQUVuQixJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUVsQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLGtEQUE2QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDcEUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFO1NBQ3RCLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSw4QkFBZSxFQUFDLEdBQUcsRUFBRSxJQUFBLG9DQUFxQixFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLE9BQU8sSUFBQSw4QkFBZSxFQUFDLEdBQUcsRUFBRSxJQUFBLGtDQUFtQixFQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0FBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const api_response_1 = require("../../../../lib/api-response");
|
|
5
|
+
async function GET(req, res) {
|
|
6
|
+
try {
|
|
7
|
+
const query = req.scope.resolve("query");
|
|
8
|
+
const { data, metadata } = await query.graph({
|
|
9
|
+
entity: "discount_price_rule",
|
|
10
|
+
...req.queryConfig,
|
|
11
|
+
filters: req.filterableFields,
|
|
12
|
+
});
|
|
13
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({ data, metadata }));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
const message = error instanceof Error ? error.message : "An unexpected error occurred";
|
|
17
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(message, 500));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2Rpc2NvdW50cy9wcmljZS1ydWxlcy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLGtCQW1CQztBQTFCRCwrREFJc0M7QUFHL0IsS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBaUUsRUFDakUsR0FBbUI7SUFFbkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFekMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDM0MsTUFBTSxFQUFFLHFCQUFxQjtZQUM3QixHQUFHLEdBQUcsQ0FBQyxXQUFXO1lBQ2xCLE9BQU8sRUFBRSxHQUFHLENBQUMsZ0JBQWdCO1NBQzlCLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSw4QkFBZSxFQUFDLEdBQUcsRUFBRSxJQUFBLG9DQUFxQixFQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sT0FBTyxHQUNYLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDO1FBQzFFLE9BQU8sSUFBQSw4QkFBZSxFQUFDLEdBQUcsRUFBRSxJQUFBLGtDQUFtQixFQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const api_response_1 = require("../../../../lib/api-response");
|
|
5
|
+
const remove_coupon_1 = require("../../../../workflows/discount/remove-coupon");
|
|
6
|
+
async function POST(req, res) {
|
|
7
|
+
try {
|
|
8
|
+
const { result } = await (0, remove_coupon_1.removeCouponWorkflow)(req.scope).run({
|
|
9
|
+
input: req.validatedBody,
|
|
10
|
+
});
|
|
11
|
+
if (!result) {
|
|
12
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Failed to create discount price rule", 400));
|
|
13
|
+
}
|
|
14
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(result));
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
console.log("error: ", error);
|
|
18
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error.message, 500));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2Rpc2NvdW50cy9yZW1vdmUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFhQSxvQkFxQkM7QUE3QkQsK0RBSXNDO0FBQ3RDLGdGQUFvRjtBQUc3RSxLQUFLLFVBQVUsSUFBSSxDQUN4QixHQUF3RCxFQUN4RCxHQUFtQjtJQUVuQixJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLG9DQUFvQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDM0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxhQUFhO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sSUFBQSw4QkFBZSxFQUNwQixHQUFHLEVBQ0gsSUFBQSxrQ0FBbUIsRUFBQyxzQ0FBc0MsRUFBRSxHQUFHLENBQUMsQ0FDakUsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUEsOEJBQWUsRUFBQyxHQUFHLEVBQUUsSUFBQSxvQ0FBcUIsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUIsT0FBTyxJQUFBLDhCQUFlLEVBQUMsR0FBRyxFQUFFLElBQUEsa0NBQW1CLEVBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
async function GET(req, res) {
|
|
5
|
+
res.sendStatus(200);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3BsdWdpbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUVDO0FBRk0sS0FBSyxVQUFVLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQy9ELEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsQ0FBQyJ9
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./workflows"), exports);
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QiJ9
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.config = void 0;
|
|
7
|
+
exports.default = priceRuleStatusUpdates;
|
|
8
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
9
|
+
const moment_1 = __importDefault(require("moment"));
|
|
10
|
+
const discounts_1 = require("../modules/discounts");
|
|
11
|
+
exports.config = {
|
|
12
|
+
name: "price-rule-status-updates",
|
|
13
|
+
// every day at 00:02 AM
|
|
14
|
+
schedule: "0 * * * *",
|
|
15
|
+
// Test: every 1 minute
|
|
16
|
+
// schedule: "* * * * *",
|
|
17
|
+
};
|
|
18
|
+
async function priceRuleStatusUpdates(container) {
|
|
19
|
+
const logger = container.resolve("logger");
|
|
20
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
21
|
+
const discountService = container.resolve(discounts_1.DISCOUNT_MODULE);
|
|
22
|
+
logger.info("Price rule and freebie rule status updates");
|
|
23
|
+
const { data: priceRules } = await query.graph({
|
|
24
|
+
entity: "discount_price_rule",
|
|
25
|
+
fields: ["*"],
|
|
26
|
+
});
|
|
27
|
+
for (const priceRule of priceRules) {
|
|
28
|
+
const { id, starts_at, ends_at, status } = priceRule;
|
|
29
|
+
let updatedStatus = "ACTIVE";
|
|
30
|
+
if (status === "DEACTIVATED") {
|
|
31
|
+
updatedStatus = "DEACTIVATED";
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
const date = (0, moment_1.default)().toDate();
|
|
35
|
+
const startDate = (0, moment_1.default)(starts_at).toDate();
|
|
36
|
+
const endDate = ends_at ? (0, moment_1.default)(ends_at).toDate() : null;
|
|
37
|
+
if (endDate && endDate <= date)
|
|
38
|
+
updatedStatus = "EXPIRED";
|
|
39
|
+
else if (startDate > date)
|
|
40
|
+
updatedStatus = "SCHEDULED";
|
|
41
|
+
}
|
|
42
|
+
console.log(updatedStatus, status);
|
|
43
|
+
if (updatedStatus !== status) {
|
|
44
|
+
logger.info(`Updating price rule ${id} status from ${status} to ${updatedStatus}`);
|
|
45
|
+
await discountService.updateDiscountPriceRules({
|
|
46
|
+
id,
|
|
47
|
+
status: updatedStatus,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const { data: freebieRules } = await query.graph({
|
|
52
|
+
entity: "freebie_rule",
|
|
53
|
+
fields: ["*"],
|
|
54
|
+
});
|
|
55
|
+
for (const freebieRule of freebieRules) {
|
|
56
|
+
const { id, starts_at, ends_at, status } = freebieRule;
|
|
57
|
+
let updatedStatus = "ACTIVE";
|
|
58
|
+
if (status === "DEACTIVATED") {
|
|
59
|
+
updatedStatus = "DEACTIVATED";
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const date = (0, moment_1.default)().toDate();
|
|
63
|
+
const startDate = (0, moment_1.default)(starts_at).toDate();
|
|
64
|
+
const endDate = ends_at ? (0, moment_1.default)(ends_at).toDate() : null;
|
|
65
|
+
if (endDate && endDate < date)
|
|
66
|
+
updatedStatus = "EXPIRED";
|
|
67
|
+
else if (startDate > date)
|
|
68
|
+
updatedStatus = "SCHEDULED";
|
|
69
|
+
}
|
|
70
|
+
if (updatedStatus !== status) {
|
|
71
|
+
logger.info(`Updating freebie rule ${id} status from ${status} to ${updatedStatus}`);
|
|
72
|
+
await discountService.updateFreebieRules({
|
|
73
|
+
id,
|
|
74
|
+
status: updatedStatus,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
logger.info("Price rule and freebie rule status updates completed");
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtcnVsZS1zdGF0dXMtdXBkYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL3ByaWNlLXJ1bGUtc3RhdHVzLXVwZGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBZUEseUNBK0VDO0FBN0ZELHFEQUFzRTtBQUN0RSxvREFBNEI7QUFFNUIsb0RBQXVEO0FBRzFDLFFBQUEsTUFBTSxHQUFHO0lBQ3BCLElBQUksRUFBRSwyQkFBMkI7SUFDakMsd0JBQXdCO0lBQ3hCLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLHVCQUF1QjtJQUN2Qix5QkFBeUI7Q0FDMUIsQ0FBQztBQUVhLEtBQUssVUFBVSxzQkFBc0IsQ0FDbEQsU0FBMEI7SUFFMUIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQWtCLDJCQUFlLENBQUMsQ0FBQztJQUU1RSxNQUFNLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFFMUQsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDN0MsTUFBTSxFQUFFLHFCQUFxQjtRQUM3QixNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUM7S0FDZCxDQUFDLENBQUM7SUFFSCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDckQsSUFBSSxhQUFhLEdBQ2YsUUFBUSxDQUFDO1FBRVgsSUFBSSxNQUFNLEtBQUssYUFBYSxFQUFFLENBQUM7WUFD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
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSuccessResponse = createSuccessResponse;
|
|
4
|
+
exports.createErrorResponse = createErrorResponse;
|
|
5
|
+
exports.sendApiResponse = sendApiResponse;
|
|
6
|
+
/**
|
|
7
|
+
* Creates a success response with standard format
|
|
8
|
+
* @param data Response data
|
|
9
|
+
* @param message Success message (defaults to "OK")
|
|
10
|
+
* @returns Standardized success response
|
|
11
|
+
*/
|
|
12
|
+
function createSuccessResponse(data, message = "OK") {
|
|
13
|
+
return {
|
|
14
|
+
data,
|
|
15
|
+
message,
|
|
16
|
+
status: 200,
|
|
17
|
+
success: true,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Creates an error response with standard format
|
|
22
|
+
* @param message Error message
|
|
23
|
+
* @param status HTTP status code (defaults to 200 as per requirements)
|
|
24
|
+
* @returns Standardized error response
|
|
25
|
+
*/
|
|
26
|
+
function createErrorResponse(message, status) {
|
|
27
|
+
return {
|
|
28
|
+
data: null,
|
|
29
|
+
message,
|
|
30
|
+
status,
|
|
31
|
+
success: false,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Utility function to send a standardized API response
|
|
36
|
+
* @param res Response object
|
|
37
|
+
* @param response Standardized API response
|
|
38
|
+
*/
|
|
39
|
+
function sendApiResponse(res, response) {
|
|
40
|
+
res.status(response.status).json(response);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXJlc3BvbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9hcGktcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsc0RBVUM7QUFRRCxrREFVQztBQU9ELDBDQUVDO0FBM0NEOzs7OztHQUtHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQ25DLElBQU8sRUFDUCxPQUFPLEdBQUcsSUFBSTtJQUVkLE9BQU87UUFDTCxJQUFJO1FBQ0osT0FBTztRQUNQLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLElBQUk7S0FDZCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQ2pDLE9BQWUsRUFDZixNQUFjO0lBRWQsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJO1FBQ1YsT0FBTztRQUNQLE1BQU07UUFDTixPQUFPLEVBQUUsS0FBSztLQUNmLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxHQUFRLEVBQUUsUUFBMEI7SUFDbEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdDLENBQUMifQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toTwoDecimal = exports.ProductType = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.ProductType = zod_1.z.enum(["SINGLE", "FREEBIE", "BYOB", "COMBO"]);
|
|
6
|
+
const toTwoDecimal = (value) => {
|
|
7
|
+
return Number(value.toFixed(2));
|
|
8
|
+
};
|
|
9
|
+
exports.toTwoDecimal = toTwoDecimal;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUF3QjtBQUVYLFFBQUEsV0FBVyxHQUFHLE9BQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBR25FLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDNUMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQztBQUZXLFFBQUEsWUFBWSxnQkFFdkIifQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const discounts_1 = __importDefault(require("../modules/discounts"));
|
|
8
|
+
const customer_1 = __importDefault(require("@medusajs/medusa/customer"));
|
|
9
|
+
exports.default = (0, utils_1.defineLink)({
|
|
10
|
+
linkable: discounts_1.default.linkable.freebieRule,
|
|
11
|
+
isList: true,
|
|
12
|
+
}, {
|
|
13
|
+
linkable: customer_1.default.linkable.customer,
|
|
14
|
+
isList: true,
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXRtLWZyZWViaWUtcnVsZS13aXRoLWN1c3RvbWVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW5rcy9tdG0tZnJlZWJpZS1ydWxlLXdpdGgtY3VzdG9tZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQXVEO0FBQ3ZELHFFQUFrRDtBQUNsRCx5RUFBdUQ7QUFFdkQsa0JBQWUsSUFBQSxrQkFBVSxFQUNyQjtJQUNJLFFBQVEsRUFBRSxtQkFBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXO0lBQzdDLE1BQU0sRUFBRSxJQUFJO0NBQ2YsRUFDRDtJQUNJLFFBQVEsRUFBRSxrQkFBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRO0lBQzFDLE1BQU0sRUFBRSxJQUFJO0NBQ2YsQ0FDSixDQUFBIn0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const product_1 = __importDefault(require("@medusajs/medusa/product"));
|
|
8
|
+
const discounts_1 = __importDefault(require("../modules/discounts"));
|
|
9
|
+
exports.default = (0, utils_1.defineLink)({
|
|
10
|
+
linkable: discounts_1.default.linkable.freebieRule,
|
|
11
|
+
isList: true,
|
|
12
|
+
}, {
|
|
13
|
+
linkable: product_1.default.linkable.productCategory,
|
|
14
|
+
isList: true,
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXRtLWZyZWViaWUtcnVsZS13aXRoLXByb2R1Y3RzLWNhdGVnb3JpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGlua3MvbXRtLWZyZWViaWUtcnVsZS13aXRoLXByb2R1Y3RzLWNhdGVnb3JpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBdUQ7QUFDdkQsdUVBQXFEO0FBRXJELHFFQUFrRDtBQUVsRCxrQkFBZSxJQUFBLGtCQUFVLEVBQ3ZCO0lBQ0UsUUFBUSxFQUFFLG1CQUFjLENBQUMsUUFBUSxDQUFDLFdBQVc7SUFDN0MsTUFBTSxFQUFFLElBQUk7Q0FDYixFQUNEO0lBQ0UsUUFBUSxFQUFFLGlCQUFhLENBQUMsUUFBUSxDQUFDLGVBQWU7SUFDaEQsTUFBTSxFQUFFLElBQUk7Q0FDYixDQUNGLENBQUMifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const product_1 = __importDefault(require("@medusajs/medusa/product"));
|
|
8
|
+
const discounts_1 = __importDefault(require("../modules/discounts"));
|
|
9
|
+
exports.default = (0, utils_1.defineLink)({
|
|
10
|
+
linkable: discounts_1.default.linkable.freebieRule,
|
|
11
|
+
isList: true,
|
|
12
|
+
}, {
|
|
13
|
+
linkable: product_1.default.linkable.productVariant,
|
|
14
|
+
isList: true,
|
|
15
|
+
}, {
|
|
16
|
+
database: { extraColumns: { is_freebie: { type: "boolean" } } },
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXRtLWZyZWViaWUtcnVsZS13aXRoLXByb2R1Y3RzLXZhcmlhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpbmtzL210bS1mcmVlYmllLXJ1bGUtd2l0aC1wcm9kdWN0cy12YXJpYW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUF1RDtBQUN2RCx1RUFBcUQ7QUFFckQscUVBQWtEO0FBRWxELGtCQUFlLElBQUEsa0JBQVUsRUFDdkI7SUFDRSxRQUFRLEVBQUUsbUJBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVztJQUM3QyxNQUFNLEVBQUUsSUFBSTtDQUNiLEVBQ0Q7SUFDRSxRQUFRLEVBQUUsaUJBQWEsQ0FBQyxRQUFRLENBQUMsY0FBYztJQUMvQyxNQUFNLEVBQUUsSUFBSTtDQUNiLEVBQ0Q7SUFDRSxRQUFRLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtDQUNoRSxDQUNGLENBQUMifQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const discounts_1 = __importDefault(require("../modules/discounts"));
|
|
8
|
+
const customer_1 = __importDefault(require("@medusajs/medusa/customer"));
|
|
9
|
+
exports.default = (0, utils_1.defineLink)({
|
|
10
|
+
linkable: discounts_1.default.linkable.discountPriceRule,
|
|
11
|
+
isList: true,
|
|
12
|
+
}, {
|
|
13
|
+
linkable: customer_1.default.linkable.customer,
|
|
14
|
+
isList: true,
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXRtLXByaWNlLXJ1bGUtd2l0aC1jdXN0b21lcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGlua3MvbXRtLXByaWNlLXJ1bGUtd2l0aC1jdXN0b21lcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBdUQ7QUFDdkQscUVBQWtEO0FBQ2xELHlFQUF1RDtBQUV2RCxrQkFBZSxJQUFBLGtCQUFVLEVBQ3JCO0lBQ0ksUUFBUSxFQUFFLG1CQUFjLENBQUMsUUFBUSxDQUFDLGlCQUFpQjtJQUNuRCxNQUFNLEVBQUUsSUFBSTtDQUNmLEVBQ0Q7SUFDSSxRQUFRLEVBQUUsa0JBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUTtJQUMxQyxNQUFNLEVBQUUsSUFBSTtDQUNmLENBQ0osQ0FBQSJ9
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const product_1 = __importDefault(require("@medusajs/medusa/product"));
|
|
8
|
+
const discounts_1 = __importDefault(require("../modules/discounts"));
|
|
9
|
+
exports.default = (0, utils_1.defineLink)({
|
|
10
|
+
linkable: discounts_1.default.linkable.discountPriceRule,
|
|
11
|
+
isList: true,
|
|
12
|
+
}, {
|
|
13
|
+
linkable: product_1.default.linkable.productCategory,
|
|
14
|
+
isList: true,
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXRtLXByaWNlLXJ1bGUtd2l0aC1wcm9kdWN0cy1jYXRlZ29yaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpbmtzL210bS1wcmljZS1ydWxlLXdpdGgtcHJvZHVjdHMtY2F0ZWdvcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUF1RDtBQUN2RCx1RUFBcUQ7QUFFckQscUVBQWtEO0FBRWxELGtCQUFlLElBQUEsa0JBQVUsRUFDdkI7SUFDRSxRQUFRLEVBQUUsbUJBQWMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCO0lBQ25ELE1BQU0sRUFBRSxJQUFJO0NBQ2IsRUFDRDtJQUNFLFFBQVEsRUFBRSxpQkFBYSxDQUFDLFFBQVEsQ0FBQyxlQUFlO0lBQ2hELE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FDRixDQUFDIn0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const product_1 = __importDefault(require("@medusajs/medusa/product"));
|
|
8
|
+
const discounts_1 = __importDefault(require("../modules/discounts"));
|
|
9
|
+
exports.default = (0, utils_1.defineLink)({
|
|
10
|
+
linkable: discounts_1.default.linkable.discountPriceRule,
|
|
11
|
+
isList: true,
|
|
12
|
+
}, {
|
|
13
|
+
linkable: product_1.default.linkable.productVariant,
|
|
14
|
+
isList: true,
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXRtLXByaWNlLXJ1bGUtd2l0aC1wcm9kdWN0cy12YXJpYW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW5rcy9tdG0tcHJpY2UtcnVsZS13aXRoLXByb2R1Y3RzLXZhcmlhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQXVEO0FBQ3ZELHVFQUFxRDtBQUVyRCxxRUFBa0Q7QUFFbEQsa0JBQWUsSUFBQSxrQkFBVSxFQUN2QjtJQUNFLFFBQVEsRUFBRSxtQkFBYyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7SUFDbkQsTUFBTSxFQUFFLElBQUk7Q0FDYixFQUNEO0lBQ0UsUUFBUSxFQUFFLGlCQUFhLENBQUMsUUFBUSxDQUFDLGNBQWM7SUFDL0MsTUFBTSxFQUFFLElBQUk7Q0FDYixDQUNGLENBQUMifQ==
|