@mohasinac/appkit 2.7.53 → 2.7.54

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 (123) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +1 -1
  2. package/dist/_internal/server/jobs/core/auctionSettlement.js +6 -3
  3. package/dist/_internal/server/jobs/core/bundleStockSync.js +9 -7
  4. package/dist/_internal/server/jobs/core/onProductStockChange.d.ts +12 -3
  5. package/dist/_internal/server/jobs/core/onProductStockChange.js +12 -13
  6. package/dist/_internal/server/jobs/core/onProductWrite.js +1 -3
  7. package/dist/_internal/server/jobs/handlers/onProductStockChange.js +11 -2
  8. package/dist/client.d.ts +2 -0
  9. package/dist/client.js +1 -0
  10. package/dist/constants/field-names.d.ts +4 -3
  11. package/dist/constants/field-names.js +8 -8
  12. package/dist/errors/error-codes.d.ts +3 -0
  13. package/dist/errors/error-codes.js +3 -0
  14. package/dist/errors/messages.d.ts +3 -0
  15. package/dist/errors/messages.js +3 -0
  16. package/dist/features/admin/types/product.types.d.ts +1 -1
  17. package/dist/features/admin/types/product.types.js +2 -3
  18. package/dist/features/auctions/actions/bid-actions.d.ts +9 -0
  19. package/dist/features/auctions/actions/bid-actions.js +61 -0
  20. package/dist/features/auctions/components/AuctionDetailPageView.d.ts +2 -1
  21. package/dist/features/auctions/components/AuctionDetailPageView.js +5 -4
  22. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +3 -1
  23. package/dist/features/auctions/components/PlaceBidFormClient.js +32 -2
  24. package/dist/features/auctions/types/index.d.ts +1 -1
  25. package/dist/features/layout/AppLayoutShell.js +1 -1
  26. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +2 -11
  27. package/dist/features/products/api/[id]/route.js +4 -8
  28. package/dist/features/products/api/route.js +1 -3
  29. package/dist/features/products/components/AuctionsIndexListing.js +3 -11
  30. package/dist/features/products/components/PrizeDrawsIndexListing.js +2 -10
  31. package/dist/features/products/components/ProductFilters.d.ts +33 -9
  32. package/dist/features/products/components/ProductFilters.js +6 -29
  33. package/dist/features/products/components/ProductForm.js +2 -3
  34. package/dist/features/products/constants/sieve.d.ts +162 -0
  35. package/dist/features/products/constants/sieve.js +95 -0
  36. package/dist/features/products/repository/products.repository.d.ts +5 -0
  37. package/dist/features/products/repository/products.repository.js +23 -3
  38. package/dist/features/products/schemas/firestore.d.ts +4 -4
  39. package/dist/features/products/schemas/firestore.js +2 -3
  40. package/dist/features/products/schemas/index.d.ts +6 -6
  41. package/dist/features/products/schemas/index.js +2 -6
  42. package/dist/features/products/types/index.d.ts +1 -1
  43. package/dist/features/seller/actions/offer-actions.js +2 -2
  44. package/dist/features/wishlist/types/index.d.ts +1 -1
  45. package/dist/index.d.ts +6 -3
  46. package/dist/index.js +6 -4
  47. package/dist/seed/addresses-seed-data.d.ts +2 -18
  48. package/dist/seed/addresses-seed-data.js +137 -203
  49. package/dist/seed/bids-seed-data.d.ts +2 -8
  50. package/dist/seed/bids-seed-data.js +172 -648
  51. package/dist/seed/blog-posts-seed-data.d.ts +0 -5
  52. package/dist/seed/blog-posts-seed-data.js +341 -596
  53. package/dist/seed/carousel-slides-seed-data.d.ts +0 -5
  54. package/dist/seed/carousel-slides-seed-data.js +61 -192
  55. package/dist/seed/carousels-seed-data.js +18 -1
  56. package/dist/seed/cart-seed-data.d.ts +1 -18
  57. package/dist/seed/cart-seed-data.js +116 -293
  58. package/dist/seed/categories-seed-data.d.ts +0 -6
  59. package/dist/seed/categories-seed-data.js +1409 -1537
  60. package/dist/seed/claimed-coupons-seed-data.d.ts +0 -11
  61. package/dist/seed/claimed-coupons-seed-data.js +32 -29
  62. package/dist/seed/conversations-seed-data.d.ts +0 -6
  63. package/dist/seed/conversations-seed-data.js +132 -280
  64. package/dist/seed/coupon-usage-seed-data.d.ts +0 -16
  65. package/dist/seed/coupon-usage-seed-data.js +30 -44
  66. package/dist/seed/coupons-seed-data.d.ts +0 -6
  67. package/dist/seed/coupons-seed-data.js +141 -489
  68. package/dist/seed/events-seed-data.d.ts +0 -6
  69. package/dist/seed/events-seed-data.js +201 -379
  70. package/dist/seed/faq-seed-data.d.ts +0 -14
  71. package/dist/seed/faq-seed-data.js +609 -1184
  72. package/dist/seed/grouped-listings-seed-data.d.ts +119 -8
  73. package/dist/seed/grouped-listings-seed-data.js +148 -233
  74. package/dist/seed/history-seed-data.d.ts +0 -7
  75. package/dist/seed/history-seed-data.js +50 -54
  76. package/dist/seed/homepage-sections-seed-data.d.ts +0 -5
  77. package/dist/seed/homepage-sections-seed-data.js +83 -175
  78. package/dist/seed/index.d.ts +1 -1
  79. package/dist/seed/index.js +1 -1
  80. package/dist/seed/manifest.js +2 -2
  81. package/dist/seed/notifications-seed-data.d.ts +0 -6
  82. package/dist/seed/notifications-seed-data.js +309 -196
  83. package/dist/seed/offers-seed-data.d.ts +0 -8
  84. package/dist/seed/offers-seed-data.js +118 -197
  85. package/dist/seed/orders-seed-data.d.ts +2 -8
  86. package/dist/seed/orders-seed-data.js +248 -1510
  87. package/dist/seed/payouts-seed-data.d.ts +0 -6
  88. package/dist/seed/payouts-seed-data.js +102 -441
  89. package/dist/seed/products-auctions-seed-data.d.ts +1 -14
  90. package/dist/seed/products-auctions-seed-data.js +612 -1084
  91. package/dist/seed/products-preorders-seed-data.d.ts +119 -14
  92. package/dist/seed/products-preorders-seed-data.js +154 -455
  93. package/dist/seed/products-standard-seed-data.d.ts +1 -15
  94. package/dist/seed/products-standard-seed-data.js +1355 -4128
  95. package/dist/seed/reviews-seed-data.d.ts +2 -8
  96. package/dist/seed/reviews-seed-data.js +99 -1182
  97. package/dist/seed/scammers-seed-data.d.ts +0 -15
  98. package/dist/seed/scammers-seed-data.js +36 -37
  99. package/dist/seed/sessions-seed-data.d.ts +0 -13
  100. package/dist/seed/sessions-seed-data.js +58 -335
  101. package/dist/seed/site-settings-seed-data.d.ts +0 -4
  102. package/dist/seed/site-settings-seed-data.js +61 -52
  103. package/dist/seed/store-addresses-seed-data.js +27 -151
  104. package/dist/seed/store-extensions-seed-data.d.ts +0 -7
  105. package/dist/seed/store-extensions-seed-data.js +147 -261
  106. package/dist/seed/stores-seed-data.d.ts +0 -5
  107. package/dist/seed/stores-seed-data.js +222 -184
  108. package/dist/seed/sub-listings-seed-data.d.ts +119 -0
  109. package/dist/seed/sub-listings-seed-data.js +447 -0
  110. package/dist/seed/support-tickets-seed-data.d.ts +0 -7
  111. package/dist/seed/support-tickets-seed-data.js +82 -75
  112. package/dist/seed/users-seed-data.d.ts +0 -5
  113. package/dist/seed/users-seed-data.js +279 -634
  114. package/dist/seed/wishlists-seed-data.d.ts +0 -9
  115. package/dist/seed/wishlists-seed-data.js +36 -52
  116. package/dist/seo/json-ld.js +6 -4
  117. package/dist/styles.css +8052 -3
  118. package/dist/utils/index.d.ts +1 -0
  119. package/dist/utils/index.js +1 -0
  120. package/dist/utils/search-tokens.d.ts +2 -0
  121. package/dist/utils/search-tokens.js +21 -0
  122. package/package.json +2 -2
  123. package/scripts/seed-cli.mjs +2 -2
@@ -1,552 +1,204 @@
1
- /**
2
- * Coupons Seed DataLetItRip Collectibles Platform
3
- * 5 coupons covering all key scenarios: welcome, category-scoped, free shipping,
4
- * partially-used, and exhausted (limit reached).
5
- * coupon- prefix, id === code-based slug.
1
+ /*
2
+ * WHY: Seeds 10 discount coupons for YGO marketplace covers percentage, fixed, free_shipping, buy_x_get_y types.
3
+ * WHAT: 5 admin-scoped (YUGI10, EXODIA50, FREESHIP499, NEWDUELIST, TOURNAMENT2026) + 5 seller-scoped (KAIBA25, BLUEEYESVIP, BUYNOW10, SEALED20, GRADEDSET). Mix of active, upcoming, and exhausted.
4
+ *
5
+ * EXPORTS:
6
+ * couponsSeedData — Array of Partial<CouponDocument> for seed runner
7
+ *
8
+ * @tag domain:coupons
9
+ * @tag layer:seed
10
+ * @tag pattern:none
11
+ * @tag access:server-only
12
+ * @tag consumers:seed/index.ts,seed/runner.ts,SeedPanel
13
+ * @tag sideEffects:none
6
14
  */
7
15
  import { COUPON_FIELDS } from "../constants/field-names";
8
16
  const NOW = new Date();
9
17
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
10
18
  const daysAhead = (n) => new Date(NOW.getTime() + n * 86400000);
11
19
  export const couponsSeedData = [
12
- // ── 1. WELCOME10 — 10% off, first-order only, active ─────────────────────
20
+ // ── Admin coupons ──────────────────────────────────────────────────────────
13
21
  {
14
- id: "coupon-welcome10",
15
- code: "WELCOME10",
16
- name: "Welcome Discount — 10% Off Your First Order",
17
- description: "10% off your first order on LetItRip. Valid on all categories. Maximum discount ₹200. First-time buyers only.",
22
+ id: "coupon-yugi10",
23
+ code: "YUGI10",
24
+ name: "Yugi's Welcome — 10% Off",
25
+ description: "10% off your first order on LetItRip. Maximum discount ₹200. First-time buyers only.",
18
26
  type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
19
27
  scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
20
- discount: {
21
- value: 10,
22
- maxDiscount: 20000,
23
- minPurchase: 50000,
24
- },
25
- usage: {
26
- totalLimit: undefined,
27
- perUserLimit: 1,
28
- currentUsage: 847,
29
- },
30
- validity: {
31
- startDate: daysAgo(120),
32
- endDate: daysAhead(240),
33
- isActive: true,
34
- },
35
- restrictions: {
36
- firstTimeUserOnly: true,
37
- combineWithSellerCoupons: true,
38
- },
28
+ discount: { value: 10, maxDiscount: 20000, minPurchase: 50000 },
29
+ usage: { totalLimit: undefined, perUserLimit: 1, currentUsage: 312 },
30
+ validity: { startDate: daysAgo(90), endDate: daysAhead(180), isActive: true },
31
+ restrictions: { firstTimeUserOnly: true, combineWithSellerCoupons: true },
39
32
  createdBy: "user-admin-letitrip",
40
- createdAt: daysAgo(120),
41
- updatedAt: daysAgo(2),
42
- stats: {
43
- totalUses: 847,
44
- totalRevenue: 423500000,
45
- totalDiscount: 8470000,
46
- },
33
+ createdAt: daysAgo(90),
34
+ updatedAt: daysAgo(5),
35
+ stats: { totalUses: 312, totalRevenue: 156000000, totalDiscount: 3120000 },
47
36
  },
48
- // ── 2. POKEMON25 — ₹250 fixed off Pokémon category, active ───────────────
49
37
  {
50
- id: "coupon-pokemon25",
51
- code: "POKEMON25",
52
- name: "Pokémon Collector's Discount — ₹250 Off",
53
- description: "₹250 off on any Pokémon TCG category purchase. Minimum order 1,000. Valid on trading cards, sealed products, and vintage Pokémon. Can be combined with seller coupons.",
38
+ id: "coupon-exodia50",
39
+ code: "EXODIA50",
40
+ name: "Exodia's Power — ₹500 Off",
41
+ description: "₹500 off on orders above2,000. All categories. Limited to 500 total uses.",
54
42
  type: COUPON_FIELDS.TYPE_VALUES.FIXED,
55
43
  scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
56
- discount: {
57
- value: 25000,
58
- maxDiscount: 25000,
59
- minPurchase: 100000,
60
- },
61
- usage: {
62
- totalLimit: undefined,
63
- perUserLimit: 3,
64
- currentUsage: 234,
65
- },
66
- validity: {
67
- startDate: daysAgo(60),
68
- endDate: daysAhead(120),
69
- isActive: true,
70
- },
71
- restrictions: {
72
- applicableCategories: ["category-pokemon-cards", "category-sealed-products", "category-vintage-pokemon", "category-vintage-tcg"],
73
- firstTimeUserOnly: false,
74
- combineWithSellerCoupons: true,
75
- },
44
+ discount: { value: 50000, maxDiscount: 50000, minPurchase: 200000 },
45
+ usage: { totalLimit: 500, perUserLimit: 2, currentUsage: 187 },
46
+ validity: { startDate: daysAgo(30), endDate: daysAhead(60), isActive: true },
47
+ restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
76
48
  createdBy: "user-admin-letitrip",
77
- createdAt: daysAgo(60),
78
- updatedAt: daysAgo(5),
79
- stats: {
80
- totalUses: 234,
81
- totalRevenue: 117000000,
82
- totalDiscount: 5850000,
83
- },
49
+ createdAt: daysAgo(30),
50
+ updatedAt: daysAgo(3),
51
+ stats: { totalUses: 187, totalRevenue: 93500000, totalDiscount: 9350000 },
84
52
  },
85
- // ── 3. FREESHIP999 — free shipping on orders ₹999+, active ───────────────
86
53
  {
87
- id: "coupon-freeship999",
88
- code: "FREESHIP999",
89
- name: "Free Shipping on Orders 999+",
90
- description: "Free standard shipping on any order above ₹999. No category restriction. Note: free shipping is already automatic above ₹999 — this coupon extends the same benefit and can be applied to orders that were manually discounted below ₹999.",
54
+ id: "coupon-freeship499",
55
+ code: "FREESHIP499",
56
+ name: "Free Shipping on ₹499+",
57
+ description: "Free shipping on all orders above ₹499. No category restrictions.",
91
58
  type: COUPON_FIELDS.TYPE_VALUES.FREE_SHIPPING,
92
59
  scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
93
- discount: {
94
- value: 100,
95
- minPurchase: 99900,
96
- },
97
- usage: {
98
- totalLimit: undefined,
99
- perUserLimit: undefined,
100
- currentUsage: 1240,
101
- },
102
- validity: {
103
- startDate: daysAgo(180),
104
- endDate: undefined,
105
- isActive: true,
106
- },
107
- restrictions: {
108
- firstTimeUserOnly: false,
109
- combineWithSellerCoupons: true,
110
- },
60
+ discount: { value: 0, maxDiscount: 0, minPurchase: 49900 },
61
+ usage: { totalLimit: undefined, perUserLimit: 5, currentUsage: 1024 },
62
+ validity: { startDate: daysAgo(60), endDate: daysAhead(120), isActive: true },
63
+ restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
111
64
  createdBy: "user-admin-letitrip",
112
- createdAt: daysAgo(180),
65
+ createdAt: daysAgo(60),
113
66
  updatedAt: daysAgo(1),
114
- stats: {
115
- totalUses: 1240,
116
- totalRevenue: 620000000,
117
- totalDiscount: 6200000,
118
- },
67
+ stats: { totalUses: 1024, totalRevenue: 512000000, totalDiscount: 15360000 },
119
68
  },
120
- // ── 4. BLADER20 — 20% off Beyblades, partially used (30/50) ──────────────
121
69
  {
122
- id: "coupon-blader20",
123
- code: "BLADER20",
124
- name: "Blader's Discount — 20% Off All Beyblade Products",
125
- description: "20% off all Beyblade X and Burst products. Maximum discount ₹500 per order. Limited to 50 uses total — 30 used so far. Created for the India launch promotion.",
70
+ id: "coupon-newduelist",
71
+ code: "NEWDUELIST",
72
+ name: "New Duelist — 20% Off First Order",
73
+ description: "20% off your first order. Maximum discount ₹400. First-time buyers only.",
126
74
  type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
127
75
  scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
128
- discount: {
129
- value: 20,
130
- maxDiscount: 50000,
131
- minPurchase: 0,
132
- },
133
- usage: {
134
- totalLimit: 50,
135
- perUserLimit: 1,
136
- currentUsage: 30,
137
- },
138
- validity: {
139
- startDate: daysAgo(45),
140
- endDate: daysAhead(15),
141
- isActive: true,
142
- },
143
- restrictions: {
144
- applicableCategories: ["category-beyblade-tops", "category-spinning-tops"],
145
- firstTimeUserOnly: false,
146
- combineWithSellerCoupons: false,
147
- },
76
+ discount: { value: 20, maxDiscount: 40000, minPurchase: 100000 },
77
+ usage: { totalLimit: undefined, perUserLimit: 1, currentUsage: 89 },
78
+ validity: { startDate: daysAgo(14), endDate: daysAhead(90), isActive: true },
79
+ restrictions: { firstTimeUserOnly: true, combineWithSellerCoupons: false },
148
80
  createdBy: "user-admin-letitrip",
149
- createdAt: daysAgo(45),
150
- updatedAt: daysAgo(3),
151
- stats: {
152
- totalUses: 30,
153
- totalRevenue: 15000000,
154
- totalDiscount: 300000,
155
- },
81
+ createdAt: daysAgo(14),
82
+ updatedAt: daysAgo(2),
83
+ stats: { totalUses: 89, totalRevenue: 44500000, totalDiscount: 3560000 },
156
84
  },
157
- // ── 5. VIP-EXCLUSIVE — 25% off, limit 10 (EXHAUSTED) ─────────────────────
158
85
  {
159
- id: "coupon-vip-exclusive",
160
- code: "VIP2026",
161
- name: "VIP Collector's Exclusive 25% Off (Limit Reached)",
162
- description: "25% off any order exclusive to LetItRip VIP program members. Limited to 10 uses total. This coupon is now exhausted. Watch for VIP2026B in the next newsletter.",
163
- type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
86
+ id: "coupon-tournament2026",
87
+ code: "TOURNAMENT2026",
88
+ name: "Tournament Season₹200 Off",
89
+ description: "₹200 off on any purchase ₹1,000+. Valid during 2026 tournament season.",
90
+ type: COUPON_FIELDS.TYPE_VALUES.FIXED,
164
91
  scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
165
- discount: {
166
- value: 25,
167
- maxDiscount: 250000,
168
- minPurchase: 200000,
169
- },
170
- usage: {
171
- totalLimit: 10,
172
- perUserLimit: 1,
173
- currentUsage: 10,
174
- },
175
- validity: {
176
- startDate: daysAgo(30),
177
- endDate: daysAhead(60),
178
- isActive: false,
179
- },
180
- restrictions: {
181
- firstTimeUserOnly: false,
182
- combineWithSellerCoupons: false,
183
- },
92
+ discount: { value: 20000, maxDiscount: 20000, minPurchase: 100000 },
93
+ usage: { totalLimit: 1000, perUserLimit: 3, currentUsage: 456 },
94
+ validity: { startDate: daysAgo(45), endDate: daysAhead(45), isActive: true },
95
+ restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
184
96
  createdBy: "user-admin-letitrip",
185
- createdAt: daysAgo(30),
186
- updatedAt: daysAgo(10),
187
- stats: {
188
- totalUses: 10,
189
- totalRevenue: 5000000,
190
- totalDiscount: 1250000,
191
- },
97
+ createdAt: daysAgo(45),
98
+ updatedAt: daysAgo(1),
99
+ stats: { totalUses: 456, totalRevenue: 228000000, totalDiscount: 9120000 },
192
100
  },
193
- // ── 6. PALACE15 15% off Pokémon Palace (store-scoped) ──────────────────
101
+ // ── Seller coupons (Kaiba Corp) ────────────────────────────────────────────
194
102
  {
195
- id: "coupon-palace15",
196
- code: "PALACE15",
197
- name: "Pokémon Palace15% Loyalty Discount",
198
- description: "15% off your next order at Pokémon Palace. Exclusively for repeat customers. Min order 1,500. Max discount ₹750.",
103
+ id: "coupon-kaiba25",
104
+ code: "KAIBA25",
105
+ name: "Kaiba Corp25% Off (Max ₹500)",
106
+ description: "25% off any Kaiba Corp Card Vault purchase. Maximum discount ₹500.",
199
107
  type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
200
108
  scope: COUPON_FIELDS.SCOPE_VALUES.SELLER,
201
- storeId: "store-pokemon-palace",
202
- discount: {
203
- value: 15,
204
- maxDiscount: 75000,
205
- minPurchase: 150000,
206
- },
207
- usage: {
208
- totalLimit: 100,
209
- perUserLimit: 2,
210
- currentUsage: 23,
211
- },
212
- validity: {
213
- startDate: daysAgo(20),
214
- endDate: daysAhead(40),
215
- isActive: true,
216
- },
217
- restrictions: {
218
- firstTimeUserOnly: false,
219
- combineWithSellerCoupons: false,
220
- },
221
- createdBy: "user-aryan-kapoor",
109
+ storeId: "store-kaiba-corp-cards",
110
+ discount: { value: 25, maxDiscount: 50000, minPurchase: 100000 },
111
+ usage: { totalLimit: 200, perUserLimit: 2, currentUsage: 67 },
112
+ validity: { startDate: daysAgo(20), endDate: daysAhead(40), isActive: true },
113
+ restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: false },
114
+ createdBy: "user-seto-kaiba",
222
115
  createdAt: daysAgo(20),
223
- updatedAt: daysAgo(1),
224
- stats: {
225
- totalUses: 23,
226
- totalRevenue: 11500000,
227
- totalDiscount: 1725000,
228
- },
116
+ updatedAt: daysAgo(4),
117
+ stats: { totalUses: 67, totalRevenue: 33500000, totalDiscount: 3350000 },
229
118
  },
230
- // ── 7. DIECAST10 — ₹100 off Diecast Depot (store-scoped) ─────────────────
231
119
  {
232
- id: "coupon-diecast10",
233
- code: "DIECAST10",
234
- name: "Diecast Depot₹100 Off Your Next Order",
235
- description: "₹100 flat off any order at Diecast Depot. Works on all Hot Wheels and Tomica cars. Min order ₹500.",
236
- type: COUPON_FIELDS.TYPE_VALUES.FIXED,
120
+ id: "coupon-blueeyesvip",
121
+ code: "BLUEEYESVIP",
122
+ name: "Blue-Eyes VIP15% Off Graded Cards",
123
+ description: "15% off graded cards at Kaiba Corp. For our top collectors.",
124
+ type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
237
125
  scope: COUPON_FIELDS.SCOPE_VALUES.SELLER,
238
- storeId: "store-diecast-depot",
239
- discount: {
240
- value: 10000,
241
- maxDiscount: 10000,
242
- minPurchase: 50000,
243
- },
244
- usage: {
245
- totalLimit: 200,
246
- perUserLimit: 3,
247
- currentUsage: 67,
248
- },
249
- validity: {
250
- startDate: daysAgo(15),
251
- endDate: daysAhead(60),
252
- isActive: true,
253
- },
126
+ storeId: "store-kaiba-corp-cards",
127
+ discount: { value: 15, maxDiscount: 75000, minPurchase: 200000 },
128
+ usage: { totalLimit: 50, perUserLimit: 1, currentUsage: 12 },
129
+ validity: { startDate: daysAgo(10), endDate: daysAhead(60), isActive: true },
254
130
  restrictions: {
131
+ applicableCategories: ["category-psa-graded", "category-bgs-graded", "category-cgc-graded"],
255
132
  firstTimeUserOnly: false,
256
133
  combineWithSellerCoupons: false,
257
134
  },
258
- createdBy: "user-vikram-mehta",
135
+ createdBy: "user-seto-kaiba",
136
+ createdAt: daysAgo(10),
137
+ updatedAt: daysAgo(3),
138
+ stats: { totalUses: 12, totalRevenue: 6000000, totalDiscount: 900000 },
139
+ },
140
+ {
141
+ id: "coupon-buynow10",
142
+ code: "BUYNOW10",
143
+ name: "Buy 3 Singles, Get 10% Off",
144
+ description: "Buy any 3 single cards from Kaiba Corp and get 10% off the total.",
145
+ type: COUPON_FIELDS.TYPE_VALUES.BUY_X_GET_Y,
146
+ scope: COUPON_FIELDS.SCOPE_VALUES.SELLER,
147
+ storeId: "store-kaiba-corp-cards",
148
+ discount: { value: 10, maxDiscount: 30000, minPurchase: 0 },
149
+ bxgy: {
150
+ buyQuantity: 3,
151
+ getQuantity: 0,
152
+ applicableCategories: ["category-monster-cards", "category-spell-cards", "category-trap-cards", "category-extra-deck-cards"],
153
+ },
154
+ usage: { totalLimit: 100, perUserLimit: 3, currentUsage: 34 },
155
+ validity: { startDate: daysAgo(15), endDate: daysAhead(45), isActive: true },
156
+ restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: false },
157
+ createdBy: "user-seto-kaiba",
259
158
  createdAt: daysAgo(15),
260
159
  updatedAt: daysAgo(2),
261
- stats: {
262
- totalUses: 67,
263
- totalRevenue: 33500000,
264
- totalDiscount: 670000,
265
- },
160
+ stats: { totalUses: 34, totalRevenue: 17000000, totalDiscount: 1700000 },
266
161
  },
267
- // ── 8. BEYARENA20 — 20% off Beyblade Arena (store-scoped) ────────────────
268
162
  {
269
- id: "coupon-beyarena20",
270
- code: "BEYARENA20",
271
- name: "Beyblade Arena Launch Special — 20% Off",
272
- description: "20% off all Beyblade X products at Beyblade Arena. Limited launch promotion. Max discount ₹500. One use per customer.",
163
+ id: "coupon-sealed20",
164
+ code: "SEALED20",
165
+ name: "20% Off Sealed Products",
166
+ description: "20% off sealed booster packs, boxes, and tins at Kaiba Corp.",
273
167
  type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
274
168
  scope: COUPON_FIELDS.SCOPE_VALUES.SELLER,
275
- storeId: "store-beyblade-arena",
276
- discount: {
277
- value: 20,
278
- maxDiscount: 50000,
279
- minPurchase: 0,
280
- },
281
- usage: {
282
- totalLimit: 50,
283
- perUserLimit: 1,
284
- currentUsage: 42,
285
- },
286
- validity: {
287
- startDate: daysAgo(10),
288
- endDate: daysAhead(20),
289
- isActive: true,
290
- },
169
+ storeId: "store-kaiba-corp-cards",
170
+ discount: { value: 20, maxDiscount: 100000, minPurchase: 100000 },
171
+ usage: { totalLimit: 75, perUserLimit: 2, currentUsage: 28 },
172
+ validity: { startDate: daysAgo(7), endDate: daysAhead(30), isActive: true },
291
173
  restrictions: {
292
- applicableCategories: ["category-beyblade-tops", "category-spinning-tops"],
174
+ applicableCategories: ["category-booster-packs", "category-booster-boxes", "category-collector-tins", "category-starter-structure"],
293
175
  firstTimeUserOnly: false,
294
176
  combineWithSellerCoupons: false,
295
177
  },
296
- createdBy: "user-rohit-joshi",
297
- createdAt: daysAgo(10),
178
+ createdBy: "user-seto-kaiba",
179
+ createdAt: daysAgo(7),
298
180
  updatedAt: daysAgo(1),
299
- stats: {
300
- totalUses: 42,
301
- totalRevenue: 21000000,
302
- totalDiscount: 420000,
303
- },
304
- },
305
- // ── 9. CARDGAME5 — Free shipping from CardGame Hub (store-scoped) ─────────
306
- {
307
- id: "coupon-cardgame-freeship",
308
- code: "CARDGAME5",
309
- name: "CardGame Hub — Free Shipping",
310
- description: "Free shipping on any order from CardGame Hub. No minimum order. Available to all buyers.",
311
- type: COUPON_FIELDS.TYPE_VALUES.FREE_SHIPPING,
312
- scope: COUPON_FIELDS.SCOPE_VALUES.SELLER,
313
- storeId: "store-cardgame-hub",
314
- discount: {
315
- value: 100,
316
- minPurchase: 0,
317
- },
318
- usage: {
319
- totalLimit: undefined,
320
- perUserLimit: 5,
321
- currentUsage: 89,
322
- },
323
- validity: {
324
- startDate: daysAgo(25),
325
- endDate: daysAhead(90),
326
- isActive: true,
327
- },
328
- restrictions: {
329
- firstTimeUserOnly: false,
330
- combineWithSellerCoupons: true,
331
- },
332
- createdBy: "user-nisha-reddy",
333
- createdAt: daysAgo(25),
334
- updatedAt: daysAgo(3),
335
- stats: {
336
- totalUses: 89,
337
- totalRevenue: 44500000,
338
- totalDiscount: 445000,
339
- },
181
+ stats: { totalUses: 28, totalRevenue: 14000000, totalDiscount: 2800000 },
340
182
  },
341
- // ── 10. TOKYOTOYS10 — 10% off Tokyo Toys India (store-scoped) ────────────
342
183
  {
343
- id: "coupon-tokyotoys10",
344
- code: "TOKYOTOYS10",
345
- name: "Tokyo Toys India 10% New Customer Discount",
346
- description: "10% off your first order at Tokyo Toys India. Valid on all anime figures, Gundam kits, and Funko Pops. Min order ₹2,000. Max discount ₹500.",
184
+ id: "coupon-gradedset",
185
+ code: "GRADEDSET",
186
+ name: "12% Off Graded Cards Bundle",
187
+ description: "12% off when purchasing any graded card from Kaiba Corp.",
347
188
  type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
348
189
  scope: COUPON_FIELDS.SCOPE_VALUES.SELLER,
349
- storeId: "store-tokyo-toys-india",
350
- discount: {
351
- value: 10,
352
- maxDiscount: 50000,
353
- minPurchase: 200000,
354
- },
355
- usage: {
356
- totalLimit: 150,
357
- perUserLimit: 1,
358
- currentUsage: 38,
359
- },
360
- validity: {
361
- startDate: daysAgo(30),
362
- endDate: daysAhead(60),
363
- isActive: true,
364
- },
190
+ storeId: "store-kaiba-corp-cards",
191
+ discount: { value: 12, maxDiscount: 60000, minPurchase: 150000 },
192
+ usage: { totalLimit: 100, perUserLimit: 2, currentUsage: 19 },
193
+ validity: { startDate: daysAgo(5), endDate: daysAhead(55), isActive: true },
365
194
  restrictions: {
366
- firstTimeUserOnly: true,
195
+ applicableCategories: ["category-psa-graded", "category-bgs-graded", "category-cgc-graded", "category-raw-near-mint"],
196
+ firstTimeUserOnly: false,
367
197
  combineWithSellerCoupons: false,
368
198
  },
369
- createdBy: "user-priya-singh",
370
- createdAt: daysAgo(30),
371
- updatedAt: daysAgo(2),
372
- stats: {
373
- totalUses: 38,
374
- totalRevenue: 19000000,
375
- totalDiscount: 950000,
376
- },
377
- },
378
- // ── P29 expansion (S17 2026-05-12) — 10 more coupons ─────────────────────
379
- // ── 11. NEWUSER5 — flat ₹50 first-order coupon, active ───────────────────
380
- {
381
- id: "coupon-newuser5",
382
- code: "NEWUSER5",
383
- name: "₹50 Off First Order",
384
- description: "Flat ₹50 off your first order on LetItRip. No minimum purchase.",
385
- type: COUPON_FIELDS.TYPE_VALUES.FIXED,
386
- scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
387
- discount: { value: 5000, minPurchase: 0 },
388
- usage: { totalLimit: undefined, perUserLimit: 1, currentUsage: 312 },
389
- validity: { startDate: daysAgo(90), endDate: daysAhead(180), isActive: true },
390
- restrictions: { firstTimeUserOnly: true, combineWithSellerCoupons: true },
391
- createdBy: "user-admin-letitrip",
392
- createdAt: daysAgo(90),
393
- updatedAt: daysAgo(3),
394
- stats: { totalUses: 312, totalRevenue: 156000000, totalDiscount: 1560000 },
395
- },
396
- // ── 12. FLASH24 — 30% flash sale, expired ────────────────────────────────
397
- {
398
- id: "coupon-flash24",
399
- code: "FLASH24",
400
- name: "24-Hour Flash Sale — 30% Off",
401
- description: "30% off everything for 24 hours only. Maximum discount ₹500.",
402
- type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
403
- scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
404
- discount: { value: 30, maxDiscount: 50000, minPurchase: 100000 },
405
- usage: { totalLimit: 200, perUserLimit: 1, currentUsage: 187 },
406
- validity: { startDate: daysAgo(40), endDate: daysAgo(39), isActive: false },
407
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: false },
408
- createdBy: "user-admin-letitrip",
409
- createdAt: daysAgo(41),
410
- updatedAt: daysAgo(39),
411
- stats: { totalUses: 187, totalRevenue: 374000000, totalDiscount: 11220000 },
412
- },
413
- // ── 13. REFERRAL200 — referral reward, active ────────────────────────────
414
- {
415
- id: "coupon-referral200",
416
- code: "REFERRAL200",
417
- name: "Referral Reward — ₹200 Off",
418
- description: "Refer a friend, both get ₹200 off the next order. Min ₹1,000.",
419
- type: COUPON_FIELDS.TYPE_VALUES.FIXED,
420
- scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
421
- discount: { value: 20000, minPurchase: 100000 },
422
- usage: { totalLimit: undefined, perUserLimit: 5, currentUsage: 89 },
423
- validity: { startDate: daysAgo(180), endDate: daysAhead(180), isActive: true },
424
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
425
- createdBy: "user-admin-letitrip",
426
- createdAt: daysAgo(180),
427
- updatedAt: daysAgo(5),
428
- stats: { totalUses: 89, totalRevenue: 89000000, totalDiscount: 1780000 },
429
- },
430
- // ── 14. PREPAID5 — prepaid order bonus, active ───────────────────────────
431
- {
432
- id: "coupon-prepaid5",
433
- code: "PREPAID5",
434
- name: "5% Off Prepaid Orders",
435
- description: "Pay online (UPI/card) and get an extra 5% off. Max ₹300 discount.",
436
- type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
437
- scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
438
- discount: { value: 5, maxDiscount: 30000, minPurchase: 50000 },
439
- usage: { totalLimit: undefined, perUserLimit: undefined, currentUsage: 1024 },
440
- validity: { startDate: daysAgo(150), endDate: daysAhead(150), isActive: true },
441
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
442
- createdBy: "user-admin-letitrip",
443
- createdAt: daysAgo(150),
444
- updatedAt: daysAgo(1),
445
- stats: { totalUses: 1024, totalRevenue: 512000000, totalDiscount: 25600000 },
446
- },
447
- // ── 15. GUNDAMGALAXY12 — store coupon for Gundam Galaxy, active ─────────
448
- {
449
- id: "coupon-gundamgalaxy12",
450
- code: "GUNDAMGALAXY12",
451
- name: "Gundam Galaxy 12% Off",
452
- description: "12% off everything at Gundam Galaxy store. Max ₹400.",
453
- type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
454
- scope: COUPON_FIELDS.SCOPE_VALUES.SELLER,
455
- storeId: "store-gundam-galaxy",
456
- discount: { value: 12, maxDiscount: 40000, minPurchase: 250000 },
457
- usage: { totalLimit: 100, perUserLimit: 2, currentUsage: 24 },
458
- validity: { startDate: daysAgo(45), endDate: daysAhead(60), isActive: true },
459
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: false },
460
- createdBy: "user-amit-sharma",
461
- createdAt: daysAgo(45),
462
- updatedAt: daysAgo(3),
463
- stats: { totalUses: 24, totalRevenue: 60000000, totalDiscount: 7200000 },
464
- },
465
- // ── 16. VINTAGEVAULT8 — store coupon for Vintage Vault, expired ─────────
466
- {
467
- id: "coupon-vintagevault8",
468
- code: "VINTAGEVAULT8",
469
- name: "Vintage Vault 8% Off — Diwali Special",
470
- description: "Diwali special — 8% off vintage collectibles. Expired Nov 2025.",
471
- type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
472
- scope: COUPON_FIELDS.SCOPE_VALUES.SELLER,
473
- storeId: "store-vintage-vault",
474
- discount: { value: 8, maxDiscount: 50000, minPurchase: 500000 },
475
- usage: { totalLimit: 50, perUserLimit: 1, currentUsage: 28 },
476
- validity: { startDate: daysAgo(180), endDate: daysAgo(150), isActive: false },
477
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: false },
478
- createdBy: "user-priya-singh",
479
- createdAt: daysAgo(180),
480
- updatedAt: daysAgo(150),
481
- stats: { totalUses: 28, totalRevenue: 140000000, totalDiscount: 11200000 },
482
- },
483
- // ── 17. AUCTION25 — 25% off auction shipping, active ────────────────────
484
- {
485
- id: "coupon-auction25",
486
- code: "AUCTION25",
487
- name: "25% Off Auction Wins (Shipping)",
488
- description: "Auction winners get 25% off shipping. Max ₹250 discount.",
489
- type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
490
- scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
491
- discount: { value: 25, maxDiscount: 25000, minPurchase: 0 },
492
- usage: { totalLimit: undefined, perUserLimit: undefined, currentUsage: 56 },
493
- validity: { startDate: daysAgo(60), endDate: daysAhead(120), isActive: true },
494
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
495
- createdBy: "user-admin-letitrip",
496
- createdAt: daysAgo(60),
497
- updatedAt: daysAgo(4),
498
- stats: { totalUses: 56, totalRevenue: 28000000, totalDiscount: 1400000 },
499
- },
500
- // ── 18. SUMMER15 — seasonal 15% off, upcoming ────────────────────────────
501
- {
502
- id: "coupon-summer15",
503
- code: "SUMMER15",
504
- name: "Summer Sale 15% Off",
505
- description: "15% off summer 2026 collectibles. Max ₹600. Starts in 2 weeks.",
506
- type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
507
- scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
508
- discount: { value: 15, maxDiscount: 60000, minPurchase: 200000 },
509
- usage: { totalLimit: 500, perUserLimit: 1, currentUsage: 0 },
510
- validity: { startDate: daysAhead(14), endDate: daysAhead(45), isActive: true },
511
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
512
- createdBy: "user-admin-letitrip",
513
- createdAt: daysAgo(10),
514
- updatedAt: daysAgo(2),
515
- stats: { totalUses: 0, totalRevenue: 0, totalDiscount: 0 },
516
- },
517
- // ── 19. RETROVAULT10 — store coupon for Vintage Vault, active ────────────
518
- {
519
- id: "coupon-retrovault10",
520
- code: "RETROVAULT10",
521
- name: "Retro Vault 10% Off",
522
- description: "10% off retro collectibles at Vintage Vault. Max ₹350.",
523
- type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
524
- scope: COUPON_FIELDS.SCOPE_VALUES.SELLER,
525
- storeId: "store-vintage-vault",
526
- discount: { value: 10, maxDiscount: 35000, minPurchase: 200000 },
527
- usage: { totalLimit: 75, perUserLimit: 1, currentUsage: 19 },
528
- validity: { startDate: daysAgo(20), endDate: daysAhead(40), isActive: true },
529
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: false },
530
- createdBy: "user-priya-singh",
531
- createdAt: daysAgo(20),
532
- updatedAt: daysAgo(1),
533
- stats: { totalUses: 19, totalRevenue: 47500000, totalDiscount: 3325000 },
534
- },
535
- // ── 20. BIGBANG2026 — ₹1,000 off orders ₹10k+, active ───────────────────
536
- {
537
- id: "coupon-bigbang2026",
538
- code: "BIGBANG2026",
539
- name: "₹1,000 Off Orders Above ₹10,000",
540
- description: "Flat ₹1,000 off orders ₹10,000+. Big-ticket promo. Once per user.",
541
- type: COUPON_FIELDS.TYPE_VALUES.FIXED,
542
- scope: COUPON_FIELDS.SCOPE_VALUES.ADMIN,
543
- discount: { value: 100000, minPurchase: 1000000 },
544
- usage: { totalLimit: 1000, perUserLimit: 1, currentUsage: 142 },
545
- validity: { startDate: daysAgo(75), endDate: daysAhead(90), isActive: true },
546
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
547
- createdBy: "user-admin-letitrip",
548
- createdAt: daysAgo(75),
199
+ createdBy: "user-seto-kaiba",
200
+ createdAt: daysAgo(5),
549
201
  updatedAt: daysAgo(1),
550
- stats: { totalUses: 142, totalRevenue: 1846000000, totalDiscount: 14200000 },
202
+ stats: { totalUses: 19, totalRevenue: 9500000, totalDiscount: 1140000 },
551
203
  },
552
204
  ];