@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.
Files changed (105) hide show
  1. package/.medusa/server/src/admin/index.js +20 -0
  2. package/.medusa/server/src/admin/index.mjs +21 -0
  3. package/.medusa/server/src/api/admin/discounts/freebie-rules/[id]/route.js +75 -0
  4. package/.medusa/server/src/api/admin/discounts/freebie-rules/route.js +73 -0
  5. package/.medusa/server/src/api/admin/discounts/middlewares.js +113 -0
  6. package/.medusa/server/src/api/admin/discounts/price-rules/[id]/codes/export/route.js +41 -0
  7. package/.medusa/server/src/api/admin/discounts/price-rules/[id]/codes/route.js +20 -0
  8. package/.medusa/server/src/api/admin/discounts/price-rules/[id]/route.js +50 -0
  9. package/.medusa/server/src/api/admin/discounts/price-rules/bulk/[id]/add-more-codes/route.js +34 -0
  10. package/.medusa/server/src/api/admin/discounts/price-rules/bulk/route.js +33 -0
  11. package/.medusa/server/src/api/admin/discounts/price-rules/route.js +47 -0
  12. package/.medusa/server/src/api/admin/discounts/validators.js +649 -0
  13. package/.medusa/server/src/api/admin/plugin/route.js +7 -0
  14. package/.medusa/server/src/api/middlewares.js +14 -0
  15. package/.medusa/server/src/api/store/discounts/apply/route.js +24 -0
  16. package/.medusa/server/src/api/store/discounts/apply-freebie/route.js +20 -0
  17. package/.medusa/server/src/api/store/discounts/auto-apply/route.js +125 -0
  18. package/.medusa/server/src/api/store/discounts/cart-eligible-coupons/[cart_id]/route.js +19 -0
  19. package/.medusa/server/src/api/store/discounts/middlewares.js +49 -0
  20. package/.medusa/server/src/api/store/discounts/offers-on-product/[variant_id]/route.js +19 -0
  21. package/.medusa/server/src/api/store/discounts/price-rules/route.js +20 -0
  22. package/.medusa/server/src/api/store/discounts/remove/route.js +21 -0
  23. package/.medusa/server/src/api/store/plugin/route.js +7 -0
  24. package/.medusa/server/src/index.js +18 -0
  25. package/.medusa/server/src/jobs/price-rule-status-updates.js +80 -0
  26. package/.medusa/server/src/lib/api-response.js +42 -0
  27. package/.medusa/server/src/lib/utils.js +10 -0
  28. package/.medusa/server/src/links/mtm-freebie-rule-with-customers.js +16 -0
  29. package/.medusa/server/src/links/mtm-freebie-rule-with-products-categories.js +16 -0
  30. package/.medusa/server/src/links/mtm-freebie-rule-with-products-variants.js +18 -0
  31. package/.medusa/server/src/links/mtm-price-rule-with-customers.js +16 -0
  32. package/.medusa/server/src/links/mtm-price-rule-with-products-categories.js +16 -0
  33. package/.medusa/server/src/links/mtm-price-rule-with-products-variants.js +16 -0
  34. package/.medusa/server/src/modules/discounts/index.js +13 -0
  35. package/.medusa/server/src/modules/discounts/migrations/Migration20250526174351.js +21 -0
  36. package/.medusa/server/src/modules/discounts/migrations/Migration20250527074936.js +14 -0
  37. package/.medusa/server/src/modules/discounts/migrations/Migration20250527104919.js +14 -0
  38. package/.medusa/server/src/modules/discounts/migrations/Migration20250527113947.js +14 -0
  39. package/.medusa/server/src/modules/discounts/migrations/Migration20250529123956.js +14 -0
  40. package/.medusa/server/src/modules/discounts/migrations/Migration20250602052234.js +14 -0
  41. package/.medusa/server/src/modules/discounts/migrations/Migration20250602052239.js +14 -0
  42. package/.medusa/server/src/modules/discounts/migrations/Migration20250602165037.js +16 -0
  43. package/.medusa/server/src/modules/discounts/migrations/Migration20250602194000.js +130 -0
  44. package/.medusa/server/src/modules/discounts/migrations/Migration20250603053221.js +16 -0
  45. package/.medusa/server/src/modules/discounts/migrations/Migration20250604162727.js +14 -0
  46. package/.medusa/server/src/modules/discounts/migrations/Migration20250604162741.js +14 -0
  47. package/.medusa/server/src/modules/discounts/migrations/Migration20250604175305.js +15 -0
  48. package/.medusa/server/src/modules/discounts/migrations/Migration20250605161922.js +14 -0
  49. package/.medusa/server/src/modules/discounts/migrations/Migration20250605162116.js +14 -0
  50. package/.medusa/server/src/modules/discounts/migrations/Migration20250605164908.js +14 -0
  51. package/.medusa/server/src/modules/discounts/migrations/Migration20250610063653.js +14 -0
  52. package/.medusa/server/src/modules/discounts/migrations/Migration20250611105345.js +14 -0
  53. package/.medusa/server/src/modules/discounts/migrations/Migration20250611105356.js +14 -0
  54. package/.medusa/server/src/modules/discounts/migrations/Migration20250617113007.js +14 -0
  55. package/.medusa/server/src/modules/discounts/models/discount-code.js +20 -0
  56. package/.medusa/server/src/modules/discounts/models/freebie-rule.js +27 -0
  57. package/.medusa/server/src/modules/discounts/models/price-rule.js +53 -0
  58. package/.medusa/server/src/modules/discounts/service.js +98 -0
  59. package/.medusa/server/src/workflows/discount/add-more-code-in-price-rule/index.js +28 -0
  60. package/.medusa/server/src/workflows/discount/apply-coupon/index.js +41 -0
  61. package/.medusa/server/src/workflows/discount/apply-coupon/steps/apply-coupon-step-backup.js +245 -0
  62. package/.medusa/server/src/workflows/discount/apply-coupon/steps/apply-coupon-step.js +244 -0
  63. package/.medusa/server/src/workflows/discount/apply-coupon/steps/generate-adjustment-line-item.js +28 -0
  64. package/.medusa/server/src/workflows/discount/apply-coupon/steps/validate-coupon-step.js +212 -0
  65. package/.medusa/server/src/workflows/discount/apply-freebie/index.js +31 -0
  66. package/.medusa/server/src/workflows/discount/apply-freebie/steps/add-freebie-items-to-cart.js +212 -0
  67. package/.medusa/server/src/workflows/discount/apply-freebie/steps/remove-freebie-from-cart.js +16 -0
  68. package/.medusa/server/src/workflows/discount/auto-apply-coupon/index.js +10 -0
  69. package/.medusa/server/src/workflows/discount/auto-apply-coupon/steps/auto-apply-coupon.js +81 -0
  70. package/.medusa/server/src/workflows/discount/calculate-coupon-discount/index.js +74 -0
  71. package/.medusa/server/src/workflows/discount/create-bulk-discount/index.js +46 -0
  72. package/.medusa/server/src/workflows/discount/create-bulk-discount/steps/add-bulk-codes-to-rule.js +84 -0
  73. package/.medusa/server/src/workflows/discount/create-discount-code/index.js +10 -0
  74. package/.medusa/server/src/workflows/discount/create-discount-code/steps/create-discount-code-step.js +20 -0
  75. package/.medusa/server/src/workflows/discount/create-discount-price-rule/index.js +56 -0
  76. package/.medusa/server/src/workflows/discount/create-discount-price-rule/steps/create-discount-price-rule-step.js +58 -0
  77. package/.medusa/server/src/workflows/discount/create-discount-price-rule/steps/validate-customer-exists.js +21 -0
  78. package/.medusa/server/src/workflows/discount/create-freebie-rule/index.js +44 -0
  79. package/.medusa/server/src/workflows/discount/create-freebie-rule/steps/create-freebie-rule-step.js +64 -0
  80. package/.medusa/server/src/workflows/discount/export-codes/index.js +14 -0
  81. package/.medusa/server/src/workflows/discount/export-codes/steps/export-codes-step.js +116 -0
  82. package/.medusa/server/src/workflows/discount/get-cart-eligible-coupons/index.js +15 -0
  83. package/.medusa/server/src/workflows/discount/get-cart-eligible-coupons/step/get-cart-eligible-coupon.js +39 -0
  84. package/.medusa/server/src/workflows/discount/get-product-offers/index.js +25 -0
  85. package/.medusa/server/src/workflows/discount/get-product-offers/step/calculate-product-offers.js +53 -0
  86. package/.medusa/server/src/workflows/discount/index.js +28 -0
  87. package/.medusa/server/src/workflows/discount/remove-coupon/index.js +18 -0
  88. package/.medusa/server/src/workflows/discount/remove-coupon/step/remove-coupon-step.js +32 -0
  89. package/.medusa/server/src/workflows/discount/steps/validate-cart-exists.js +22 -0
  90. package/.medusa/server/src/workflows/discount/steps/validate-discount-code-exists.js +20 -0
  91. package/.medusa/server/src/workflows/discount/steps/validate-freebie-code-exists.js +16 -0
  92. package/.medusa/server/src/workflows/discount/steps/validate-same-prefix-rule-exists.js +20 -0
  93. package/.medusa/server/src/workflows/discount/update-discount-price-rule/index.js +42 -0
  94. package/.medusa/server/src/workflows/discount/update-discount-price-rule/steps/update-discount-price-rule-step.js +160 -0
  95. package/.medusa/server/src/workflows/discount/update-discount-price-rule/steps/validate-discount-price-rule-update-step.js +175 -0
  96. package/.medusa/server/src/workflows/discount/update-freebie-price-rule/index.js +44 -0
  97. package/.medusa/server/src/workflows/discount/update-freebie-price-rule/steps/update-freebie-price-rule-step.js +201 -0
  98. package/.medusa/server/src/workflows/discount/update-freebie-price-rule/steps/validate-freebie-rule-update-step.js +44 -0
  99. package/.medusa/server/src/workflows/index.js +18 -0
  100. package/.medusa/server/src/workflows/product/steps/validate-product-category-exists.js +26 -0
  101. package/.medusa/server/src/workflows/product/steps/validate-product-exists.js +28 -0
  102. package/.medusa/server/src/workflows/product/steps/validate-product-variant-exists.js +26 -0
  103. package/.medusa/server/src/workflows/steps/throw-error-step.js +9 -0
  104. package/README.md +64 -0
  105. package/package.json +87 -0
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.removeCouponStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ exports.removeCouponStep = (0, workflows_sdk_1.createStep)("remove-coupon", async (input, { container }) => {
6
+ const query = container.resolve("query");
7
+ const cartService = container.resolve("cart");
8
+ const { data: cart_line_item_adjustment } = await query.graph({
9
+ entity: "line_item_adjustment",
10
+ fields: ["*"],
11
+ filters: {
12
+ $and: [
13
+ { item_id: { $in: input.cart.items.map((item) => item.id) } },
14
+ ...(input.code ? [{ code: input.code }] : []),
15
+ ],
16
+ },
17
+ });
18
+ await cartService.deleteLineItemAdjustments(cart_line_item_adjustment.map((item) => item.id));
19
+ return new workflows_sdk_1.StepResponse(true, {
20
+ prevData: cart_line_item_adjustment,
21
+ });
22
+ }, async (input, { container }) => {
23
+ const cartService = container.resolve("cart");
24
+ await cartService.addLineItemAdjustments(input.prevData.map((item) => ({
25
+ amount: item.amount,
26
+ code: item.code,
27
+ description: item.description,
28
+ item_id: item.item_id,
29
+ promotion_id: item.promotion_id,
30
+ })));
31
+ });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlLWNvdXBvbi1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9kaXNjb3VudC9yZW1vdmUtY291cG9uL3N0ZXAvcmVtb3ZlLWNvdXBvbi1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFFQUE2RTtBQUVoRSxRQUFBLGdCQUFnQixHQUFHLElBQUEsMEJBQVUsRUFDeEMsZUFBZSxFQUNmLEtBQUssRUFDSCxLQUdDLEVBQ0QsRUFBRSxTQUFTLEVBQUUsRUFDYixFQUFFO0lBQ0YsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTlDLE1BQU0sRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDNUQsTUFBTSxFQUFFLHNCQUFzQjtRQUM5QixNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDYixPQUFPLEVBQUU7WUFDUCxJQUFJLEVBQUU7Z0JBQ0osRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM5QztTQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxXQUFXLENBQUMseUJBQXlCLENBQ3pDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNqRCxDQUFDO0lBRUYsT0FBTyxJQUFJLDRCQUFZLENBQUMsSUFBSSxFQUFFO1FBQzVCLFFBQVEsRUFBRSx5QkFBeUI7S0FDcEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxFQUNELEtBQUssRUFBRSxLQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ2xDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFOUMsTUFBTSxXQUFXLENBQUMsc0JBQXNCLENBQ3RDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtRQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7UUFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7UUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1FBQ3JCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtLQUNoQyxDQUFDLENBQUMsQ0FDSixDQUFDO0FBQ0osQ0FBQyxDQUNGLENBQUMifQ==
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateCartExists = exports.validateCartExistsStepId = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ exports.validateCartExistsStepId = "validate-cart-exists-step";
7
+ /**
8
+ * This step ensures that the product variants with the specified IDs exist.
9
+ * If not valid, the step will throw an error.
10
+ */
11
+ exports.validateCartExists = (0, workflows_sdk_1.createStep)(exports.validateCartExistsStepId, async (input, { container }) => {
12
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
13
+ const { data: cart } = await query.graph({
14
+ entity: "cart",
15
+ fields: ["id"],
16
+ filters: { id: input.cart_id },
17
+ });
18
+ if (!cart || cart.length === 0) {
19
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Cart with id: ${input.cart_id} was not found`);
20
+ }
21
+ });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtY2FydC1leGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L3N0ZXBzL3ZhbGlkYXRlLWNhcnQtZXhpc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUdtQztBQUNuQyxxRUFBK0Q7QUFNbEQsUUFBQSx3QkFBd0IsR0FDbkMsMkJBQTJCLENBQUM7QUFFOUI7OztHQUdHO0FBQ1UsUUFBQSxrQkFBa0IsR0FBRyxJQUFBLDBCQUFVLEVBQzFDLGdDQUF3QixFQUN4QixLQUFLLEVBQUUsS0FBa0MsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDMUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN2QyxNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztRQUNkLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO0tBQy9CLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixpQkFBaUIsS0FBSyxDQUFDLE9BQU8sZ0JBQWdCLENBQy9DLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUNGLENBQUMifQ==
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateDiscountCodeExists = exports.validateDiscountCodeExistsStepId = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ exports.validateDiscountCodeExistsStepId = "validate-discount-code-exists-step";
7
+ /**
8
+ * This step ensures that the discount codes with the specified codes exist.
9
+ * Returns found and missing codes in the step response.
10
+ */
11
+ exports.validateDiscountCodeExists = (0, workflows_sdk_1.createStep)(exports.validateDiscountCodeExistsStepId, async (input, { container }) => {
12
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
13
+ const { data: [discount], } = await query.graph({
14
+ entity: "discount_code",
15
+ fields: ["code"],
16
+ filters: { code: input.code },
17
+ });
18
+ return new workflows_sdk_1.StepResponse(!!discount);
19
+ });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtZGlzY291bnQtY29kZS1leGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L3N0ZXBzL3ZhbGlkYXRlLWRpc2NvdW50LWNvZGUtZXhpc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUdtQztBQUNuQyxxRUFBNkU7QUFNaEUsUUFBQSxnQ0FBZ0MsR0FDM0Msb0NBQW9DLENBQUM7QUFFdkM7OztHQUdHO0FBQ1UsUUFBQSwwQkFBMEIsR0FBRyxJQUFBLDBCQUFVLEVBQ2xELHdDQUFnQyxFQUNoQyxLQUFLLEVBQUUsS0FBMEMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDbEUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQ2pCLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNoQixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtLQUM5QixDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksNEJBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUNGLENBQUMifQ==
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateFreebieCodeExists = exports.validateFreebieCodeExistsStepId = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ exports.validateFreebieCodeExistsStepId = "validate-freebie-code-exists-step";
7
+ exports.validateFreebieCodeExists = (0, workflows_sdk_1.createStep)(exports.validateFreebieCodeExistsStepId, async (input, { container }) => {
8
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
9
+ const { data: [freebieCode], } = await query.graph({
10
+ entity: "freebie_rule",
11
+ fields: ["id"],
12
+ filters: { code: input.code },
13
+ });
14
+ return new workflows_sdk_1.StepResponse(!!freebieCode);
15
+ });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtZnJlZWJpZS1jb2RlLWV4aXN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZGlzY291bnQvc3RlcHMvdmFsaWRhdGUtZnJlZWJpZS1jb2RlLWV4aXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBc0U7QUFDdEUscUVBQTZFO0FBTWhFLFFBQUEsK0JBQStCLEdBQzFDLG1DQUFtQyxDQUFDO0FBRXpCLFFBQUEseUJBQXlCLEdBQUcsSUFBQSwwQkFBVSxFQUNqRCx1Q0FBK0IsRUFDL0IsS0FBSyxFQUFFLEtBQXlDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ2pFLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakUsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUNwQixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsY0FBYztRQUN0QixNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDZCxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtLQUM5QixDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksNEJBQVksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUNGLENBQUMifQ==
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSamePrefixRuleExists = exports.validateSamePrefixRuleExistanceExistsStepId = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ exports.validateSamePrefixRuleExistanceExistsStepId = "validate-same-prefix-rule-exists-step";
7
+ /**
8
+ * This step ensures that the discount codes with the specified codes exist.
9
+ * Returns found and missing codes in the step response.
10
+ */
11
+ exports.validateSamePrefixRuleExists = (0, workflows_sdk_1.createStep)(exports.validateSamePrefixRuleExistanceExistsStepId, async (input, { container }) => {
12
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
13
+ const { data: [priceRule], } = await query.graph({
14
+ entity: "discount_price_rule",
15
+ fields: ["prefix"],
16
+ filters: { prefix: input.prefix },
17
+ });
18
+ return new workflows_sdk_1.StepResponse(!!priceRule);
19
+ });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtc2FtZS1wcmVmaXgtcnVsZS1leGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L3N0ZXBzL3ZhbGlkYXRlLXNhbWUtcHJlZml4LXJ1bGUtZXhpc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUFzRTtBQUN0RSxxRUFBNkU7QUFNaEUsUUFBQSwyQ0FBMkMsR0FDdEQsdUNBQXVDLENBQUM7QUFFMUM7OztHQUdHO0FBQ1UsUUFBQSw0QkFBNEIsR0FBRyxJQUFBLDBCQUFVLEVBQ3BELG1EQUEyQyxFQUMzQyxLQUFLLEVBQUUsS0FBNEMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDcEUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQ2xCLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxxQkFBcUI7UUFDN0IsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFO0tBQ2xDLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSw0QkFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQ0YsQ0FBQyJ9
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateDiscountPriceRuleWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const validate_product_category_exists_1 = require("../../product/steps/validate-product-category-exists");
6
+ const validate_product_variant_exists_1 = require("../../product/steps/validate-product-variant-exists");
7
+ const update_discount_price_rule_step_1 = require("./steps/update-discount-price-rule-step");
8
+ const validate_discount_price_rule_update_step_1 = require("./steps/validate-discount-price-rule-update-step");
9
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
10
+ const validate_customer_exists_1 = require("../create-discount-price-rule/steps/validate-customer-exists");
11
+ exports.updateDiscountPriceRuleWorkflow = (0, workflows_sdk_1.createWorkflow)("update-discount-price-rule", (input) => {
12
+ const validate = (0, workflows_sdk_1.createHook)("validate", { input });
13
+ (0, validate_discount_price_rule_update_step_1.validateDiscountPriceRuleUpdateStep)(input);
14
+ (0, workflows_sdk_1.when)("validate-product-variant-exists", input, ({ applicable_product_variant_ids }) => !!applicable_product_variant_ids).then(() => {
15
+ return (0, validate_product_variant_exists_1.validateProductVariantExists)({
16
+ // @ts-ignore
17
+ product_variant_id: input.applicable_product_variant_ids,
18
+ });
19
+ });
20
+ (0, workflows_sdk_1.when)("validate-category-exists", input, ({ applicable_category_ids }) => !!applicable_category_ids).then(() => {
21
+ return (0, validate_product_category_exists_1.validateProductCategoryExists)({
22
+ // @ts-ignore
23
+ product_category_id: input.applicable_category_ids,
24
+ });
25
+ });
26
+ (0, workflows_sdk_1.when)("validate-customer-exists", input, ({ applicable_customer_ids }) => !!applicable_customer_ids).then(() => {
27
+ return (0, validate_customer_exists_1.validateCustomerExists)({
28
+ // @ts-ignore
29
+ customer_id: input.applicable_customer_ids,
30
+ });
31
+ });
32
+ const discountPriceRule = (0, update_discount_price_rule_step_1.updateDiscountPriceRuleStep)(input);
33
+ const { data: discountPriceRuleData } = (0, core_flows_1.useQueryGraphStep)({
34
+ entity: "discount_price_rule",
35
+ fields: ["*", "discount_codes.*"],
36
+ filters: {
37
+ id: discountPriceRule.id,
38
+ },
39
+ });
40
+ return new workflows_sdk_1.WorkflowResponse(discountPriceRuleData);
41
+ });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L3VwZGF0ZS1kaXNjb3VudC1wcmljZS1ydWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUsyQztBQUczQywyR0FBcUc7QUFDckcseUdBQW1HO0FBQ25HLDZGQUFzRjtBQUN0RiwrR0FBdUc7QUFDdkcsNERBQWdFO0FBQ2hFLDJHQUFzRztBQUV6RixRQUFBLCtCQUErQixHQUFHLElBQUEsOEJBQWMsRUFDM0QsNEJBQTRCLEVBQzVCLENBQUMsS0FBd0QsRUFBRSxFQUFFO0lBQzNELE1BQU0sUUFBUSxHQUFHLElBQUEsMEJBQVUsRUFBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5ELElBQUEsOEVBQW1DLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0MsSUFBQSxvQkFBSSxFQUNGLGlDQUFpQyxFQUNqQyxLQUFLLEVBQ0wsQ0FBQyxFQUFFLDhCQUE4QixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FDekUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1YsT0FBTyxJQUFBLDhEQUE0QixFQUFDO1lBQ2xDLGFBQWE7WUFDYixrQkFBa0IsRUFBRSxLQUFLLENBQUMsOEJBQThCO1NBQ3pELENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBQSxvQkFBSSxFQUNGLDBCQUEwQixFQUMxQixLQUFLLEVBQ0wsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FDM0QsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1YsT0FBTyxJQUFBLGdFQUE2QixFQUFDO1lBQ25DLGFBQWE7WUFDYixtQkFBbUIsRUFBRSxLQUFLLENBQUMsdUJBQXVCO1NBQ25ELENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBQSxvQkFBSSxFQUNGLDBCQUEwQixFQUMxQixLQUFLLEVBQ0wsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FDM0QsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1YsT0FBTyxJQUFBLGlEQUFzQixFQUFDO1lBQzVCLGFBQWE7WUFDYixXQUFXLEVBQUUsS0FBSyxDQUFDLHVCQUF1QjtTQUMzQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0saUJBQWlCLEdBQUcsSUFBQSw2REFBMkIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUU3RCxNQUFNLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUN4RCxNQUFNLEVBQUUscUJBQXFCO1FBQzdCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQztRQUNqQyxPQUFPLEVBQUU7WUFDUCxFQUFFLEVBQUUsaUJBQWlCLENBQUMsRUFBRTtTQUN6QjtLQUNGLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FDRixDQUFDIn0=
@@ -0,0 +1,160 @@
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.updateDiscountPriceRuleStep = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
9
+ const mtm_price_rule_with_products_categories_1 = __importDefault(require("../../../../links/mtm-price-rule-with-products-categories"));
10
+ const mtm_price_rule_with_products_variants_1 = __importDefault(require("../../../../links/mtm-price-rule-with-products-variants"));
11
+ const mtm_price_rule_with_customers_1 = __importDefault(require("../../../../links/mtm-price-rule-with-customers"));
12
+ const discounts_1 = require("../../../../modules/discounts");
13
+ exports.updateDiscountPriceRuleStep = (0, workflows_sdk_1.createStep)("update-discount-price-rule", async (input, { container }) => {
14
+ const { id, is_active, ...updateData } = input;
15
+ const discountPriceRuleService = container.resolve(discounts_1.DISCOUNT_MODULE);
16
+ const previousData = await discountPriceRuleService.retrieveDiscountPriceRule(id);
17
+ // Update status based on dates if provided
18
+ let status = "ACTIVE";
19
+ const query = container.resolve("query");
20
+ const now = new Date();
21
+ const startsAt = updateData.starts_at
22
+ ? new Date(updateData.starts_at)
23
+ : previousData.starts_at;
24
+ const endsAt = updateData.ends_at
25
+ ? new Date(updateData.ends_at)
26
+ : previousData.ends_at;
27
+ if (is_active === false)
28
+ status = "DEACTIVATED";
29
+ else if (endsAt && endsAt < now)
30
+ status = "EXPIRED";
31
+ else if (startsAt > now)
32
+ status = "SCHEDULED";
33
+ // Format dates if provided
34
+ const formattedData = {
35
+ id,
36
+ ...updateData,
37
+ starts_at: updateData.starts_at
38
+ ? new Date(updateData.starts_at)
39
+ : previousData.starts_at,
40
+ ends_at: updateData.ends_at !== undefined
41
+ ? updateData.ends_at
42
+ ? new Date(updateData.ends_at)
43
+ : null
44
+ : previousData.ends_at,
45
+ ...(status && { status }),
46
+ };
47
+ const updatedDiscountPriceRule = await discountPriceRuleService.updateDiscountPriceRules(formattedData);
48
+ // 1. get all previous links in case we need to restore
49
+ const { data: previousProductVariantLinks } = await query.graph({
50
+ entity: mtm_price_rule_with_products_variants_1.default.entryPoint,
51
+ fields: ["*"],
52
+ filters: { discount_price_rule_id: id },
53
+ });
54
+ const { data: previousPriceRuleProductCategoryLinks } = await query.graph({
55
+ entity: mtm_price_rule_with_products_categories_1.default.entryPoint,
56
+ fields: ["*"],
57
+ filters: { discount_price_rule_id: id },
58
+ });
59
+ const { data: previousCustomerLinks } = await query.graph({
60
+ entity: mtm_price_rule_with_customers_1.default.entryPoint,
61
+ fields: ["*"],
62
+ filters: { discount_price_rule_id: id },
63
+ });
64
+ // calculate links to be deleted for both
65
+ const link = container.resolve("link");
66
+ if (Array.isArray(updateData.applicable_product_variant_ids)) {
67
+ const existingVariantIds = previousProductVariantLinks.map((link) => link.product_variant_id);
68
+ const newVariantIds = updateData.applicable_product_variant_ids;
69
+ // 1) figure out which links to delete
70
+ const variantIdsToDelete = existingVariantIds.filter((id) => !newVariantIds.includes(id));
71
+ if (variantIdsToDelete.length > 0) {
72
+ await link.dismiss(variantIdsToDelete.map((variantId) => ({
73
+ [discounts_1.DISCOUNT_MODULE]: {
74
+ discount_price_rule_id: updatedDiscountPriceRule.id,
75
+ },
76
+ [utils_1.Modules.PRODUCT]: { product_variant_id: variantId },
77
+ })));
78
+ }
79
+ // 2) figure out which new links to create
80
+ const variantIdsToCreate = newVariantIds.filter((id) => !existingVariantIds.includes(id));
81
+ if (variantIdsToCreate.length > 0) {
82
+ await link.create(variantIdsToCreate.map((variantId) => ({
83
+ [discounts_1.DISCOUNT_MODULE]: {
84
+ discount_price_rule_id: updatedDiscountPriceRule.id,
85
+ },
86
+ [utils_1.Modules.PRODUCT]: { product_variant_id: variantId },
87
+ })));
88
+ }
89
+ // if we are creating for variant then delete all category links
90
+ await link.dismiss(previousPriceRuleProductCategoryLinks.map(({ product_category_id }) => ({
91
+ [discounts_1.DISCOUNT_MODULE]: {
92
+ discount_price_rule_id: updatedDiscountPriceRule.id,
93
+ },
94
+ [utils_1.Modules.PRODUCT]: { product_category_id },
95
+ })));
96
+ }
97
+ // For product categories
98
+ // only proceed if the client sent us an array of category IDs
99
+ if (Array.isArray(updateData.applicable_category_ids)) {
100
+ const existingCategoryIds = previousPriceRuleProductCategoryLinks.map((link) => link.product_category_id);
101
+ const newCategoryIds = updateData.applicable_category_ids;
102
+ // 1) Delete removed links
103
+ const categoryIdsToDelete = existingCategoryIds.filter((id) => !newCategoryIds.includes(id));
104
+ if (categoryIdsToDelete.length > 0) {
105
+ await link.dismiss(categoryIdsToDelete.map((categoryId) => ({
106
+ [discounts_1.DISCOUNT_MODULE]: {
107
+ discount_price_rule_id: updatedDiscountPriceRule.id,
108
+ },
109
+ [utils_1.Modules.PRODUCT]: { product_category_id: categoryId },
110
+ })));
111
+ }
112
+ // 2) Create new links
113
+ const categoryIdsToCreate = newCategoryIds.filter((id) => !existingCategoryIds.includes(id));
114
+ if (categoryIdsToCreate.length > 0) {
115
+ await link.create(categoryIdsToCreate.map((categoryId) => ({
116
+ [discounts_1.DISCOUNT_MODULE]: {
117
+ discount_price_rule_id: updatedDiscountPriceRule.id,
118
+ },
119
+ [utils_1.Modules.PRODUCT]: { product_category_id: categoryId },
120
+ })));
121
+ }
122
+ // 3) Remove all variant links if categories are set
123
+ await link.dismiss(previousProductVariantLinks.map(({ product_variant_id }) => ({
124
+ [discounts_1.DISCOUNT_MODULE]: {
125
+ discount_price_rule_id: updatedDiscountPriceRule.id,
126
+ },
127
+ [utils_1.Modules.PRODUCT]: { product_variant_id },
128
+ })));
129
+ }
130
+ //For customers
131
+ if (Array.isArray(updateData.applicable_customer_ids)) {
132
+ const existingCustomerIds = previousCustomerLinks.map((link) => link.customer_id);
133
+ const newCustomerIds = updateData.applicable_customer_ids;
134
+ // 1) Delete removed links
135
+ const customerIdsToDelete = existingCustomerIds.filter((id) => !newCustomerIds.includes(id));
136
+ if (customerIdsToDelete.length > 0) {
137
+ await link.dismiss(customerIdsToDelete.map((customerId) => ({
138
+ [discounts_1.DISCOUNT_MODULE]: { discount_price_rule_id: updatedDiscountPriceRule.id },
139
+ [utils_1.Modules.CUSTOMER]: { customer_id: customerId },
140
+ })));
141
+ }
142
+ // 2) Create new links
143
+ const customerIdsToCreate = newCustomerIds.filter((id) => !existingCustomerIds.includes(id));
144
+ if (customerIdsToCreate.length > 0) {
145
+ await link.create(customerIdsToCreate.map((customerId) => ({
146
+ [discounts_1.DISCOUNT_MODULE]: { discount_price_rule_id: updatedDiscountPriceRule.id },
147
+ [utils_1.Modules.CUSTOMER]: { customer_id: customerId },
148
+ })));
149
+ }
150
+ }
151
+ const { discount_codes, ...rollbackTo } = previousData;
152
+ return new workflows_sdk_1.StepResponse(updatedDiscountPriceRule, { rollbackTo, id });
153
+ }, async (input, { container }) => {
154
+ if (!input?.id)
155
+ return;
156
+ const discountPriceRuleService = container.resolve(discounts_1.DISCOUNT_MODULE);
157
+ // Restore the previous state of the discount price rule
158
+ await discountPriceRuleService.updateDiscountPriceRules(input.rollbackTo);
159
+ });
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWRpc2NvdW50LXByaWNlLXJ1bGUtc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZGlzY291bnQvdXBkYXRlLWRpc2NvdW50LXByaWNlLXJ1bGUvc3RlcHMvdXBkYXRlLWRpc2NvdW50LXByaWNlLXJ1bGUtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxREFBb0Q7QUFDcEQscUVBQTZFO0FBRzdFLHdJQUFxRztBQUNyRyxvSUFBa0c7QUFDbEcsb0hBQW9GO0FBQ3BGLDZEQUFnRTtBQUduRCxRQUFBLDJCQUEyQixHQUFHLElBQUEsMEJBQVUsRUFDbkQsNEJBQTRCLEVBQzVCLEtBQUssRUFDSCxLQUF3RCxFQUN4RCxFQUFFLFNBQVMsRUFBRSxFQUNiLEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUUvQyxNQUFNLHdCQUF3QixHQUM1QixTQUFTLENBQUMsT0FBTyxDQUFrQiwyQkFBZSxDQUFDLENBQUM7SUFFdEQsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFL0QsMkNBQTJDO0lBQzNDLElBQUksTUFBTSxHQUF1RCxRQUFRLENBQUM7SUFFMUUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV6QyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxTQUFTO1FBQ25DLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO0lBQzNCLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxPQUFPO1FB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
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateDiscountPriceRuleUpdateStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const validators_1 = require("../../../../api/admin/discounts/validators");
7
+ exports.validateDiscountPriceRuleUpdateStep = (0, workflows_sdk_1.createStep)("validate-discount-price-rule-update", async (input, { container }) => {
8
+ const { id, ...updateData } = input;
9
+ const errors = [];
10
+ // Get existing discount price rule to merge with update data
11
+ const query = container.resolve("query");
12
+ const { data: [existingRule], } = await query.graph({
13
+ entity: "discount_price_rule",
14
+ fields: [
15
+ "*",
16
+ "product_categories.*",
17
+ "product_variants.*",
18
+ "product_categories.products.id",
19
+ ],
20
+ filters: { id },
21
+ });
22
+ if (!existingRule) {
23
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Discount price rule with id ${id} not found`);
24
+ }
25
+ // Merge existing data with update data for validation
26
+ const mergedData = {
27
+ ...existingRule,
28
+ ...updateData,
29
+ };
30
+ // Apply validation rules from superRefine
31
+ // 1. Check usage_limit_per_customer validation
32
+ if (mergedData.usage_limit_per_customer_type ===
33
+ validators_1.DiscountUsageLimitPerCustomerType.Values.SPECIFIC &&
34
+ (mergedData.usage_limit_per_customer_specific == null ||
35
+ mergedData.usage_limit_per_customer_specific == undefined)) {
36
+ errors.push({
37
+ path: ["usage_limit_per_customer_specific"],
38
+ message: "usage_limit_per_customer_specific is required when usage_limit_per_customer_type is SPECIFIC",
39
+ });
40
+ }
41
+ // 2. Check discount type-specific required fields
42
+ if (mergedData.type === validators_1.DiscountType.Values.FIXED &&
43
+ (mergedData.get_flat_discount == null ||
44
+ mergedData.get_flat_discount == undefined)) {
45
+ errors.push({
46
+ path: ["get_flat_discount"],
47
+ message: "get_flat_discount is required for FIXED discount type",
48
+ });
49
+ }
50
+ if (mergedData.type === validators_1.DiscountType.Values.PERCENTAGE) {
51
+ if (mergedData.get_percent == null ||
52
+ mergedData.get_percent > 100 ||
53
+ mergedData.get_percent < 0) {
54
+ errors.push({
55
+ path: ["get_percent"],
56
+ message: "get_percent is required for PERCENTAGE discount type and must be between 0-100",
57
+ });
58
+ }
59
+ }
60
+ // 3. Check date validation
61
+ if (mergedData.ends_at &&
62
+ mergedData.starts_at &&
63
+ new Date(mergedData.ends_at) <= new Date(mergedData.starts_at)) {
64
+ errors.push({
65
+ path: ["ends_at"],
66
+ message: "ends_at must be later than starts_at",
67
+ });
68
+ }
69
+ // 4. Check BXGY validation
70
+ if (mergedData.type === validators_1.DiscountType.Values.BXGY) {
71
+ if (mergedData.buy_x == null || mergedData.get_y == null) {
72
+ errors.push({
73
+ path: ["buy_x"],
74
+ message: "buy_x and get_y are required for BXGY discounts",
75
+ });
76
+ }
77
+ }
78
+ // ── New: Validate any explicitly provided cart‐limit type ──
79
+ if (updateData.usage_limit_per_cart_type !== undefined) {
80
+ // For PERCENTAGE, only ONLY_ONCE is allowed
81
+ if (mergedData.type === validators_1.DiscountType.Values.PERCENTAGE &&
82
+ updateData.usage_limit_per_cart_type !==
83
+ validators_1.DiscountUsageLimitPerCartType.Values.ONLY_ONCE) {
84
+ errors.push({
85
+ path: ["usage_limit_per_cart_type"],
86
+ message: "For PERCENTAGE discounts, usage_limit_per_cart_type can only be ONLY_ONCE",
87
+ });
88
+ }
89
+ // For FIXED, BXGY, BXAY: anything in the enum is OK, so no error
90
+ // For any future or unexpected types, you may want to disallow entirely:
91
+ if (![
92
+ validators_1.DiscountType.Values.FIXED,
93
+ validators_1.DiscountType.Values.PERCENTAGE,
94
+ validators_1.DiscountType.Values.BXGY,
95
+ validators_1.DiscountType.Values.BXAY,
96
+ ].includes(mergedData.type)) {
97
+ errors.push({
98
+ path: ["usage_limit_per_cart_type"],
99
+ message: `usage_limit_per_cart_type is not valid for discount type ${mergedData.type}`,
100
+ });
101
+ }
102
+ }
103
+ // ── Then continue with your existing SPECIFIC ⇒ require specific‐count check ──
104
+ if (mergedData.usage_limit_per_cart_type ===
105
+ validators_1.DiscountUsageLimitPerCartType.Values.SPECIFIC &&
106
+ (mergedData.usage_limit_per_cart_specific == null ||
107
+ mergedData.usage_limit_per_cart_specific == undefined)) {
108
+ errors.push({
109
+ path: ["usage_limit_per_cart_specific"],
110
+ message: "usage_limit_per_cart_specific is required when usage_limit_per_cart_type is SPECIFIC",
111
+ });
112
+ }
113
+ // 5. Check product vs category scope
114
+ if (updateData.applicable_product_variant_ids?.length &&
115
+ updateData.applicable_category_ids?.length) {
116
+ errors.push({
117
+ path: ["applicable_product_variant_ids", "applicable_category_ids"],
118
+ message: "You should provide either applicable_product_variant_ids or applicable_category_ids",
119
+ });
120
+ }
121
+ // 7. Check min/max values
122
+ if (mergedData.min_order_value != null && mergedData.min_order_value < 0) {
123
+ errors.push({
124
+ path: ["min_order_value"],
125
+ message: "min_order_value cannot be negative",
126
+ });
127
+ }
128
+ // 8. Check mutual exclusivity of value fields per discount type
129
+ if (mergedData.type === validators_1.DiscountType.Values.FIXED) {
130
+ ["get_percent", "buy_x", "get_y", "at_y"].forEach((fld) => {
131
+ if (mergedData[fld] != null) {
132
+ errors.push({
133
+ path: [fld],
134
+ message: `${fld} must be null when discount type is FIXED`,
135
+ });
136
+ }
137
+ });
138
+ }
139
+ if (mergedData.type === validators_1.DiscountType.Values.PERCENTAGE) {
140
+ ["get_flat_discount", "buy_x", "get_y", "at_y"].forEach((fld) => {
141
+ if (mergedData[fld] != null) {
142
+ errors.push({
143
+ path: [fld],
144
+ message: `${fld} must be null when discount type is PERCENTAGE`,
145
+ });
146
+ }
147
+ });
148
+ }
149
+ if (mergedData.type === validators_1.DiscountType.Values.BXGY) {
150
+ ["get_percent", "get_flat_discount", "at_y"].forEach((fld) => {
151
+ if (mergedData[fld] != null) {
152
+ errors.push({
153
+ path: [fld],
154
+ message: `${fld} must be null when discount type is BXGY`,
155
+ });
156
+ }
157
+ });
158
+ }
159
+ if (mergedData.type === validators_1.DiscountType.Values.BXAY) {
160
+ ["get_percent", "get_flat_discount", "get_y"].forEach((fld) => {
161
+ if (mergedData[fld] != null) {
162
+ errors.push({
163
+ path: [fld],
164
+ message: `${fld} must be null when discount type is BXAY`,
165
+ });
166
+ }
167
+ });
168
+ }
169
+ // If there are validation errors, throw an error with all the messages
170
+ if (errors.length > 0) {
171
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, errors.map((e) => `${e.path.join(".")}: ${e.message}`).join("; "));
172
+ }
173
+ return new workflows_sdk_1.StepResponse(true);
174
+ });
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtZGlzY291bnQtcHJpY2UtcnVsZS11cGRhdGUtc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZGlzY291bnQvdXBkYXRlLWRpc2NvdW50LXByaWNlLXJ1bGUvc3RlcHMvdmFsaWRhdGUtZGlzY291bnQtcHJpY2UtcnVsZS11cGRhdGUtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBd0Q7QUFDeEQscUVBQTZFO0FBRTdFLDJFQUtvRDtBQU12QyxRQUFBLG1DQUFtQyxHQUFHLElBQUEsMEJBQVUsRUFDM0QscUNBQXFDLEVBQ3JDLEtBQUssRUFBRSxLQUEyQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3BDLE1BQU0sTUFBTSxHQUEwQyxFQUFFLENBQUM7SUFFekQsNkRBQTZEO0lBQzdELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFekMsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUNyQixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUscUJBQXFCO1FBQzdCLE1BQU0sRUFBRTtZQUNOLEdBQUc7WUFDSCxzQkFBc0I7WUFDdEIsb0JBQW9CO1lBQ3BCLGdDQUFnQztTQUNqQztRQUNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRTtLQUNoQixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsK0JBQStCLEVBQUUsWUFBWSxDQUM5QyxDQUFDO0lBQ0osQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxN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
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateFreebiePriceRuleWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const validate_product_category_exists_1 = require("../../product/steps/validate-product-category-exists");
6
+ const validate_product_variant_exists_1 = require("../../product/steps/validate-product-variant-exists");
7
+ const update_freebie_price_rule_step_1 = require("./steps/update-freebie-price-rule-step");
8
+ const validate_freebie_rule_update_step_1 = require("./steps/validate-freebie-rule-update-step");
9
+ const validate_customer_exists_1 = require("../create-discount-price-rule/steps/validate-customer-exists");
10
+ exports.updateFreebiePriceRuleWorkflow = (0, workflows_sdk_1.createWorkflow)("update-freebie-price-rule", (input) => {
11
+ const validate = (0, workflows_sdk_1.createHook)("validate", { input });
12
+ (0, validate_freebie_rule_update_step_1.validateFreebieRuleUpdateStep)(input);
13
+ (0, workflows_sdk_1.when)("validate-product-variant-exists", input, ({ applicable_product_variant_ids }) => !!applicable_product_variant_ids).then(() => {
14
+ return (0, validate_product_variant_exists_1.validateProductVariantExists)({
15
+ // @ts-ignore
16
+ product_variant_id: input.applicable_product_variant_ids,
17
+ }).config({
18
+ name: "validate-product-variant-exists",
19
+ });
20
+ });
21
+ (0, workflows_sdk_1.when)("validate-freebie-product-variant-exists", input, ({ freebie_product_variant_ids }) => !!freebie_product_variant_ids).then(() => {
22
+ return (0, validate_product_variant_exists_1.validateProductVariantExists)({
23
+ // @ts-ignore
24
+ product_variant_id: input.freebie_product_variant_ids,
25
+ }).config({
26
+ name: "validate-freebie-product-variant-exists",
27
+ });
28
+ });
29
+ (0, workflows_sdk_1.when)("validate-category-exists", input, ({ applicable_category_ids }) => !!applicable_category_ids).then(() => {
30
+ return (0, validate_product_category_exists_1.validateProductCategoryExists)({
31
+ // @ts-ignore
32
+ product_category_id: input.applicable_category_ids,
33
+ });
34
+ });
35
+ (0, workflows_sdk_1.when)("validate-customer-exists", input, ({ applicable_customer_ids }) => !!applicable_customer_ids).then(() => {
36
+ return (0, validate_customer_exists_1.validateCustomerExists)({
37
+ // @ts-ignore
38
+ customer_id: input.applicable_customer_ids,
39
+ });
40
+ });
41
+ const freebieRule = (0, update_freebie_price_rule_step_1.updateFreebiePriceRuleStep)(input);
42
+ return new workflows_sdk_1.WorkflowResponse(freebieRule);
43
+ });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L3VwZGF0ZS1mcmVlYmllLXByaWNlLXJ1bGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzJDO0FBRzNDLDJHQUFxRztBQUNyRyx5R0FBbUc7QUFDbkcsMkZBQW9GO0FBQ3BGLGlHQUEwRjtBQUMxRiwyR0FBc0c7QUFFekYsUUFBQSw4QkFBOEIsR0FBRyxJQUFBLDhCQUFjLEVBQzFELDJCQUEyQixFQUMzQixDQUFDLEtBQXFELEVBQUUsRUFBRTtJQUN4RCxNQUFNLFFBQVEsR0FBRyxJQUFBLDBCQUFVLEVBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUVuRCxJQUFBLGlFQUE2QixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXJDLElBQUEsb0JBQUksRUFDRixpQ0FBaUMsRUFDakMsS0FBSyxFQUNMLENBQUMsRUFBRSw4QkFBOEIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQ3pFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNWLE9BQU8sSUFBQSw4REFBNEIsRUFBQztZQUNsQyxhQUFhO1lBQ2Isa0JBQWtCLEVBQUUsS0FBSyxDQUFDLDhCQUE4QjtTQUN6RCxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ1IsSUFBSSxFQUFFLGlDQUFpQztTQUN4QyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUEsb0JBQUksRUFDRix5Q0FBeUMsRUFDekMsS0FBSyxFQUNMLENBQUMsRUFBRSwyQkFBMkIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQ25FLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNWLE9BQU8sSUFBQSw4REFBNEIsRUFBQztZQUNsQyxhQUFhO1lBQ2Isa0JBQWtCLEVBQUUsS0FBSyxDQUFDLDJCQUEyQjtTQUN0RCxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ1IsSUFBSSxFQUFFLHlDQUF5QztTQUNoRCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUEsb0JBQUksRUFDRiwwQkFBMEIsRUFDMUIsS0FBSyxFQUNMLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQzNELENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNWLE9BQU8sSUFBQSxnRUFBNkIsRUFBQztZQUNuQyxhQUFhO1lBQ2IsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLHVCQUF1QjtTQUNuRCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUEsb0JBQUksRUFDRiwwQkFBMEIsRUFDMUIsS0FBSyxFQUNMLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQzNELENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNWLE9BQU8sSUFBQSxpREFBc0IsRUFBQztZQUM1QixhQUFhO1lBQ2IsV0FBVyxFQUFFLEtBQUssQ0FBQyx1QkFBdUI7U0FDM0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLFdBQVcsR0FBRyxJQUFBLDJEQUEwQixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXRELE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQ0YsQ0FBQyJ9