@webbycrown/webbycommerce 1.2.1 → 2.0.0

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 (162) hide show
  1. package/README.md +21 -3
  2. package/admin/app.js +3 -0
  3. package/admin/jsconfig.json +20 -0
  4. package/admin/src/components/ApiCollectionsContent.jsx +4626 -0
  5. package/admin/src/components/CompareContent.jsx +300 -0
  6. package/admin/src/components/ConfigureContent.jsx +407 -0
  7. package/admin/src/components/Initializer.jsx +64 -0
  8. package/admin/src/components/LoginRegisterContent.jsx +280 -0
  9. package/admin/src/components/PluginIcon.jsx +6 -0
  10. package/admin/src/components/ShippingTypeContent.jsx +230 -0
  11. package/admin/src/components/SmtpContent.jsx +316 -0
  12. package/admin/src/components/WishlistContent.jsx +273 -0
  13. package/admin/src/index.js +81 -0
  14. package/admin/src/pages/ApiCollections.jsx +169 -0
  15. package/admin/src/pages/Configure.jsx +55 -0
  16. package/admin/src/pages/Settings.jsx +93 -0
  17. package/admin/src/pluginId.js +4 -0
  18. package/{dist/_chunks/en-CiQ97iC8.js → admin/src/translations/en.json} +712 -574
  19. package/bin/setup.js +50 -3
  20. package/package.json +14 -13
  21. package/server/bootstrap.js +3 -0
  22. package/server/register.js +3 -0
  23. package/server/src/bootstrap.js +3826 -0
  24. package/server/src/components/content-block.json +37 -0
  25. package/server/src/components/shipping-zone-location.json +27 -0
  26. package/server/src/config/index.js +7 -0
  27. package/server/src/content-types/address/index.js +7 -0
  28. package/server/src/content-types/address/schema.json +74 -0
  29. package/server/src/content-types/cart/index.js +61 -0
  30. package/server/src/content-types/cart-item/index.js +79 -0
  31. package/server/src/content-types/compare.js +73 -0
  32. package/server/src/content-types/coupon/index.js +7 -0
  33. package/server/src/content-types/coupon/schema.json +67 -0
  34. package/server/src/content-types/index.js +42 -0
  35. package/server/src/content-types/order/index.js +7 -0
  36. package/server/src/content-types/order/schema.json +121 -0
  37. package/server/src/content-types/payment-transaction/index.js +7 -0
  38. package/server/src/content-types/payment-transaction/schema.json +73 -0
  39. package/server/src/content-types/product/index.js +7 -0
  40. package/server/src/content-types/product/schema.json +104 -0
  41. package/server/src/content-types/product-attribute/index.js +7 -0
  42. package/server/src/content-types/product-attribute/schema.json +80 -0
  43. package/server/src/content-types/product-attribute-value/index.js +7 -0
  44. package/server/src/content-types/product-attribute-value/schema.json +52 -0
  45. package/server/src/content-types/product-category/index.js +7 -0
  46. package/server/src/content-types/product-category/schema.json +54 -0
  47. package/server/src/content-types/product-tag/index.js +7 -0
  48. package/server/src/content-types/product-tag/schema.json +38 -0
  49. package/server/src/content-types/product-variation/index.js +7 -0
  50. package/server/src/content-types/product-variation/schema.json +74 -0
  51. package/server/src/content-types/shipping-method/index.js +7 -0
  52. package/server/src/content-types/shipping-method/schema.json +91 -0
  53. package/server/src/content-types/shipping-rate/index.js +7 -0
  54. package/server/src/content-types/shipping-rate/schema.json +73 -0
  55. package/server/src/content-types/shipping-rule/index.js +7 -0
  56. package/server/src/content-types/shipping-rule/schema.json +84 -0
  57. package/server/src/content-types/shipping-zone/index.js +7 -0
  58. package/server/src/content-types/shipping-zone/schema.json +57 -0
  59. package/server/src/content-types/wishlist.js +66 -0
  60. package/server/src/controllers/address.js +374 -0
  61. package/server/src/controllers/auth.js +1409 -0
  62. package/server/src/controllers/cart.js +337 -0
  63. package/server/src/controllers/category.js +388 -0
  64. package/server/src/controllers/compare.js +246 -0
  65. package/server/src/controllers/controller.js +168 -0
  66. package/server/src/controllers/ecommerce.js +20 -0
  67. package/server/src/controllers/index.js +34 -0
  68. package/server/src/controllers/order.js +1100 -0
  69. package/server/src/controllers/payment.js +243 -0
  70. package/server/src/controllers/product.js +1006 -0
  71. package/server/src/controllers/productTag.js +370 -0
  72. package/server/src/controllers/productVariation.js +181 -0
  73. package/server/src/controllers/shipping.js +1046 -0
  74. package/server/src/controllers/wishlist.js +332 -0
  75. package/server/src/destroy.js +6 -0
  76. package/server/src/index.js +26 -0
  77. package/server/src/middlewares/index.js +4 -0
  78. package/server/src/policies/index.js +4 -0
  79. package/server/src/register.js +67 -0
  80. package/server/src/routes/index.js +1130 -0
  81. package/server/src/services/cart.js +531 -0
  82. package/server/src/services/compare.js +300 -0
  83. package/server/src/services/index.js +16 -0
  84. package/server/src/services/service.js +19 -0
  85. package/server/src/services/shipping.js +513 -0
  86. package/server/src/services/wishlist.js +238 -0
  87. package/server/src/utils/check-ecommerce-permission.js +204 -0
  88. package/server/src/utils/extend-user-schema.js +161 -0
  89. package/server/src/utils/seed-data.js +639 -0
  90. package/server/src/utils/send-email.js +98 -0
  91. package/strapi-server.js +1 -6
  92. package/dist/_chunks/Settings-Bg2JyQ4c.js +0 -31518
  93. package/dist/_chunks/Settings-BonPzbwr.mjs +0 -31499
  94. package/dist/_chunks/en-DE15m4xZ.mjs +0 -574
  95. package/dist/_chunks/index-BWVy9o1d.mjs +0 -128
  96. package/dist/_chunks/index-NRuOdjd7.js +0 -127
  97. package/dist/admin/index.js +0 -3
  98. package/dist/admin/index.mjs +0 -4
  99. package/dist/robots.txt +0 -3
  100. package/dist/server/index.js +0 -27336
  101. package/dist/uploads/.gitkeep +0 -0
  102. package/dist/uploads/accessories_category_2a5631094b.jpeg +0 -0
  103. package/dist/uploads/beauty_personal_care_category_57f8a8f1e3.jpeg +0 -0
  104. package/dist/uploads/books_category_a9a253eada.jpeg +0 -0
  105. package/dist/uploads/classic_cotton_tshirt_1_cd713425f6.png +0 -0
  106. package/dist/uploads/clothing_category_d5c60ef07b.jpeg +0 -0
  107. package/dist/uploads/daviddoe_strapi_adbcd41787.jpeg +0 -0
  108. package/dist/uploads/electronics_category_fc3e5ef571.jpeg +0 -0
  109. package/dist/uploads/ergonomic_office_chair_1_c751cffb07.png +0 -0
  110. package/dist/uploads/home_garden_category_4f6eb3f8d6.jpeg +0 -0
  111. package/dist/uploads/istockphoto_1188462138_612x612_11f295b9c0.jpg +0 -0
  112. package/dist/uploads/istockphoto_1188462138_612x612_396fb272fd.jpg +0 -0
  113. package/dist/uploads/large_daviddoe_strapi_adbcd41787.jpeg +0 -0
  114. package/dist/uploads/leather_travel_backpack_1_238bc1ae4d.png +0 -0
  115. package/dist/uploads/mechanical_keyboard_pro_1_0cd391a6ac.png +0 -0
  116. package/dist/uploads/medium_classic_cotton_tshirt_1_cd713425f6.png +0 -0
  117. package/dist/uploads/medium_daviddoe_strapi_adbcd41787.jpeg +0 -0
  118. package/dist/uploads/medium_ergonomic_office_chair_1_c751cffb07.png +0 -0
  119. package/dist/uploads/medium_leather_travel_backpack_1_238bc1ae4d.png +0 -0
  120. package/dist/uploads/medium_mechanical_keyboard_pro_1_0cd391a6ac.png +0 -0
  121. package/dist/uploads/medium_smart_watch_series_5_1_cdc2511fb7.png +0 -0
  122. package/dist/uploads/medium_smartphone_x_pro_1_c3f0cbd080.png +0 -0
  123. package/dist/uploads/medium_the_great_gatsby_special_1_2e7c76d997.png +0 -0
  124. package/dist/uploads/medium_wireless_headphones_1_fa75cd50c3.png +0 -0
  125. package/dist/uploads/medium_yoga_mat_premium_1_01f9a3b5fa.png +0 -0
  126. package/dist/uploads/predictive_maintenance_icons_industry_automation_600nw_2685943461_e18a8aa3b0.webp +0 -0
  127. package/dist/uploads/small_classic_cotton_tshirt_1_cd713425f6.png +0 -0
  128. package/dist/uploads/small_daviddoe_strapi_adbcd41787.jpeg +0 -0
  129. package/dist/uploads/small_ergonomic_office_chair_1_c751cffb07.png +0 -0
  130. package/dist/uploads/small_leather_travel_backpack_1_238bc1ae4d.png +0 -0
  131. package/dist/uploads/small_mechanical_keyboard_pro_1_0cd391a6ac.png +0 -0
  132. package/dist/uploads/small_smart_watch_series_5_1_cdc2511fb7.png +0 -0
  133. package/dist/uploads/small_smartphone_x_pro_1_c3f0cbd080.png +0 -0
  134. package/dist/uploads/small_the_great_gatsby_special_1_2e7c76d997.png +0 -0
  135. package/dist/uploads/small_wireless_headphones_1_fa75cd50c3.png +0 -0
  136. package/dist/uploads/small_yoga_mat_premium_1_01f9a3b5fa.png +0 -0
  137. package/dist/uploads/smart_watch_series_5_1_cdc2511fb7.png +0 -0
  138. package/dist/uploads/smartphone_x_pro_1_c3f0cbd080.png +0 -0
  139. package/dist/uploads/the_great_gatsby_special_1_2e7c76d997.png +0 -0
  140. package/dist/uploads/thumbnail_accessories_category_2a5631094b.jpeg +0 -0
  141. package/dist/uploads/thumbnail_beauty_personal_care_category_57f8a8f1e3.jpeg +0 -0
  142. package/dist/uploads/thumbnail_books_category_a9a253eada.jpeg +0 -0
  143. package/dist/uploads/thumbnail_classic_cotton_tshirt_1_cd713425f6.png +0 -0
  144. package/dist/uploads/thumbnail_clothing_category_d5c60ef07b.jpeg +0 -0
  145. package/dist/uploads/thumbnail_daviddoe_strapi_adbcd41787.jpeg +0 -0
  146. package/dist/uploads/thumbnail_electronics_category_fc3e5ef571.jpeg +0 -0
  147. package/dist/uploads/thumbnail_ergonomic_office_chair_1_c751cffb07.png +0 -0
  148. package/dist/uploads/thumbnail_home_garden_category_4f6eb3f8d6.jpeg +0 -0
  149. package/dist/uploads/thumbnail_istockphoto_1188462138_612x612_11f295b9c0.jpg +0 -0
  150. package/dist/uploads/thumbnail_istockphoto_1188462138_612x612_396fb272fd.jpg +0 -0
  151. package/dist/uploads/thumbnail_leather_travel_backpack_1_238bc1ae4d.png +0 -0
  152. package/dist/uploads/thumbnail_mechanical_keyboard_pro_1_0cd391a6ac.png +0 -0
  153. package/dist/uploads/thumbnail_predictive_maintenance_icons_industry_automation_600nw_2685943461_e18a8aa3b0.webp +0 -0
  154. package/dist/uploads/thumbnail_smart_watch_series_5_1_cdc2511fb7.png +0 -0
  155. package/dist/uploads/thumbnail_smartphone_x_pro_1_c3f0cbd080.png +0 -0
  156. package/dist/uploads/thumbnail_the_great_gatsby_special_1_2e7c76d997.png +0 -0
  157. package/dist/uploads/thumbnail_wireless_headphones_1_fa75cd50c3.png +0 -0
  158. package/dist/uploads/thumbnail_yoga_mat_premium_1_01f9a3b5fa.png +0 -0
  159. package/dist/uploads/webby-commerce.png +0 -0
  160. package/dist/uploads/wireless_headphones_1_fa75cd50c3.png +0 -0
  161. package/dist/uploads/yoga_mat_premium_1_01f9a3b5fa.png +0 -0
  162. /package/{dist → server/src}/data/demo-data.json +0 -0
@@ -0,0 +1,1130 @@
1
+ 'use strict';
2
+
3
+ const PLUGIN_ID = 'webbycommerce';
4
+
5
+ module.exports = {
6
+ admin: {
7
+ routes: [
8
+ {
9
+ method: 'GET',
10
+ path: '/settings',
11
+ handler: 'controller.getSettings',
12
+ config: {
13
+ policies: ['admin::isAuthenticatedAdmin'],
14
+ },
15
+ },
16
+ {
17
+ method: 'PUT',
18
+ path: '/settings',
19
+ handler: 'controller.updateSettings',
20
+ config: {
21
+ policies: ['admin::isAuthenticatedAdmin'],
22
+ },
23
+ },
24
+ {
25
+ method: 'POST',
26
+ path: '/generate-demo',
27
+ handler: 'controller.generateDemo',
28
+ config: {
29
+ policies: ['admin::isAuthenticatedAdmin'],
30
+ },
31
+ },
32
+ {
33
+ method: 'POST',
34
+ path: '/seed-demo',
35
+ handler: 'controller.seedDemo',
36
+ config: {
37
+ policies: ['admin::isAuthenticatedAdmin'],
38
+ },
39
+ },
40
+ ],
41
+ },
42
+ 'content-api': {
43
+ routes: [
44
+ {
45
+ method: 'GET',
46
+ // Public health-check endpoint
47
+ // Final URL: http://localhost:1337/api/webbycommerce/health
48
+ // Custom prefix support handled in bootstrap.js middleware
49
+ path: '/health',
50
+ handler: 'controller.health',
51
+ config: {
52
+ auth: false,
53
+ policies: [],
54
+ },
55
+ info: {
56
+ type: 'content-api',
57
+ pluginName: PLUGIN_ID,
58
+ description: 'Health check for Strapi Advanced Ecommerce plugin',
59
+ summary: 'Ecommerce health',
60
+ tags: ['Strapi Advanced Ecommerce'],
61
+ },
62
+ },
63
+ {
64
+ method: 'POST',
65
+ path: '/auth/login-register',
66
+ handler: 'auth.loginOrRegister',
67
+ config: {
68
+ auth: false,
69
+ },
70
+ },
71
+ {
72
+ method: 'POST',
73
+ path: '/auth/verify-otp',
74
+ handler: 'auth.verifyOtp',
75
+ config: {
76
+ auth: false,
77
+ },
78
+ },
79
+ {
80
+ method: 'GET',
81
+ path: '/auth/method',
82
+ handler: 'auth.getAuthMethod',
83
+ config: {
84
+ auth: false,
85
+ policies: [],
86
+ },
87
+ info: {
88
+ type: 'content-api',
89
+ pluginName: PLUGIN_ID,
90
+ description: 'Get current authentication method (default or otp)',
91
+ summary: 'Get auth method',
92
+ tags: ['Authentication'],
93
+ },
94
+ },
95
+ {
96
+ method: 'POST',
97
+ path: '/auth/unified',
98
+ handler: 'auth.unifiedAuth',
99
+ config: {
100
+ auth: false,
101
+ policies: [],
102
+ },
103
+ info: {
104
+ type: 'content-api',
105
+ pluginName: PLUGIN_ID,
106
+ description: 'Unified authentication endpoint supporting both OTP and default (email/password) methods',
107
+ summary: 'Unified auth',
108
+ tags: ['Authentication'],
109
+ },
110
+ },
111
+ {
112
+ method: 'GET',
113
+ path: '/auth/profile',
114
+ handler: 'auth.getProfile',
115
+ config: {
116
+ auth: false, // Authentication handled in controller
117
+ policies: [],
118
+ },
119
+ },
120
+ {
121
+ method: 'PUT',
122
+ path: '/auth/profile',
123
+ handler: 'auth.updateProfile',
124
+ config: {
125
+ auth: false, // Authentication handled in controller
126
+ policies: [],
127
+ },
128
+ },
129
+ {
130
+ method: 'GET',
131
+ path: '/addresses',
132
+ handler: 'address.getAddresses',
133
+ config: {
134
+ auth: false, // Authentication handled in middleware
135
+ policies: [],
136
+ },
137
+ },
138
+ {
139
+ method: 'GET',
140
+ path: '/addresses/:id',
141
+ handler: 'address.getAddress',
142
+ config: {
143
+ auth: false, // Authentication handled in middleware
144
+ policies: [],
145
+ },
146
+ },
147
+ {
148
+ method: 'POST',
149
+ path: '/addresses',
150
+ handler: 'address.createAddress',
151
+ config: {
152
+ auth: false, // Authentication handled in middleware
153
+ policies: [],
154
+ },
155
+ },
156
+ {
157
+ method: 'PUT',
158
+ path: '/addresses/:id',
159
+ handler: 'address.updateAddress',
160
+ config: {
161
+ auth: false, // Authentication handled in middleware
162
+ policies: [],
163
+ },
164
+ },
165
+ {
166
+ method: 'DELETE',
167
+ path: '/addresses/:id',
168
+ handler: 'address.deleteAddress',
169
+ config: {
170
+ auth: false, // Authentication handled in middleware
171
+ policies: [],
172
+ },
173
+ },
174
+ {
175
+ method: 'GET',
176
+ path: '/products',
177
+ handler: 'product.getProducts',
178
+ config: {
179
+ auth: false, // Public for now
180
+ policies: [],
181
+ },
182
+ },
183
+ {
184
+ method: 'GET',
185
+ path: '/tags',
186
+ handler: 'productTag.getTags',
187
+ config: {
188
+ auth: false,
189
+ policies: [],
190
+ },
191
+ },
192
+ {
193
+ method: 'GET',
194
+ path: '/tags/:id',
195
+ handler: 'productTag.getTag',
196
+ config: {
197
+ auth: false,
198
+ policies: [],
199
+ },
200
+ },
201
+ {
202
+ method: 'POST',
203
+ path: '/tags',
204
+ handler: 'productTag.createTag',
205
+ config: {
206
+ auth: false,
207
+ policies: [],
208
+ },
209
+ },
210
+ {
211
+ method: 'PUT',
212
+ path: '/tags/:id',
213
+ handler: 'productTag.updateTag',
214
+ config: {
215
+ auth: false,
216
+ policies: [],
217
+ },
218
+ },
219
+ {
220
+ method: 'DELETE',
221
+ path: '/tags/:id',
222
+ handler: 'productTag.deleteTag',
223
+ config: {
224
+ auth: false,
225
+ policies: [],
226
+ },
227
+ },
228
+ {
229
+ method: 'GET',
230
+ path: '/product-categories',
231
+ handler: 'productCategory.getProductCategories',
232
+ config: {
233
+ auth: false,
234
+ policies: [],
235
+ },
236
+ },
237
+ {
238
+ method: 'GET',
239
+ path: '/product-categories/:id',
240
+ handler: 'productCategory.getProductCategory',
241
+ config: {
242
+ auth: false,
243
+ policies: [],
244
+ },
245
+ },
246
+ {
247
+ method: 'POST',
248
+ path: '/product-categories',
249
+ handler: 'productCategory.createProductCategory',
250
+ config: {
251
+ auth: false,
252
+ policies: [],
253
+ },
254
+ },
255
+ {
256
+ method: 'PUT',
257
+ path: '/product-categories/:id',
258
+ handler: 'productCategory.updateProductCategory',
259
+ config: {
260
+ auth: false,
261
+ policies: [],
262
+ },
263
+ },
264
+ {
265
+ method: 'DELETE',
266
+ path: '/product-categories/:id',
267
+ handler: 'productCategory.deleteProductCategory',
268
+ config: {
269
+ auth: false,
270
+ policies: [],
271
+ },
272
+ },
273
+ {
274
+ method: 'GET',
275
+ path: '/products/:slug',
276
+ handler: 'product.getProductBySlug',
277
+ config: {
278
+ auth: false,
279
+ policies: [],
280
+ },
281
+ },
282
+ {
283
+ method: 'POST',
284
+ path: '/products',
285
+ handler: 'product.createProduct',
286
+ config: {
287
+ auth: false, // Authentication handled in controller
288
+ policies: [],
289
+ },
290
+ },
291
+ {
292
+ method: 'POST',
293
+ path: '/products/bulk',
294
+ handler: 'product.createBulkProducts',
295
+ config: {
296
+ auth: false, // Authentication handled in controller
297
+ policies: [],
298
+ },
299
+ },
300
+ {
301
+ method: 'PUT',
302
+ path: '/products/:id',
303
+ handler: 'product.updateProduct',
304
+ config: {
305
+ auth: false, // Authentication handled in controller
306
+ policies: [],
307
+ },
308
+ },
309
+ {
310
+ method: 'DELETE',
311
+ path: '/products/:id',
312
+ handler: 'product.deleteProduct',
313
+ config: {
314
+ auth: false, // Authentication handled in controller
315
+ policies: [],
316
+ },
317
+ },
318
+ {
319
+ method: 'GET',
320
+ path: '/products/:id/related',
321
+ handler: 'product.getRelatedProducts',
322
+ config: {
323
+ auth: false,
324
+ policies: [],
325
+ },
326
+ },
327
+ {
328
+ method: 'GET',
329
+ path: '/products/categories',
330
+ handler: 'product.getCategories',
331
+ config: {
332
+ auth: false,
333
+ policies: [],
334
+ },
335
+ },
336
+ {
337
+ method: 'GET',
338
+ path: '/products/tags',
339
+ handler: 'product.getTags',
340
+ config: {
341
+ auth: false,
342
+ policies: [],
343
+ },
344
+ },
345
+ {
346
+ method: 'GET',
347
+ path: '/products/attributes',
348
+ handler: 'product.getAttributes',
349
+ config: {
350
+ auth: false,
351
+ policies: [],
352
+ },
353
+ },
354
+ {
355
+ method: 'GET',
356
+ path: '/cart',
357
+ handler: 'cart.getCart',
358
+ config: {
359
+ auth: false, // Authentication handled in middleware
360
+ policies: [],
361
+ },
362
+ },
363
+ {
364
+ method: 'POST',
365
+ path: '/cart/create',
366
+ handler: 'cart.createCart',
367
+ config: {
368
+ auth: false, // Authentication handled in middleware
369
+ policies: [],
370
+ },
371
+ },
372
+ {
373
+ method: 'POST',
374
+ path: '/cart',
375
+ handler: 'cart.addItem',
376
+ config: {
377
+ auth: false, // Authentication handled in middleware
378
+ policies: [],
379
+ },
380
+ },
381
+ {
382
+ method: 'PUT',
383
+ path: '/cart/:id',
384
+ handler: 'cart.updateItem',
385
+ config: {
386
+ auth: false, // Authentication handled in middleware
387
+ policies: [],
388
+ },
389
+ },
390
+ {
391
+ method: 'DELETE',
392
+ path: '/cart/:id',
393
+ handler: 'cart.removeItem',
394
+ config: {
395
+ auth: false, // Authentication handled in middleware
396
+ policies: [],
397
+ },
398
+ },
399
+ {
400
+ method: 'DELETE',
401
+ path: '/cart',
402
+ handler: 'cart.clearCart',
403
+ config: {
404
+ auth: false, // Authentication handled in middleware
405
+ policies: [],
406
+ },
407
+ },
408
+ {
409
+ method: 'POST',
410
+ path: '/cart/apply-coupon',
411
+ handler: 'cart.applyCoupon',
412
+ config: {
413
+ auth: false, // Authentication handled in middleware
414
+ policies: [],
415
+ },
416
+ },
417
+ {
418
+ method: 'DELETE',
419
+ path: '/cart/coupon',
420
+ handler: 'cart.removeCoupon',
421
+ config: {
422
+ auth: false, // Authentication handled in middleware
423
+ policies: [],
424
+ },
425
+ },
426
+ {
427
+ method: 'GET',
428
+ path: '/cart/totals',
429
+ handler: 'cart.getTotals',
430
+ config: {
431
+ auth: false, // Authentication handled in middleware
432
+ policies: [],
433
+ },
434
+ },
435
+ {
436
+ method: 'POST',
437
+ path: '/cart/checkout',
438
+ handler: 'cart.checkout',
439
+ config: {
440
+ auth: false, // Authentication handled in middleware
441
+ policies: [],
442
+ },
443
+ },
444
+
445
+ // Order/Checkout routes
446
+ {
447
+ method: 'POST',
448
+ path: '/checkout',
449
+ handler: 'order.checkout',
450
+ config: {
451
+ auth: false, // Authentication handled in controller
452
+ policies: [],
453
+ },
454
+ },
455
+ {
456
+ method: 'GET',
457
+ path: '/orders',
458
+ handler: 'order.getOrders',
459
+ config: {
460
+ auth: false, // Authentication handled in controller
461
+ policies: [],
462
+ },
463
+ },
464
+ {
465
+ method: 'GET',
466
+ path: '/orders/:id',
467
+ handler: 'order.getOrder',
468
+ config: {
469
+ auth: false, // Authentication handled in controller
470
+ policies: [],
471
+ },
472
+ },
473
+ {
474
+ method: 'PUT',
475
+ path: '/orders/:id/cancel',
476
+ handler: 'order.cancelOrder',
477
+ config: {
478
+ auth: false, // Authentication handled in controller
479
+ policies: [],
480
+ },
481
+ },
482
+ {
483
+ method: 'PUT',
484
+ path: '/orders/:id/status',
485
+ handler: 'order.updateOrderStatus',
486
+ config: {
487
+ auth: false, // Authentication handled in controller
488
+ policies: [],
489
+ },
490
+ },
491
+ {
492
+ method: 'GET',
493
+ path: '/orders/:id/tracking',
494
+ handler: 'order.getOrderTracking',
495
+ config: {
496
+ auth: false, // Authentication handled in controller
497
+ policies: [],
498
+ },
499
+ },
500
+
501
+ // Wishlist routes
502
+ {
503
+ method: 'GET',
504
+ path: '/wishlist',
505
+ handler: 'wishlist.getWishlist',
506
+ config: {
507
+ auth: false, // Authentication handled in controller
508
+ policies: [],
509
+ },
510
+ },
511
+ {
512
+ method: 'POST',
513
+ path: '/wishlist',
514
+ handler: 'wishlist.addToWishlist',
515
+ config: {
516
+ auth: false, // Authentication handled in controller
517
+ policies: [],
518
+ },
519
+ },
520
+ {
521
+ method: 'DELETE',
522
+ path: '/wishlist/:productId',
523
+ handler: 'wishlist.removeFromWishlist',
524
+ config: {
525
+ auth: false, // Authentication handled in controller
526
+ policies: [],
527
+ },
528
+ },
529
+ {
530
+ method: 'DELETE',
531
+ path: '/wishlist',
532
+ handler: 'wishlist.clearWishlist',
533
+ config: {
534
+ auth: false, // Authentication handled in controller
535
+ policies: [],
536
+ },
537
+ },
538
+ {
539
+ method: 'PUT',
540
+ path: '/wishlist',
541
+ handler: 'wishlist.updateWishlist',
542
+ config: {
543
+ auth: false, // Authentication handled in controller
544
+ policies: [],
545
+ },
546
+ },
547
+ {
548
+ method: 'GET',
549
+ path: '/wishlist/status',
550
+ handler: 'wishlist.checkWishlistStatus',
551
+ config: {
552
+ auth: false, // Authentication handled in controller
553
+ policies: [],
554
+ },
555
+ },
556
+ {
557
+ method: 'POST',
558
+ path: '/wishlist/items/:id/move-to-cart',
559
+ handler: 'wishlist.moveToCart',
560
+ config: {
561
+ auth: false, // Authentication handled in controller
562
+ policies: [],
563
+ },
564
+ },
565
+
566
+ // Compare routes
567
+ {
568
+ method: 'GET',
569
+ path: '/compare',
570
+ handler: 'compare.getCompare',
571
+ config: {
572
+ auth: false, // Authentication handled in controller
573
+ policies: [],
574
+ },
575
+ },
576
+ {
577
+ method: 'POST',
578
+ path: '/compare',
579
+ handler: 'compare.addToCompare',
580
+ config: {
581
+ auth: false, // Authentication handled in controller
582
+ policies: [],
583
+ },
584
+ },
585
+ {
586
+ method: 'DELETE',
587
+ path: '/compare/:productId',
588
+ handler: 'compare.removeFromCompare',
589
+ config: {
590
+ auth: false, // Authentication handled in controller
591
+ policies: [],
592
+ },
593
+ },
594
+ {
595
+ method: 'DELETE',
596
+ path: '/compare',
597
+ handler: 'compare.clearCompare',
598
+ config: {
599
+ auth: false, // Authentication handled in controller
600
+ policies: [],
601
+ },
602
+ },
603
+ {
604
+ method: 'PUT',
605
+ path: '/compare',
606
+ handler: 'compare.updateCompare',
607
+ config: {
608
+ auth: false, // Authentication handled in controller
609
+ policies: [],
610
+ },
611
+ },
612
+ {
613
+ method: 'GET',
614
+ path: '/compare/data',
615
+ handler: 'compare.getComparisonData',
616
+ config: {
617
+ auth: false, // Authentication handled in controller
618
+ policies: [],
619
+ },
620
+ },
621
+ {
622
+ method: 'GET',
623
+ path: '/compare/status',
624
+ handler: 'compare.checkCompareStatus',
625
+ config: {
626
+ auth: false, // Authentication handled in controller
627
+ policies: [],
628
+ },
629
+ },
630
+
631
+ // Payment routes
632
+ {
633
+ method: 'POST',
634
+ path: '/payments/create-intent',
635
+ handler: 'payment.createIntent',
636
+ config: {
637
+ auth: false, // Authentication handled in controller
638
+ policies: [],
639
+ },
640
+ },
641
+ {
642
+ method: 'POST',
643
+ path: '/payments/confirm',
644
+ handler: 'payment.confirmPayment',
645
+ config: {
646
+ auth: false, // Authentication handled in controller
647
+ policies: [],
648
+ },
649
+ },
650
+ {
651
+ method: 'POST',
652
+ path: '/payments/webhook',
653
+ handler: 'payment.handleWebhook',
654
+ config: {
655
+ auth: false,
656
+ policies: [],
657
+ },
658
+ },
659
+ {
660
+ method: 'POST',
661
+ path: '/payments/:id/refund',
662
+ handler: 'payment.processRefund',
663
+ config: {
664
+ auth: false, // Authentication handled in controller
665
+ policies: [],
666
+ },
667
+ },
668
+ {
669
+ method: 'GET',
670
+ path: '/payments/transactions',
671
+ handler: 'payment.getTransactions',
672
+ config: {
673
+ auth: false, // Authentication handled in controller
674
+ policies: [],
675
+ },
676
+ },
677
+
678
+ // Shipping routes
679
+ {
680
+ method: 'POST',
681
+ path: '/shipping/calculate',
682
+ handler: 'shipping.getShippingMethods',
683
+ config: {
684
+ auth: false, // Authentication handled in controller
685
+ policies: [],
686
+ },
687
+ },
688
+ {
689
+ method: 'GET',
690
+ path: '/shipping/zones',
691
+ handler: 'shipping.getShippingZones',
692
+ config: {
693
+ auth: false, // Authentication handled in controller
694
+ policies: [],
695
+ },
696
+ },
697
+ {
698
+ method: 'POST',
699
+ path: '/shipping/zones',
700
+ handler: 'shipping.createShippingZone',
701
+ config: {
702
+ auth: false, // Authentication handled in controller
703
+ policies: [],
704
+ },
705
+ },
706
+ {
707
+ method: 'PUT',
708
+ path: '/shipping/zones/:id',
709
+ handler: 'shipping.updateShippingZone',
710
+ config: {
711
+ auth: false, // Authentication handled in controller
712
+ policies: [],
713
+ },
714
+ },
715
+ {
716
+ method: 'DELETE',
717
+ path: '/shipping/zones/:id',
718
+ handler: 'shipping.deleteShippingZone',
719
+ config: {
720
+ auth: false, // Authentication handled in controller
721
+ policies: [],
722
+ },
723
+ },
724
+ {
725
+ method: 'GET',
726
+ path: '/shipping/methods',
727
+ handler: 'shipping.getShippingMethodsAdmin',
728
+ config: {
729
+ auth: false, // Authentication handled in controller
730
+ policies: [],
731
+ },
732
+ },
733
+ {
734
+ method: 'POST',
735
+ path: '/shipping/methods',
736
+ handler: 'shipping.createShippingMethod',
737
+ config: {
738
+ auth: false, // Authentication handled in controller
739
+ policies: [],
740
+ },
741
+ },
742
+ {
743
+ method: 'PUT',
744
+ path: '/shipping/methods/:id',
745
+ handler: 'shipping.updateShippingMethod',
746
+ config: {
747
+ auth: false, // Authentication handled in controller
748
+ policies: [],
749
+ },
750
+ },
751
+ {
752
+ method: 'DELETE',
753
+ path: '/shipping/methods/:id',
754
+ handler: 'shipping.deleteShippingMethod',
755
+ config: {
756
+ auth: false, // Authentication handled in controller
757
+ policies: [],
758
+ },
759
+ },
760
+ {
761
+ method: 'GET',
762
+ path: '/shipping/methods/:methodId/rates',
763
+ handler: 'shipping.getShippingRates',
764
+ config: {
765
+ auth: false, // Authentication handled in controller
766
+ policies: [],
767
+ },
768
+ },
769
+ {
770
+ method: 'POST',
771
+ path: '/shipping/rates',
772
+ handler: 'shipping.createShippingRate',
773
+ config: {
774
+ auth: false, // Authentication handled in controller
775
+ policies: [],
776
+ },
777
+ },
778
+ {
779
+ method: 'PUT',
780
+ path: '/shipping/rates/:id',
781
+ handler: 'shipping.updateShippingRate',
782
+ config: {
783
+ auth: false, // Authentication handled in controller
784
+ policies: [],
785
+ },
786
+ },
787
+ {
788
+ method: 'DELETE',
789
+ path: '/shipping/rates/:id',
790
+ handler: 'shipping.deleteShippingRate',
791
+ config: {
792
+ auth: false, // Authentication handled in controller
793
+ policies: [],
794
+ },
795
+ },
796
+
797
+ // Standard content API routes for content manager visibility
798
+ // Products
799
+ {
800
+ method: 'GET',
801
+ path: '/products',
802
+ handler: 'product.find',
803
+ config: {
804
+ policies: [],
805
+ middlewares: [],
806
+ },
807
+ },
808
+ {
809
+ method: 'GET',
810
+ path: '/products/:id',
811
+ handler: 'product.findOne',
812
+ config: {
813
+ policies: [],
814
+ middlewares: [],
815
+ },
816
+ },
817
+ {
818
+ method: 'POST',
819
+ path: '/products',
820
+ handler: 'product.create',
821
+ config: {
822
+ policies: ['admin::isAuthenticatedAdmin'],
823
+ middlewares: [],
824
+ },
825
+ },
826
+ {
827
+ method: 'PUT',
828
+ path: '/products/:id',
829
+ handler: 'product.update',
830
+ config: {
831
+ policies: ['admin::isAuthenticatedAdmin'],
832
+ middlewares: [],
833
+ },
834
+ },
835
+ {
836
+ method: 'DELETE',
837
+ path: '/products/:id',
838
+ handler: 'product.delete',
839
+ config: {
840
+ policies: ['admin::isAuthenticatedAdmin'],
841
+ middlewares: [],
842
+ },
843
+ },
844
+
845
+ // Product Categories
846
+ {
847
+ method: 'GET',
848
+ path: '/product-categories',
849
+ handler: 'productCategory.find',
850
+ config: {
851
+ policies: [],
852
+ middlewares: [],
853
+ },
854
+ },
855
+ {
856
+ method: 'GET',
857
+ path: '/product-categories/:id',
858
+ handler: 'productCategory.findOne',
859
+ config: {
860
+ policies: [],
861
+ middlewares: [],
862
+ },
863
+ },
864
+ {
865
+ method: 'POST',
866
+ path: '/product-categories',
867
+ handler: 'productCategory.create',
868
+ config: {
869
+ policies: ['admin::isAuthenticatedAdmin'],
870
+ middlewares: [],
871
+ },
872
+ },
873
+ {
874
+ method: 'PUT',
875
+ path: '/product-categories/:id',
876
+ handler: 'productCategory.update',
877
+ config: {
878
+ policies: ['admin::isAuthenticatedAdmin'],
879
+ middlewares: [],
880
+ },
881
+ },
882
+ {
883
+ method: 'DELETE',
884
+ path: '/product-categories/:id',
885
+ handler: 'productCategory.delete',
886
+ config: {
887
+ policies: ['admin::isAuthenticatedAdmin'],
888
+ middlewares: [],
889
+ },
890
+ },
891
+
892
+ // Product Tags
893
+ {
894
+ method: 'GET',
895
+ path: '/product-tags',
896
+ handler: 'productTag.find',
897
+ config: {
898
+ policies: [],
899
+ middlewares: [],
900
+ },
901
+ },
902
+ {
903
+ method: 'GET',
904
+ path: '/product-tags/:id',
905
+ handler: 'productTag.findOne',
906
+ config: {
907
+ policies: [],
908
+ middlewares: [],
909
+ },
910
+ },
911
+ {
912
+ method: 'POST',
913
+ path: '/product-tags',
914
+ handler: 'productTag.create',
915
+ config: {
916
+ policies: ['admin::isAuthenticatedAdmin'],
917
+ middlewares: [],
918
+ },
919
+ },
920
+ {
921
+ method: 'PUT',
922
+ path: '/product-tags/:id',
923
+ handler: 'productTag.update',
924
+ config: {
925
+ policies: ['admin::isAuthenticatedAdmin'],
926
+ middlewares: [],
927
+ },
928
+ },
929
+ {
930
+ method: 'DELETE',
931
+ path: '/product-tags/:id',
932
+ handler: 'productTag.delete',
933
+ config: {
934
+ policies: ['admin::isAuthenticatedAdmin'],
935
+ middlewares: [],
936
+ },
937
+ },
938
+
939
+ // Product Variations
940
+ {
941
+ method: 'GET',
942
+ path: '/product-variations',
943
+ handler: 'productVariation.find',
944
+ config: {
945
+ policies: [],
946
+ middlewares: [],
947
+ },
948
+ },
949
+ {
950
+ method: 'GET',
951
+ path: '/product-variations/:id',
952
+ handler: 'productVariation.findOne',
953
+ config: {
954
+ policies: [],
955
+ middlewares: [],
956
+ },
957
+ },
958
+ {
959
+ method: 'POST',
960
+ path: '/product-variations',
961
+ handler: 'productVariation.create',
962
+ config: {
963
+ policies: ['admin::isAuthenticatedAdmin'],
964
+ middlewares: [],
965
+ },
966
+ },
967
+ {
968
+ method: 'PUT',
969
+ path: '/product-variations/:id',
970
+ handler: 'productVariation.update',
971
+ config: {
972
+ policies: ['admin::isAuthenticatedAdmin'],
973
+ middlewares: [],
974
+ },
975
+ },
976
+ {
977
+ method: 'DELETE',
978
+ path: '/product-variations/:id',
979
+ handler: 'productVariation.delete',
980
+ config: {
981
+ policies: ['admin::isAuthenticatedAdmin'],
982
+ middlewares: [],
983
+ },
984
+ },
985
+
986
+ // Alias: "product-variants" (some clients use this naming)
987
+ {
988
+ method: 'GET',
989
+ path: '/product-variants',
990
+ handler: 'productVariation.find',
991
+ config: {
992
+ policies: [],
993
+ middlewares: [],
994
+ },
995
+ },
996
+ {
997
+ method: 'GET',
998
+ path: '/product-variants/:id',
999
+ handler: 'productVariation.findOne',
1000
+ config: {
1001
+ policies: [],
1002
+ middlewares: [],
1003
+ },
1004
+ },
1005
+ {
1006
+ method: 'POST',
1007
+ path: '/product-variants',
1008
+ handler: 'productVariation.create',
1009
+ config: {
1010
+ policies: ['admin::isAuthenticatedAdmin'],
1011
+ middlewares: [],
1012
+ },
1013
+ },
1014
+ {
1015
+ method: 'PUT',
1016
+ path: '/product-variants/:id',
1017
+ handler: 'productVariation.update',
1018
+ config: {
1019
+ policies: ['admin::isAuthenticatedAdmin'],
1020
+ middlewares: [],
1021
+ },
1022
+ },
1023
+ {
1024
+ method: 'DELETE',
1025
+ path: '/product-variants/:id',
1026
+ handler: 'productVariation.delete',
1027
+ config: {
1028
+ policies: ['admin::isAuthenticatedAdmin'],
1029
+ middlewares: [],
1030
+ },
1031
+ },
1032
+
1033
+ // Wishlists
1034
+ {
1035
+ method: 'GET',
1036
+ path: '/wishlists',
1037
+ handler: 'wishlist.find',
1038
+ config: {
1039
+ policies: [],
1040
+ middlewares: [],
1041
+ },
1042
+ },
1043
+ {
1044
+ method: 'GET',
1045
+ path: '/wishlists/:id',
1046
+ handler: 'wishlist.findOne',
1047
+ config: {
1048
+ policies: [],
1049
+ middlewares: [],
1050
+ },
1051
+ },
1052
+ {
1053
+ method: 'POST',
1054
+ path: '/wishlists',
1055
+ handler: 'wishlist.create',
1056
+ config: {
1057
+ policies: ['admin::isAuthenticatedAdmin'],
1058
+ middlewares: [],
1059
+ },
1060
+ },
1061
+ {
1062
+ method: 'PUT',
1063
+ path: '/wishlists/:id',
1064
+ handler: 'wishlist.update',
1065
+ config: {
1066
+ policies: ['admin::isAuthenticatedAdmin'],
1067
+ middlewares: [],
1068
+ },
1069
+ },
1070
+ {
1071
+ method: 'DELETE',
1072
+ path: '/wishlists/:id',
1073
+ handler: 'wishlist.delete',
1074
+ config: {
1075
+ policies: ['admin::isAuthenticatedAdmin'],
1076
+ middlewares: [],
1077
+ },
1078
+ },
1079
+
1080
+ // Compares
1081
+ {
1082
+ method: 'GET',
1083
+ path: '/compares',
1084
+ handler: 'compare.find',
1085
+ config: {
1086
+ policies: [],
1087
+ middlewares: [],
1088
+ },
1089
+ },
1090
+ {
1091
+ method: 'GET',
1092
+ path: '/compares/:id',
1093
+ handler: 'compare.findOne',
1094
+ config: {
1095
+ policies: [],
1096
+ middlewares: [],
1097
+ },
1098
+ },
1099
+ {
1100
+ method: 'POST',
1101
+ path: '/compares',
1102
+ handler: 'compare.create',
1103
+ config: {
1104
+ policies: ['admin::isAuthenticatedAdmin'],
1105
+ middlewares: [],
1106
+ },
1107
+ },
1108
+ {
1109
+ method: 'PUT',
1110
+ path: '/compares/:id',
1111
+ handler: 'compare.update',
1112
+ config: {
1113
+ policies: ['admin::isAuthenticatedAdmin'],
1114
+ middlewares: [],
1115
+ },
1116
+ },
1117
+ {
1118
+ method: 'DELETE',
1119
+ path: '/compares/:id',
1120
+ handler: 'compare.delete',
1121
+ config: {
1122
+ policies: ['admin::isAuthenticatedAdmin'],
1123
+ middlewares: [],
1124
+ },
1125
+ },
1126
+
1127
+ ],
1128
+ },
1129
+ };
1130
+