@xbstracts/medusa-coupons 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/.medusa/server/src/admin/index.js +3207 -0
  2. package/.medusa/server/src/admin/index.mjs +3253 -0
  3. package/.medusa/server/src/api/admin/coupon-products/[product_id]/entitlements/route.js +9 -0
  4. package/.medusa/server/src/api/admin/coupon-products/[product_id]/mirror-promotion/route.js +132 -0
  5. package/.medusa/server/src/api/admin/coupon-products/[product_id]/preview/route.js +28 -0
  6. package/.medusa/server/src/api/admin/coupon-products/[product_id]/route.js +18 -0
  7. package/.medusa/server/src/api/admin/coupon-products/[product_id]/variants/[variant_config_id]/route.js +14 -0
  8. package/.medusa/server/src/api/admin/coupon-products/[product_id]/variants/route.js +14 -0
  9. package/.medusa/server/src/api/admin/coupon-products/configs/[id]/route.js +53 -0
  10. package/.medusa/server/src/api/admin/coupon-products/configs/[id]/variants/[variant_config_id]/route.js +26 -0
  11. package/.medusa/server/src/api/admin/coupon-products/configs/[id]/variants/route.js +27 -0
  12. package/.medusa/server/src/api/admin/coupon-products/configs/route.js +36 -0
  13. package/.medusa/server/src/api/admin/coupon-products/entitlements/[id]/cancel/route.js +15 -0
  14. package/.medusa/server/src/api/admin/coupon-products/entitlements/[id]/redeem/route.js +15 -0
  15. package/.medusa/server/src/api/admin/coupon-products/entitlements/[id]/route.js +16 -0
  16. package/.medusa/server/src/api/admin/coupon-products/entitlements/route.js +22 -0
  17. package/.medusa/server/src/api/admin/coupon-products/options/route.js +9 -0
  18. package/.medusa/server/src/api/admin/coupon-products/products/route.js +16 -0
  19. package/.medusa/server/src/api/admin/coupon-products/route.js +13 -0
  20. package/.medusa/server/src/api/admin/coupon-products/uploads/route.js +7 -0
  21. package/.medusa/server/src/api/coupon-product-routes.js +546 -0
  22. package/.medusa/server/src/api/entitlement-utils.js +90 -0
  23. package/.medusa/server/src/api/media-upload.js +57 -0
  24. package/.medusa/server/src/api/middlewares.js +92 -0
  25. package/.medusa/server/src/api/product-utils.js +304 -0
  26. package/.medusa/server/src/api/promotion-code-resolver.js +225 -0
  27. package/.medusa/server/src/api/seller-utils.js +101 -0
  28. package/.medusa/server/src/api/utils.js +25 -0
  29. package/.medusa/server/src/api/validators.js +199 -0
  30. package/.medusa/server/src/api/vendor/coupon-products/[product_id]/entitlements/route.js +9 -0
  31. package/.medusa/server/src/api/vendor/coupon-products/[product_id]/route.js +18 -0
  32. package/.medusa/server/src/api/vendor/coupon-products/[product_id]/variants/[variant_config_id]/route.js +14 -0
  33. package/.medusa/server/src/api/vendor/coupon-products/[product_id]/variants/route.js +14 -0
  34. package/.medusa/server/src/api/vendor/coupon-products/configs/[id]/route.js +60 -0
  35. package/.medusa/server/src/api/vendor/coupon-products/configs/[id]/variants/[variant_config_id]/route.js +41 -0
  36. package/.medusa/server/src/api/vendor/coupon-products/configs/[id]/variants/route.js +45 -0
  37. package/.medusa/server/src/api/vendor/coupon-products/configs/route.js +51 -0
  38. package/.medusa/server/src/api/vendor/coupon-products/entitlements/[id]/route.js +25 -0
  39. package/.medusa/server/src/api/vendor/coupon-products/entitlements/route.js +45 -0
  40. package/.medusa/server/src/api/vendor/coupon-products/options/route.js +9 -0
  41. package/.medusa/server/src/api/vendor/coupon-products/products/route.js +19 -0
  42. package/.medusa/server/src/api/vendor/coupon-products/route.js +13 -0
  43. package/.medusa/server/src/api/vendor/coupon-products/uploads/route.js +7 -0
  44. package/.medusa/server/src/jobs/retry-coupon-media-deletes.js +14 -0
  45. package/.medusa/server/src/links/coupon-issuance-order-line-item.js +17 -0
  46. package/.medusa/server/src/links/coupon-issuance-order.js +15 -0
  47. package/.medusa/server/src/links/coupon-product-config-product.js +17 -0
  48. package/.medusa/server/src/links/coupon-product-variant-config-variant.js +17 -0
  49. package/.medusa/server/src/links/coupon-promotion-mirror-promotion.js +17 -0
  50. package/.medusa/server/src/links/customer-coupon-entitlement-customer.js +15 -0
  51. package/.medusa/server/src/modules/coupon/constants.js +46 -0
  52. package/.medusa/server/src/modules/coupon/index.js +16 -0
  53. package/.medusa/server/src/modules/coupon/loaders/reconcile-coupon-products.js +65 -0
  54. package/.medusa/server/src/modules/coupon/migrations/Migration20260709000000.js +40 -0
  55. package/.medusa/server/src/modules/coupon/migrations/Migration20260710000000.js +22 -0
  56. package/.medusa/server/src/modules/coupon/migrations/Migration20260711000000.js +25 -0
  57. package/.medusa/server/src/modules/coupon/migrations/Migration20260712000000.js +78 -0
  58. package/.medusa/server/src/modules/coupon/migrations/Migration20260719000000.js +19 -0
  59. package/.medusa/server/src/modules/coupon/migrations/Migration20260722000000.js +17 -0
  60. package/.medusa/server/src/modules/coupon/migrations/Migration20260723000000.js +18 -0
  61. package/.medusa/server/src/modules/coupon/models/coupon-entitlement-promotion.js +31 -0
  62. package/.medusa/server/src/modules/coupon/models/coupon-entitlement-seller.js +28 -0
  63. package/.medusa/server/src/modules/coupon/models/coupon-issuance.js +35 -0
  64. package/.medusa/server/src/modules/coupon/models/coupon-media-asset.js +41 -0
  65. package/.medusa/server/src/modules/coupon/models/coupon-product-config.js +45 -0
  66. package/.medusa/server/src/modules/coupon/models/coupon-product-variant-config.js +36 -0
  67. package/.medusa/server/src/modules/coupon/models/coupon-promotion-mirror.js +27 -0
  68. package/.medusa/server/src/modules/coupon/models/customer-coupon-entitlement.js +56 -0
  69. package/.medusa/server/src/modules/coupon/models/index.js +23 -0
  70. package/.medusa/server/src/modules/coupon/payment-order-utils.js +76 -0
  71. package/.medusa/server/src/modules/coupon/product-metadata.js +24 -0
  72. package/.medusa/server/src/modules/coupon/purchase-conditions.js +138 -0
  73. package/.medusa/server/src/modules/coupon/service.js +628 -0
  74. package/.medusa/server/src/modules/coupon/types.js +3 -0
  75. package/.medusa/server/src/modules/coupon/utils.js +302 -0
  76. package/.medusa/server/src/subscribers/issue-coupons-from-order.js +88 -0
  77. package/.medusa/server/src/vendor/index.mjs +3237 -0
  78. package/.medusa/server/src/workflows/hooks/validate-coupon-add-to-cart.js +13 -0
  79. package/.medusa/server/src/workflows/hooks/validate-coupon-complete-cart.js +8 -0
  80. package/.medusa/server/src/workflows/index.js +21 -0
  81. package/.medusa/server/src/workflows/steps.js +27 -0
  82. package/.medusa/server/src/workflows/validate-coupon-purchase.js +85 -0
  83. package/README.md +84 -0
  84. package/package.json +102 -0
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reconcileCouponProductsWithDatabase = reconcileCouponProductsWithDatabase;
4
+ exports.default = reconcileCouponProducts;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ async function reconcileCouponProductsWithDatabase(database) {
7
+ const result = await database.raw(`
8
+ with enabled_configs as (
9
+ select "id", "product_id"
10
+ from "coupon_product_config"
11
+ where "enabled" = true and "deleted_at" is null
12
+ ),
13
+ updated_products as (
14
+ update "product" as p
15
+ set "metadata" = coalesce(p."metadata", '{}'::jsonb) || jsonb_build_object(
16
+ 'medusa_coupons',
17
+ jsonb_build_object(
18
+ 'enabled', true,
19
+ 'config_id', c."id",
20
+ 'item_type', 'coupon',
21
+ 'fulfillment_type', 'code_issuance',
22
+ 'requires_shipping', false
23
+ )
24
+ )
25
+ from enabled_configs as c
26
+ where p."id" = c."product_id"
27
+ and p."deleted_at" is null
28
+ and p."metadata" -> 'medusa_coupons' is distinct from jsonb_build_object(
29
+ 'enabled', true,
30
+ 'config_id', c."id",
31
+ 'item_type', 'coupon',
32
+ 'fulfillment_type', 'code_issuance',
33
+ 'requires_shipping', false
34
+ )
35
+ returning p."id" as "product_id"
36
+ ),
37
+ detached_profiles as (
38
+ delete from "product_shipping_profile" as psp
39
+ using enabled_configs as c
40
+ where psp."product_id" = c."product_id"
41
+ returning psp."product_id"
42
+ ),
43
+ reconciled_products as (
44
+ select "product_id" from updated_products
45
+ union
46
+ select "product_id" from detached_profiles
47
+ )
48
+ select count(*)::int as "reconciled" from reconciled_products
49
+ `);
50
+ return Number(result.rows?.[0]?.reconciled || 0);
51
+ }
52
+ async function reconcileCouponProducts({ container, }) {
53
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
54
+ try {
55
+ const database = container.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
56
+ const reconciled = await reconcileCouponProductsWithDatabase(database);
57
+ if (reconciled > 0) {
58
+ logger.info(`[medusa-coupons] Reconciled ${reconciled} non-shipping coupon product(s)`);
59
+ }
60
+ }
61
+ catch (error) {
62
+ logger.warn(`[medusa-coupons] Unable to reconcile non-shipping coupon products: ${error instanceof Error ? error.message : String(error)}`);
63
+ }
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25jaWxlLWNvdXBvbi1wcm9kdWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2NvdXBvbi9sb2FkZXJzL3JlY29uY2lsZS1jb3Vwb24tcHJvZHVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSxrRkFnREM7QUFFRCwwQ0F1QkM7QUEvRUQscURBQXFFO0FBTTlELEtBQUssVUFBVSxtQ0FBbUMsQ0FDdkQsUUFBNEI7SUFFNUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ2pDLENBQUMsQ0FBQTtJQUVGLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDbEQsQ0FBQztBQUVjLEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxFQUNwRCxTQUFTLEdBQ0s7SUFDZCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRWxFLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ2hDLGlDQUF5QixDQUFDLGFBQWEsQ0FDeEMsQ0FBQTtRQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sbUNBQW1DLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdEUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkIsTUFBTSxDQUFDLElBQUksQ0FDVCwrQkFBK0IsVUFBVSxpQ0FBaUMsQ0FDM0UsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxJQUFJLENBQ1Qsc0VBQ0UsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDdkQsRUFBRSxDQUNILENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260709000000 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260709000000 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`create table if not exists "coupon_product_config" ("id" text not null, "enabled" boolean not null default true, "product_id" text not null, "item_type" text check ("item_type" in ('coupon')) not null default 'coupon', "fulfillment_type" text check ("fulfillment_type" in ('code_issuance')) not null default 'code_issuance', "benefit_type" text check ("benefit_type" in ('fixed_amount', 'percentage', 'free_shipping', 'buy_get')) not null default 'fixed_amount', "amount" integer null, "percentage" integer null, "currency_code" text null, "code_strategy" text check ("code_strategy" in ('unique_code', 'shared_code')) not null default 'unique_code', "code_prefix" text null, "shared_code" text null, "expiration_policy" jsonb not null, "max_issuance_per_order_item" integer not null default 1, "promotion_mirror_mode" text check ("promotion_mirror_mode" in ('none', 'manual', 'auto')) not null default 'none', "promotion_status" text check ("promotion_status" in ('draft', 'active', 'inactive')) not null default 'draft', "promotion_template" jsonb null, "campaign_mode" text check ("campaign_mode" in ('none', 'existing', 'new')) not null default 'none', "campaign_id" text null, "campaign_snapshot" jsonb null, "config_version" integer not null default 1, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "coupon_product_config_pkey" primary key ("id"));`);
8
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_coupon_product_config_product_id_unique" ON "coupon_product_config" ("product_id") WHERE deleted_at IS NULL;`);
9
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_product_config_enabled" ON "coupon_product_config" ("enabled") WHERE deleted_at IS NULL;`);
10
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_product_config_deleted_at" ON "coupon_product_config" ("deleted_at") WHERE deleted_at IS NULL;`);
11
+ this.addSql(`create table if not exists "coupon_product_variant_config" ("id" text not null, "enabled" boolean not null default true, "product_config_id" text not null, "variant_id" text not null, "benefit_type" text check ("benefit_type" in ('fixed_amount', 'percentage', 'free_shipping', 'buy_get')) null, "amount" integer null, "percentage" integer null, "currency_code" text null, "code_strategy" text check ("code_strategy" in ('unique_code', 'shared_code')) null, "code_prefix" text null, "shared_code" text null, "expiration_policy" jsonb null, "max_issuance_per_order_item" integer null, "promotion_mirror_mode" text check ("promotion_mirror_mode" in ('none', 'manual', 'auto')) null, "config_version" integer not null default 1, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "coupon_product_variant_config_pkey" primary key ("id"));`);
12
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_product_variant_config_product_config_id" ON "coupon_product_variant_config" ("product_config_id") WHERE deleted_at IS NULL;`);
13
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_coupon_product_variant_config_variant_id_unique" ON "coupon_product_variant_config" ("variant_id") WHERE deleted_at IS NULL;`);
14
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_product_variant_config_deleted_at" ON "coupon_product_variant_config" ("deleted_at") WHERE deleted_at IS NULL;`);
15
+ this.addSql(`create table if not exists "coupon_issuance" ("id" text not null, "order_id" text not null, "line_item_id" text not null, "product_id" text not null, "variant_id" text null, "customer_id" text null, "email" text null, "quantity" integer not null default 1, "status" text check ("status" in ('pending', 'issued', 'failed')) not null default 'pending', "config_id" text not null, "variant_config_id" text null, "config_version" integer not null default 1, "config_snapshot" jsonb not null, "issued_count" integer not null default 0, "failed_count" integer not null default 0, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "coupon_issuance_pkey" primary key ("id"));`);
16
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_issuance_order_id" ON "coupon_issuance" ("order_id") WHERE deleted_at IS NULL;`);
17
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_coupon_issuance_line_item_id_unique" ON "coupon_issuance" ("line_item_id") WHERE deleted_at IS NULL;`);
18
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_issuance_deleted_at" ON "coupon_issuance" ("deleted_at") WHERE deleted_at IS NULL;`);
19
+ this.addSql(`create table if not exists "customer_coupon_entitlement" ("id" text not null, "customer_id" text null, "email" text null, "code" text null, "shared_code" text null, "status" text check ("status" in ('pending', 'issued', 'redeemed', 'expired', 'canceled')) not null default 'issued', "product_id" text not null, "variant_id" text null, "order_id" text not null, "line_item_id" text not null, "issuance_id" text not null, "config_id" text not null, "variant_config_id" text null, "benefit_snapshot" jsonb not null, "source_snapshot" jsonb null, "expires_at" timestamptz null, "redeemed_at" timestamptz null, "external_reference" text null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "customer_coupon_entitlement_pkey" primary key ("id"));`);
20
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_customer_coupon_entitlement_customer_id" ON "customer_coupon_entitlement" ("customer_id") WHERE deleted_at IS NULL;`);
21
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_customer_coupon_entitlement_code" ON "customer_coupon_entitlement" ("code") WHERE deleted_at IS NULL;`);
22
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_customer_coupon_entitlement_order_id" ON "customer_coupon_entitlement" ("order_id") WHERE deleted_at IS NULL;`);
23
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_customer_coupon_entitlement_issuance_id" ON "customer_coupon_entitlement" ("issuance_id") WHERE deleted_at IS NULL;`);
24
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_customer_coupon_entitlement_status" ON "customer_coupon_entitlement" ("status") WHERE deleted_at IS NULL;`);
25
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_customer_coupon_entitlement_deleted_at" ON "customer_coupon_entitlement" ("deleted_at") WHERE deleted_at IS NULL;`);
26
+ this.addSql(`create table if not exists "coupon_promotion_mirror" ("id" text not null, "config_id" text not null, "variant_config_id" text null, "promotion_id" text null, "status" text check ("status" in ('pending', 'created', 'updated', 'failed')) not null default 'pending', "last_error" text null, "mirrored_at" timestamptz null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "coupon_promotion_mirror_pkey" primary key ("id"));`);
27
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_promotion_mirror_config_id" ON "coupon_promotion_mirror" ("config_id") WHERE deleted_at IS NULL;`);
28
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_promotion_mirror_promotion_id" ON "coupon_promotion_mirror" ("promotion_id") WHERE deleted_at IS NULL;`);
29
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_promotion_mirror_deleted_at" ON "coupon_promotion_mirror" ("deleted_at") WHERE deleted_at IS NULL;`);
30
+ }
31
+ async down() {
32
+ this.addSql(`drop table if exists "coupon_promotion_mirror" cascade;`);
33
+ this.addSql(`drop table if exists "customer_coupon_entitlement" cascade;`);
34
+ this.addSql(`drop table if exists "coupon_issuance" cascade;`);
35
+ this.addSql(`drop table if exists "coupon_product_variant_config" cascade;`);
36
+ this.addSql(`drop table if exists "coupon_product_config" cascade;`);
37
+ }
38
+ }
39
+ exports.Migration20260709000000 = Migration20260709000000;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MDkwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb3Vwb24vbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDcwOTAwMDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBb0U7QUFFcEUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUMzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQ1QsaThDQUFpOEMsQ0FDbDhDLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHFKQUFxSixDQUN0SixDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCxpSUFBaUksQ0FDbEksQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QsdUlBQXVJLENBQ3hJLENBQUE7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUNULG03QkFBbTdCLENBQ3A3QixDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCxxS0FBcUssQ0FDdEssQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QscUtBQXFLLENBQ3RLLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHVKQUF1SixDQUN4SixDQUFBO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FDVCw4d0JBQTh3QixDQUMvd0IsQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QsdUhBQXVILENBQ3hILENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULDZJQUE2SSxDQUM5SSxDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCwySEFBMkgsQ0FDNUgsQ0FBQTtRQUVELElBQUksQ0FBQyxNQUFNLENBQ1QsMDFCQUEwMUIsQ0FDMzFCLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHFKQUFxSixDQUN0SixDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCx1SUFBdUksQ0FDeEksQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QsK0lBQStJLENBQ2hKLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHFKQUFxSixDQUN0SixDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCwySUFBMkksQ0FDNUksQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QsbUpBQW1KLENBQ3BKLENBQUE7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUNULHdoQkFBd2hCLENBQ3poQixDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCx5SUFBeUksQ0FDMUksQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QsK0lBQStJLENBQ2hKLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULDJJQUEySSxDQUM1SSxDQUFBO0lBQ0gsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMseURBQXlELENBQUMsQ0FBQTtRQUN0RSxJQUFJLENBQUMsTUFBTSxDQUFDLDZEQUE2RCxDQUFDLENBQUE7UUFDMUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpREFBaUQsQ0FBQyxDQUFBO1FBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsK0RBQStELENBQUMsQ0FBQTtRQUM1RSxJQUFJLENBQUMsTUFBTSxDQUFDLHVEQUF1RCxDQUFDLENBQUE7SUFDdEUsQ0FBQztDQUNGO0FBcEZELDBEQW9GQyJ9
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260710000000 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260710000000 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "coupon_product_config" add column if not exists "promotion_status" text check ("promotion_status" in ('draft', 'active', 'inactive')) not null default 'draft';`);
8
+ this.addSql(`alter table if exists "coupon_product_config" add column if not exists "promotion_template" jsonb null;`);
9
+ this.addSql(`alter table if exists "coupon_product_config" add column if not exists "campaign_mode" text check ("campaign_mode" in ('none', 'existing', 'new')) not null default 'none';`);
10
+ this.addSql(`alter table if exists "coupon_product_config" add column if not exists "campaign_id" text null;`);
11
+ this.addSql(`alter table if exists "coupon_product_config" add column if not exists "campaign_snapshot" jsonb null;`);
12
+ }
13
+ async down() {
14
+ this.addSql(`alter table if exists "coupon_product_config" drop column if exists "campaign_snapshot";`);
15
+ this.addSql(`alter table if exists "coupon_product_config" drop column if exists "campaign_id";`);
16
+ this.addSql(`alter table if exists "coupon_product_config" drop column if exists "campaign_mode";`);
17
+ this.addSql(`alter table if exists "coupon_product_config" drop column if exists "promotion_template";`);
18
+ this.addSql(`alter table if exists "coupon_product_config" drop column if exists "promotion_status";`);
19
+ }
20
+ }
21
+ exports.Migration20260710000000 = Migration20260710000000;
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MTAwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb3Vwb24vbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDcxMDAwMDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBb0U7QUFFcEUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUMzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQ1Qsd0xBQXdMLENBQ3pMLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHlHQUF5RyxDQUMxRyxDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCw2S0FBNkssQ0FDOUssQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QsaUdBQWlHLENBQ2xHLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHdHQUF3RyxDQUN6RyxDQUFBO0lBQ0gsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQ1QsMEZBQTBGLENBQzNGLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULG9GQUFvRixDQUNyRixDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCxzRkFBc0YsQ0FDdkYsQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QsMkZBQTJGLENBQzVGLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHlGQUF5RixDQUMxRixDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBcENELDBEQW9DQyJ9
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260711000000 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260711000000 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "coupon_product_config" add column if not exists "amounts" jsonb null;`);
8
+ this.addSql(`alter table if exists "coupon_product_variant_config" add column if not exists "amounts" jsonb null;`);
9
+ this.addSql(`update "coupon_product_config" set "amounts" = jsonb_build_array(jsonb_build_object('currency_code', lower("currency_code"), 'amount', "amount")) where "benefit_type" = 'fixed_amount' and "amounts" is null and "amount" is not null and "currency_code" is not null;`);
10
+ this.addSql(`update "coupon_product_variant_config" set "amounts" = jsonb_build_array(jsonb_build_object('currency_code', lower("currency_code"), 'amount', "amount")) where "amounts" is null and "amount" is not null and "currency_code" is not null;`);
11
+ this.addSql(`update "coupon_issuance" set "config_snapshot" = jsonb_set("config_snapshot", '{amounts}', jsonb_build_array(jsonb_build_object('currency_code', lower("config_snapshot"->>'currency_code'), 'amount', ("config_snapshot"->>'amount')::numeric)), true) where "config_snapshot"->>'benefit_type' = 'fixed_amount' and not ("config_snapshot" ? 'amounts') and "config_snapshot"->>'amount' is not null and "config_snapshot"->>'currency_code' is not null;`);
12
+ this.addSql(`update "customer_coupon_entitlement" set "benefit_snapshot" = jsonb_set("benefit_snapshot", '{amounts}', jsonb_build_array(jsonb_build_object('currency_code', lower("benefit_snapshot"->>'currency_code'), 'amount', ("benefit_snapshot"->>'amount')::numeric)), true) where "benefit_snapshot"->>'benefit_type' = 'fixed_amount' and not ("benefit_snapshot" ? 'amounts') and "benefit_snapshot"->>'amount' is not null and "benefit_snapshot"->>'currency_code' is not null;`);
13
+ this.addSql(`create table if not exists "coupon_entitlement_promotion" ("id" text not null, "entitlement_id" text not null, "currency_code" text not null, "promotion_id" text not null, "internal_code" text not null, "amount" numeric not null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "coupon_entitlement_promotion_pkey" primary key ("id"));`);
14
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_coupon_entitlement_promotion_entitlement_currency_unique" ON "coupon_entitlement_promotion" ("entitlement_id", "currency_code") WHERE deleted_at IS NULL;`);
15
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_entitlement_promotion_promotion_id" ON "coupon_entitlement_promotion" ("promotion_id") WHERE deleted_at IS NULL;`);
16
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_coupon_entitlement_promotion_internal_code" ON "coupon_entitlement_promotion" ("internal_code") WHERE deleted_at IS NULL;`);
17
+ }
18
+ async down() {
19
+ this.addSql(`drop table if exists "coupon_entitlement_promotion" cascade;`);
20
+ this.addSql(`alter table if exists "coupon_product_variant_config" drop column if exists "amounts";`);
21
+ this.addSql(`alter table if exists "coupon_product_config" drop column if exists "amounts";`);
22
+ }
23
+ }
24
+ exports.Migration20260711000000 = Migration20260711000000;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MTEwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb3Vwb24vbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDcxMTAwMDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBb0U7QUFFcEUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUMzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQ1QsOEZBQThGLENBQy9GLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHNHQUFzRyxDQUN2RyxDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCx5UUFBeVEsQ0FDMVEsQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QsNk9BQTZPLENBQzlPLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULDZiQUE2YixDQUM5YixDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCxpZEFBaWQsQ0FDbGQsQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QsbWNBQW1jLENBQ3BjLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULGtNQUFrTSxDQUNuTSxDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCx5SkFBeUosQ0FDMUosQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1Qsa0tBQWtLLENBQ25LLENBQUE7SUFDSCxDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyw4REFBOEQsQ0FBQyxDQUFBO1FBQzNFLElBQUksQ0FBQyxNQUFNLENBQ1Qsd0ZBQXdGLENBQ3pGLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULGdGQUFnRixDQUNqRixDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBM0NELDBEQTJDQyJ9
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260712000000 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260712000000 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "coupon_product_config" add column if not exists "purchase_conditions" jsonb not null default '[]'::jsonb;`);
8
+ this.addSql(`
9
+ with config_currencies as (
10
+ select
11
+ config.id,
12
+ jsonb_agg(currency.code order by currency.code) as codes,
13
+ count(*) as code_count
14
+ from coupon_product_config as config
15
+ cross join lateral (
16
+ select distinct lower(amount_row->>'currency_code') as code
17
+ from jsonb_array_elements(config.amounts) as amount_row
18
+ where nullif(trim(amount_row->>'currency_code'), '') is not null
19
+ ) as currency
20
+ where config.benefit_type = 'fixed_amount'
21
+ and jsonb_typeof(config.amounts) = 'array'
22
+ group by config.id
23
+ )
24
+ update coupon_product_config as config
25
+ set purchase_conditions = config.purchase_conditions || jsonb_build_array(
26
+ jsonb_build_object(
27
+ 'attribute', 'currency_code',
28
+ 'operator', case when currency.code_count = 1 then 'eq' else 'in' end,
29
+ 'values', currency.codes
30
+ )
31
+ )
32
+ from config_currencies as currency
33
+ where currency.id = config.id
34
+ and currency.code_count > 0
35
+ and not exists (
36
+ select 1
37
+ from jsonb_array_elements(config.purchase_conditions) as condition
38
+ where condition->>'attribute' = 'currency_code'
39
+ );
40
+ `);
41
+ this.addSql(`
42
+ do $$
43
+ begin
44
+ if to_regclass('public.product_sales_channel') is not null then
45
+ execute $sql$
46
+ with linked_channels as (
47
+ select product_id, array_agg(distinct sales_channel_id order by sales_channel_id) as ids
48
+ from product_sales_channel
49
+ where product_id is not null
50
+ and sales_channel_id is not null
51
+ and deleted_at is null
52
+ group by product_id
53
+ )
54
+ update coupon_product_config as config
55
+ set purchase_conditions = config.purchase_conditions || jsonb_build_array(
56
+ jsonb_build_object(
57
+ 'attribute', 'sales_channel_id',
58
+ 'operator', case when array_length(linked.ids, 1) = 1 then 'eq' else 'in' end,
59
+ 'values', to_jsonb(linked.ids)
60
+ )
61
+ )
62
+ from linked_channels as linked
63
+ where linked.product_id = config.product_id
64
+ and not exists (
65
+ select 1 from jsonb_array_elements(config.purchase_conditions) as condition
66
+ where condition->>'attribute' = 'sales_channel_id'
67
+ )
68
+ $sql$;
69
+ end if;
70
+ end $$;
71
+ `);
72
+ }
73
+ async down() {
74
+ this.addSql(`alter table if exists "coupon_product_config" drop column if exists "purchase_conditions";`);
75
+ }
76
+ }
77
+ exports.Migration20260712000000 = Migration20260712000000;
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MTIwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb3Vwb24vbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDcxMjAwMDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBb0U7QUFFcEUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUMzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQ1Qsa0lBQWtJLENBQ25JLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQWdDWCxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0E4QlgsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQ1QsNEZBQTRGLENBQzdGLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUE1RUQsMERBNEVDIn0=
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260719000000 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260719000000 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`create table if not exists "coupon_media_asset" ("id" text not null, "file_id" text not null, "url" text not null, "seller_id" text null, "product_id" text null, "role" text check ("role" in ('unassigned', 'thumbnail', 'image')) not null default 'unassigned', "position" integer null, "status" text check ("status" in ('uploaded', 'attached', 'pending_delete')) not null default 'uploaded', "delete_attempts" integer not null default 0, "last_error" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "coupon_media_asset_pkey" primary key ("id"));`);
8
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_coupon_media_asset_file_id_unique" ON "coupon_media_asset" ("file_id") WHERE deleted_at IS NULL;`);
9
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_media_asset_seller_id" ON "coupon_media_asset" ("seller_id") WHERE deleted_at IS NULL;`);
10
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_media_asset_product_id" ON "coupon_media_asset" ("product_id") WHERE deleted_at IS NULL;`);
11
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_media_asset_status" ON "coupon_media_asset" ("status") WHERE deleted_at IS NULL;`);
12
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_media_asset_deleted_at" ON "coupon_media_asset" ("deleted_at") WHERE deleted_at IS NULL;`);
13
+ }
14
+ async down() {
15
+ this.addSql(`drop table if exists "coupon_media_asset" cascade;`);
16
+ }
17
+ }
18
+ exports.Migration20260719000000 = Migration20260719000000;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MTkwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb3Vwb24vbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDcxOTAwMDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBb0U7QUFFcEUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUMzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQ1QseW9CQUF5b0IsQ0FDMW9CLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHlJQUF5SSxDQUMxSSxDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCwrSEFBK0gsQ0FDaEksQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QsaUlBQWlJLENBQ2xJLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHlIQUF5SCxDQUMxSCxDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCxpSUFBaUksQ0FDbEksQ0FBQTtJQUNILENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLG9EQUFvRCxDQUFDLENBQUE7SUFDbkUsQ0FBQztDQUNGO0FBekJELDBEQXlCQyJ9
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260722000000 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260722000000 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table "customer_coupon_entitlement" add column if not exists "origin" text check ("origin" in ('purchase', 'external')) not null default 'purchase';`);
8
+ this.addSql(`alter table "customer_coupon_entitlement" alter column "product_id" drop not null, alter column "order_id" drop not null, alter column "line_item_id" drop not null, alter column "issuance_id" drop not null, alter column "config_id" drop not null;`);
9
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_customer_coupon_entitlement_external_reference_unique" ON "customer_coupon_entitlement" ("external_reference") WHERE deleted_at IS NULL AND external_reference IS NOT NULL;`);
10
+ }
11
+ async down() {
12
+ this.addSql(`drop index if exists "IDX_customer_coupon_entitlement_external_reference_unique";`);
13
+ this.addSql(`alter table "customer_coupon_entitlement" drop column if exists "origin";`);
14
+ }
15
+ }
16
+ exports.Migration20260722000000 = Migration20260722000000;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MjIwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb3Vwb24vbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDcyMjAwMDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBb0U7QUFFcEUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUMzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQ1QsNEpBQTRKLENBQzdKLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHdQQUF3UCxDQUN6UCxDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCxvTkFBb04sQ0FDck4sQ0FBQTtJQUNILENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUNULG1GQUFtRixDQUNwRixDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCwyRUFBMkUsQ0FDNUUsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQXJCRCwwREFxQkMifQ==
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260723000000 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260723000000 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`create table if not exists "coupon_entitlement_seller" ("id" text not null, "entitlement_id" text not null, "seller_id" text not null, "seller_member_id" text null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "coupon_entitlement_seller_pkey" primary key ("id"));`);
8
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_entitlement_seller_entitlement_id" ON "coupon_entitlement_seller" ("entitlement_id") WHERE deleted_at IS NULL;`);
9
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_entitlement_seller_seller_id" ON "coupon_entitlement_seller" ("seller_id") WHERE deleted_at IS NULL;`);
10
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_coupon_entitlement_seller_unique" ON "coupon_entitlement_seller" ("entitlement_id", "seller_id") WHERE deleted_at IS NULL;`);
11
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_coupon_entitlement_seller_deleted_at" ON "coupon_entitlement_seller" ("deleted_at") WHERE deleted_at IS NULL;`);
12
+ }
13
+ async down() {
14
+ this.addSql(`drop table if exists "coupon_entitlement_seller" cascade;`);
15
+ }
16
+ }
17
+ exports.Migration20260723000000 = Migration20260723000000;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MjMwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb3Vwb24vbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDcyMzAwMDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBb0U7QUFFcEUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUMzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQ1QsK1hBQStYLENBQ2hZLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULHVKQUF1SixDQUN4SixDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDVCw2SUFBNkksQ0FDOUksQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQ1QsbUtBQW1LLENBQ3BLLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUNULCtJQUErSSxDQUNoSixDQUFBO0lBQ0gsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsMkRBQTJELENBQUMsQ0FBQTtJQUMxRSxDQUFDO0NBQ0Y7QUF0QkQsMERBc0JDIn0=
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const CouponEntitlementPromotion = utils_1.model
5
+ .define("coupon_entitlement_promotion", {
6
+ id: utils_1.model.id({ prefix: "ceprm" }).primaryKey(),
7
+ entitlement_id: utils_1.model.text(),
8
+ currency_code: utils_1.model.text(),
9
+ promotion_id: utils_1.model.text(),
10
+ internal_code: utils_1.model.text(),
11
+ amount: utils_1.model.number(),
12
+ metadata: utils_1.model.json().nullable(),
13
+ })
14
+ .indexes([
15
+ {
16
+ name: "IDX_coupon_entitlement_promotion_entitlement_currency_unique",
17
+ on: ["entitlement_id", "currency_code"],
18
+ unique: true,
19
+ },
20
+ {
21
+ name: "IDX_coupon_entitlement_promotion_promotion_id",
22
+ on: ["promotion_id"],
23
+ },
24
+ {
25
+ name: "IDX_coupon_entitlement_promotion_internal_code",
26
+ on: ["internal_code"],
27
+ unique: true,
28
+ },
29
+ ]);
30
+ exports.default = CouponEntitlementPromotion;
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLWVudGl0bGVtZW50LXByb21vdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2NvdXBvbi9tb2RlbHMvY291cG9uLWVudGl0bGVtZW50LXByb21vdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFpRDtBQUVqRCxNQUFNLDBCQUEwQixHQUFHLGFBQUs7S0FDckMsTUFBTSxDQUFDLDhCQUE4QixFQUFFO0lBQ3RDLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBQzlDLGNBQWMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQzVCLGFBQWEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQzNCLFlBQVksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQzFCLGFBQWEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQzNCLE1BQU0sRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFO0lBQ3RCLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ2xDLENBQUM7S0FDRCxPQUFPLENBQUM7SUFDUDtRQUNFLElBQUksRUFBRSw4REFBOEQ7UUFDcEUsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxJQUFJO0tBQ2I7SUFDRDtRQUNFLElBQUksRUFBRSwrQ0FBK0M7UUFDckQsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDO0tBQ3JCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0RBQWdEO1FBQ3RELEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQztRQUNyQixNQUFNLEVBQUUsSUFBSTtLQUNiO0NBQ0YsQ0FBQyxDQUFBO0FBRUosa0JBQWUsMEJBQTBCLENBQUEifQ==
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const CouponEntitlementSeller = utils_1.model
5
+ .define("coupon_entitlement_seller", {
6
+ id: utils_1.model.id({ prefix: "cescope" }).primaryKey(),
7
+ entitlement_id: utils_1.model.text(),
8
+ seller_id: utils_1.model.text(),
9
+ seller_member_id: utils_1.model.text().nullable(),
10
+ metadata: utils_1.model.json().nullable(),
11
+ })
12
+ .indexes([
13
+ {
14
+ name: "IDX_coupon_entitlement_seller_entitlement_id",
15
+ on: ["entitlement_id"],
16
+ },
17
+ {
18
+ name: "IDX_coupon_entitlement_seller_seller_id",
19
+ on: ["seller_id"],
20
+ },
21
+ {
22
+ name: "IDX_coupon_entitlement_seller_unique",
23
+ on: ["entitlement_id", "seller_id"],
24
+ unique: true,
25
+ },
26
+ ]);
27
+ exports.default = CouponEntitlementSeller;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLWVudGl0bGVtZW50LXNlbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2NvdXBvbi9tb2RlbHMvY291cG9uLWVudGl0bGVtZW50LXNlbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFpRDtBQUVqRCxNQUFNLHVCQUF1QixHQUFHLGFBQUs7S0FDbEMsTUFBTSxDQUFDLDJCQUEyQixFQUFFO0lBQ25DLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBQ2hELGNBQWMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQzVCLFNBQVMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3ZCLGdCQUFnQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDekMsUUFBUSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbEMsQ0FBQztLQUNELE9BQU8sQ0FBQztJQUNQO1FBQ0UsSUFBSSxFQUFFLDhDQUE4QztRQUNwRCxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztLQUN2QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLHlDQUF5QztRQUMvQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUM7S0FDbEI7SUFDRDtRQUNFLElBQUksRUFBRSxzQ0FBc0M7UUFDNUMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxJQUFJO0tBQ2I7Q0FDRixDQUFDLENBQUE7QUFFSixrQkFBZSx1QkFBdUIsQ0FBQSJ9
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const constants_1 = require("../constants");
5
+ const CouponIssuance = utils_1.model
6
+ .define("coupon_issuance", {
7
+ id: utils_1.model.id({ prefix: "ciss" }).primaryKey(),
8
+ order_id: utils_1.model.text(),
9
+ line_item_id: utils_1.model.text(),
10
+ product_id: utils_1.model.text(),
11
+ variant_id: utils_1.model.text().nullable(),
12
+ customer_id: utils_1.model.text().nullable(),
13
+ email: utils_1.model.text().nullable(),
14
+ quantity: utils_1.model.number().default(1),
15
+ status: utils_1.model.enum([...constants_1.ISSUANCE_STATUSES]).default("pending"),
16
+ config_id: utils_1.model.text(),
17
+ variant_config_id: utils_1.model.text().nullable(),
18
+ config_version: utils_1.model.number().default(1),
19
+ config_snapshot: utils_1.model.json(),
20
+ issued_count: utils_1.model.number().default(0),
21
+ failed_count: utils_1.model.number().default(0),
22
+ metadata: utils_1.model.json().nullable(),
23
+ })
24
+ .indexes([
25
+ {
26
+ name: "IDX_coupon_issuance_order_id",
27
+ on: ["order_id"],
28
+ },
29
+ {
30
+ name: "IDX_coupon_issuance_line_item_id",
31
+ on: ["line_item_id"],
32
+ },
33
+ ]);
34
+ exports.default = CouponIssuance;
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLWlzc3VhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvY291cG9uL21vZGVscy9jb3Vwb24taXNzdWFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFDakQsNENBQWdEO0FBRWhELE1BQU0sY0FBYyxHQUFHLGFBQUs7S0FDekIsTUFBTSxDQUFDLGlCQUFpQixFQUFFO0lBQ3pCLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBQzdDLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3RCLFlBQVksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQzFCLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3hCLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLFdBQVcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3BDLEtBQUssRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlCLFFBQVEsRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuQyxNQUFNLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsNkJBQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDN0QsU0FBUyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDdkIsaUJBQWlCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMxQyxjQUFjLEVBQUUsYUFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekMsZUFBZSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDN0IsWUFBWSxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLFlBQVksRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN2QyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNsQyxDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1A7UUFDRSxJQUFJLEVBQUUsOEJBQThCO1FBQ3BDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQztLQUNqQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUM7S0FDckI7Q0FDRixDQUFDLENBQUE7QUFFSixrQkFBZSxjQUFjLENBQUEifQ==
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const CouponMediaAsset = utils_1.model
5
+ .define("coupon_media_asset", {
6
+ id: utils_1.model.id({ prefix: "cpmedia" }).primaryKey(),
7
+ file_id: utils_1.model.text(),
8
+ url: utils_1.model.text(),
9
+ seller_id: utils_1.model.text().nullable(),
10
+ product_id: utils_1.model.text().nullable(),
11
+ role: utils_1.model
12
+ .enum(["unassigned", "thumbnail", "image"])
13
+ .default("unassigned"),
14
+ position: utils_1.model.number().nullable(),
15
+ status: utils_1.model
16
+ .enum(["uploaded", "attached", "pending_delete"])
17
+ .default("uploaded"),
18
+ delete_attempts: utils_1.model.number().default(0),
19
+ last_error: utils_1.model.text().nullable(),
20
+ })
21
+ .indexes([
22
+ {
23
+ name: "IDX_coupon_media_asset_file_id_unique",
24
+ on: ["file_id"],
25
+ unique: true,
26
+ },
27
+ {
28
+ name: "IDX_coupon_media_asset_seller_id",
29
+ on: ["seller_id"],
30
+ },
31
+ {
32
+ name: "IDX_coupon_media_asset_product_id",
33
+ on: ["product_id"],
34
+ },
35
+ {
36
+ name: "IDX_coupon_media_asset_status",
37
+ on: ["status"],
38
+ },
39
+ ]);
40
+ exports.default = CouponMediaAsset;
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLW1lZGlhLWFzc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvY291cG9uL21vZGVscy9jb3Vwb24tbWVkaWEtYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFFakQsTUFBTSxnQkFBZ0IsR0FBRyxhQUFLO0tBQzNCLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtJQUM1QixFQUFFLEVBQUUsYUFBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRTtJQUNoRCxPQUFPLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUNyQixHQUFHLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUNqQixTQUFTLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxJQUFJLEVBQUUsYUFBSztTQUNSLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDMUMsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUN4QixRQUFRLEVBQUUsYUFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxNQUFNLEVBQUUsYUFBSztTQUNWLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztTQUNoRCxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ3RCLGVBQWUsRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxQyxVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNwQyxDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1A7UUFDRSxJQUFJLEVBQUUsdUNBQXVDO1FBQzdDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNmLE1BQU0sRUFBRSxJQUFJO0tBQ2I7SUFDRDtRQUNFLElBQUksRUFBRSxrQ0FBa0M7UUFDeEMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDO0tBQ2xCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsbUNBQW1DO1FBQ3pDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQztLQUNuQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUM7S0FDZjtDQUNGLENBQUMsQ0FBQTtBQUVKLGtCQUFlLGdCQUFnQixDQUFBIn0=
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const constants_1 = require("../constants");
5
+ const CouponProductConfig = utils_1.model
6
+ .define("coupon_product_config", {
7
+ id: utils_1.model.id({ prefix: "cpcfg" }).primaryKey(),
8
+ enabled: utils_1.model.boolean().default(true),
9
+ product_id: utils_1.model.text(),
10
+ item_type: utils_1.model.enum(["coupon"]).default("coupon"),
11
+ fulfillment_type: utils_1.model.enum(["code_issuance"]).default("code_issuance"),
12
+ benefit_type: utils_1.model.enum([...constants_1.BENEFIT_TYPES]).default("fixed_amount"),
13
+ purchase_conditions: utils_1.model.json().default([]),
14
+ amounts: utils_1.model.json().nullable(),
15
+ amount: utils_1.model.number().nullable(),
16
+ percentage: utils_1.model.number().nullable(),
17
+ currency_code: utils_1.model.text().nullable(),
18
+ code_strategy: utils_1.model.enum([...constants_1.CODE_STRATEGIES]).default("unique_code"),
19
+ code_prefix: utils_1.model.text().nullable(),
20
+ shared_code: utils_1.model.text().nullable(),
21
+ expiration_policy: utils_1.model.json(),
22
+ max_issuance_per_order_item: utils_1.model.number().default(1),
23
+ promotion_mirror_mode: utils_1.model
24
+ .enum([...constants_1.PROMOTION_MIRROR_MODES])
25
+ .default("none"),
26
+ promotion_status: utils_1.model.enum([...constants_1.PROMOTION_STATUSES]).default("draft"),
27
+ promotion_template: utils_1.model.json().nullable(),
28
+ campaign_mode: utils_1.model.enum([...constants_1.CAMPAIGN_MODES]).default("none"),
29
+ campaign_id: utils_1.model.text().nullable(),
30
+ campaign_snapshot: utils_1.model.json().nullable(),
31
+ config_version: utils_1.model.number().default(1),
32
+ metadata: utils_1.model.json().nullable(),
33
+ })
34
+ .indexes([
35
+ {
36
+ name: "IDX_coupon_product_config_product_id",
37
+ on: ["product_id"],
38
+ },
39
+ {
40
+ name: "IDX_coupon_product_config_enabled",
41
+ on: ["enabled"],
42
+ },
43
+ ]);
44
+ exports.default = CouponProductConfig;
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLXByb2R1Y3QtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvY291cG9uL21vZGVscy9jb3Vwb24tcHJvZHVjdC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFDakQsNENBTXFCO0FBRXJCLE1BQU0sbUJBQW1CLEdBQUcsYUFBSztLQUM5QixNQUFNLENBQUMsdUJBQXVCLEVBQUU7SUFDL0IsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUU7SUFDOUMsT0FBTyxFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3RDLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3hCLFNBQVMsRUFBRSxhQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQ25ELGdCQUFnQixFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7SUFDeEUsWUFBWSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLHlCQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDcEUsbUJBQW1CLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFTLENBQUM7SUFDcEQsT0FBTyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDaEMsTUFBTSxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakMsVUFBVSxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDckMsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLDJCQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7SUFDdEUsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsaUJBQWlCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUMvQiwyQkFBMkIsRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN0RCxxQkFBcUIsRUFBRSxhQUFLO1NBQ3pCLElBQUksQ0FBQyxDQUFDLEdBQUcsa0NBQXNCLENBQUMsQ0FBQztTQUNqQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ2xCLGdCQUFnQixFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLDhCQUFrQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3RFLGtCQUFrQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0MsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLDBCQUFjLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDOUQsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsaUJBQWlCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMxQyxjQUFjLEVBQUUsYUFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekMsUUFBUSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbEMsQ0FBQztLQUNELE9BQU8sQ0FBQztJQUNQO1FBQ0UsSUFBSSxFQUFFLHNDQUFzQztRQUM1QyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUM7S0FDbkI7SUFDRDtRQUNFLElBQUksRUFBRSxtQ0FBbUM7UUFDekMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDO0tBQ2hCO0NBQ0YsQ0FBQyxDQUFBO0FBRUosa0JBQWUsbUJBQW1CLENBQUEifQ==
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const constants_1 = require("../constants");
5
+ const CouponProductVariantConfig = utils_1.model
6
+ .define("coupon_product_variant_config", {
7
+ id: utils_1.model.id({ prefix: "cpvcfg" }).primaryKey(),
8
+ enabled: utils_1.model.boolean().default(true),
9
+ product_config_id: utils_1.model.text(),
10
+ variant_id: utils_1.model.text(),
11
+ benefit_type: utils_1.model.enum([...constants_1.BENEFIT_TYPES]).nullable(),
12
+ amounts: utils_1.model.json().nullable(),
13
+ amount: utils_1.model.number().nullable(),
14
+ percentage: utils_1.model.number().nullable(),
15
+ currency_code: utils_1.model.text().nullable(),
16
+ code_strategy: utils_1.model.enum([...constants_1.CODE_STRATEGIES]).nullable(),
17
+ code_prefix: utils_1.model.text().nullable(),
18
+ shared_code: utils_1.model.text().nullable(),
19
+ expiration_policy: utils_1.model.json().nullable(),
20
+ max_issuance_per_order_item: utils_1.model.number().nullable(),
21
+ promotion_mirror_mode: utils_1.model.enum([...constants_1.PROMOTION_MIRROR_MODES]).nullable(),
22
+ config_version: utils_1.model.number().default(1),
23
+ metadata: utils_1.model.json().nullable(),
24
+ })
25
+ .indexes([
26
+ {
27
+ name: "IDX_coupon_product_variant_config_product_config_id",
28
+ on: ["product_config_id"],
29
+ },
30
+ {
31
+ name: "IDX_coupon_product_variant_config_variant_id",
32
+ on: ["variant_id"],
33
+ },
34
+ ]);
35
+ exports.default = CouponProductVariantConfig;
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLXByb2R1Y3QtdmFyaWFudC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb3Vwb24vbW9kZWxzL2NvdXBvbi1wcm9kdWN0LXZhcmlhbnQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQWlEO0FBQ2pELDRDQUlxQjtBQUVyQixNQUFNLDBCQUEwQixHQUFHLGFBQUs7S0FDckMsTUFBTSxDQUFDLCtCQUErQixFQUFFO0lBQ3ZDLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBQy9DLE9BQU8sRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUN0QyxpQkFBaUIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQy9CLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3hCLFlBQVksRUFBRSxhQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyx5QkFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDdkQsT0FBTyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDaEMsTUFBTSxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakMsVUFBVSxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDckMsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLDJCQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxRCxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxpQkFBaUIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzFDLDJCQUEyQixFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdEQscUJBQXFCLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsa0NBQXNCLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN6RSxjQUFjLEVBQUUsYUFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekMsUUFBUSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbEMsQ0FBQztLQUNELE9BQU8sQ0FBQztJQUNQO1FBQ0UsSUFBSSxFQUFFLHFEQUFxRDtRQUMzRCxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztLQUMxQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLDhDQUE4QztRQUNwRCxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUM7S0FDbkI7Q0FDRixDQUFDLENBQUE7QUFFSixrQkFBZSwwQkFBMEIsQ0FBQSJ9
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const constants_1 = require("../constants");
5
+ const CouponPromotionMirror = utils_1.model
6
+ .define("coupon_promotion_mirror", {
7
+ id: utils_1.model.id({ prefix: "cpmir" }).primaryKey(),
8
+ config_id: utils_1.model.text(),
9
+ variant_config_id: utils_1.model.text().nullable(),
10
+ promotion_id: utils_1.model.text().nullable(),
11
+ status: utils_1.model.enum([...constants_1.PROMOTION_MIRROR_STATUSES]).default("pending"),
12
+ last_error: utils_1.model.text().nullable(),
13
+ mirrored_at: utils_1.model.dateTime().nullable(),
14
+ metadata: utils_1.model.json().nullable(),
15
+ })
16
+ .indexes([
17
+ {
18
+ name: "IDX_coupon_promotion_mirror_config_id",
19
+ on: ["config_id"],
20
+ },
21
+ {
22
+ name: "IDX_coupon_promotion_mirror_promotion_id",
23
+ on: ["promotion_id"],
24
+ },
25
+ ]);
26
+ exports.default = CouponPromotionMirror;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLXByb21vdGlvbi1taXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb3Vwb24vbW9kZWxzL2NvdXBvbi1wcm9tb3Rpb24tbWlycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQWlEO0FBQ2pELDRDQUF3RDtBQUV4RCxNQUFNLHFCQUFxQixHQUFHLGFBQUs7S0FDaEMsTUFBTSxDQUFDLHlCQUF5QixFQUFFO0lBQ2pDLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBQzlDLFNBQVMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3ZCLGlCQUFpQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsWUFBWSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDckMsTUFBTSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLHFDQUF5QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3JFLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLFdBQVcsRUFBRSxhQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3hDLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ2xDLENBQUM7S0FDRCxPQUFPLENBQUM7SUFDUDtRQUNFLElBQUksRUFBRSx1Q0FBdUM7UUFDN0MsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDO0tBQ2xCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsMENBQTBDO1FBQ2hELEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQztLQUNyQjtDQUNGLENBQUMsQ0FBQTtBQUVKLGtCQUFlLHFCQUFxQixDQUFBIn0=