PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.4.1
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.4.1
1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 trunk All 48 releases
fluent-cart / app / Http / Routes / api.php

api.php in FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler 1.4.1, at app/Http/Routes/api.php

935 lines 39.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php if (!defined('ABSPATH')) exit; ?>
2 <?php
3
4 /**
5 * @var $router Router
6 */
7
8 use FluentCart\App\Http\Controllers\AddonsController;
9 use FluentCart\App\Http\Controllers\AddressInfoController;
10 use FluentCart\App\Http\Controllers\AppControllers\AppController;
11 use FluentCart\App\Http\Controllers\AttributesController;
12 use FluentCart\App\Http\Controllers\CheckoutFieldsController;
13 use FluentCart\App\Http\Controllers\CustomerController;
14 use FluentCart\App\Http\Controllers\DashboardController;
15 use FluentCart\App\Http\Controllers\EmailNotificationController;
16 use FluentCart\App\Http\Controllers\FileUploadController;
17 use FluentCart\App\Http\Controllers\IntegrationController;
18 use FluentCart\App\Http\Controllers\LabelController;
19 use FluentCart\App\Http\Controllers\McpSettingsController;
20 use FluentCart\App\Http\Controllers\ModuleSettingsController;
21 use FluentCart\App\Http\Controllers\NotesController;
22 use FluentCart\App\Http\Controllers\OnboardingController;
23 use FluentCart\App\Http\Controllers\OrderController;
24 use FluentCart\App\Http\Controllers\ProductController;
25 use FluentCart\App\Http\Controllers\ProductDownloadablesController;
26 use FluentCart\App\Http\Controllers\ProductIntegrationsController;
27 use FluentCart\App\Http\Controllers\ProductVariationController;
28 use FluentCart\App\Http\Controllers\StorageController;
29 use FluentCart\App\Http\Controllers\SettingsController;
30 use FluentCart\App\Http\Controllers\CouponsController;
31 use FluentCart\App\Http\Controllers\TaxConfigurationController;
32 use FluentCart\App\Http\Controllers\TaxRateController;
33 use FluentCart\App\Http\Controllers\TemplateController;
34 use FluentCart\App\Http\Controllers\VariantController;
35 use FluentCart\App\Http\Controllers\WidgetsController;
36 use FluentCart\App\Modules\PaymentMethods\PayPalGateway\ConnectConfig;
37 use FluentCart\Framework\Http\Router;
38 use \FluentCart\App\Http\Controllers\PaymentMethodController;
39 use \FluentCart\App\Http\Controllers\ActivityController;
40 use \FluentCart\App\Http\Controllers\TaxController;
41 use \FluentCart\App\Http\Controllers\TaxEUController;
42
43
44 $router->get('widgets', [WidgetsController::class, '__invoke'])->withPolicy('OrderPolicy')->meta([
45 'permissions' => ['customers/view', 'orders/view'],
46 'permissions_type' => 'any'
47 ]);
48
49 $router->prefix('dashboard')->withPolicy('AdminPolicy')->group(function (Router $router) {
50 $router->get('/', [DashboardController::class, 'getOnboardingData']);
51 });
52
53 $router->prefix('dashboard')->withPolicy('DashboardPolicy')->group(function (Router $router) {
54 $router->get('/stats', [DashboardController::class, 'getDashboardStats'])->meta([
55 'permissions' => 'dashboard_stats/view'
56 ]);
57 });
58 $router->prefix('products')->withPolicy('ProductPolicy')->group(function (Router $router) {
59
60 $router->get('/variants', [ProductVariationController::class, 'index'])->meta([
61 'permissions' => [
62 'products/view',
63 'products/view'
64 ]
65 ]);
66
67 $router->get('/', [ProductController::class, 'index'])->meta([
68 'permissions' => 'products/view'
69 ]);
70
71 $router->get('/get-bundle-info/{productId}', [ProductController::class, 'getBundleInfo'])->meta([
72 'permissions' => 'products/view'
73 ]);
74
75 $router->post('/save-bundle-info/{variationId}', [ProductController::class, 'saveBundleInfo'])->meta([
76 'permissions' => 'products/edit'
77 ]);
78
79 $router->get('/fetch-term', [ProductController::class, 'getProductTermsList'])->meta([
80 'permissions' => 'products/view'
81 ]);
82 $router->get('/searchProductByName', [ProductController::class, 'searchProductByName'])->meta([
83 'permissions' => 'products/view'
84 ]);
85
86 $router->get('/suggest-sku', [ProductController::class, 'suggestSku'])->meta([
87 'permissions' => 'products/view'
88 ]);
89
90 $router->get('/searchVariantByName', [ProductController::class, 'searchVariantByName'])->meta([
91 'permissions' => 'products/view'
92 ]);
93
94 $router->get('/search-product-variant-options', [ProductController::class, 'searchProductVariantOptions'])->meta([
95 'permissions' => 'products/view'
96 ]);
97
98 $router->get('/findSubscriptionVariants', [ProductController::class, 'findSubscriptionVariants'])->meta([
99 'permissions' => 'products/view'
100 ]);
101
102 $router->get('/fetchProductsByIds', [ProductController::class, 'fetchProductsByIds'])->meta([
103 'permissions' => 'products/view'
104 ]);
105 $router->get('/fetchVariationsByIds', [ProductController::class, 'fetchVariationsByIds'])->meta([
106 'permissions' => 'products/view'
107 ]);
108 $router->post('/fetch-term-by-parent', [ProductController::class, 'getProductTermListByParent'])->meta([
109 'permissions' => 'products/view'
110 ]);
111 $router->post('/', [ProductController::class, 'create'])->meta([
112 'permissions' => 'products/create'
113 ]);
114 $router->post('/bulk-insert', [ProductController::class, 'bulkInsert'])->meta([
115 'permissions' => 'products/create'
116 ]);
117 $router->get('/bulk-edit-data', [ProductController::class, 'bulkEditFetch'])->meta([
118 'permissions' => 'products/edit'
119 ]);
120 $router->post('/bulk-update', [ProductController::class, 'bulkUpdate'])->meta([
121 'permissions' => 'products/edit'
122 ]);
123 $router->get('/get-max-excerpt-word-count', [ProductController::class, 'getMaxExcerptWordCount'])->meta([
124 'permissions' => 'products/view'
125 ]);
126 $router->get('/{product}', [ProductController::class, 'find'])->meta([
127 'permissions' => 'products/view'
128 ]);
129 $router->get('/{productId}/related-products', [ProductController::class, 'getRelatedProducts'])->meta([
130 'permissions' => 'products/view'
131 ]);
132 $router->get('/{productId}/pricing', [ProductController::class, 'get'])->meta([
133 'permissions' => 'products/view'
134 ]);
135 $router->post('/{productId}/duplicate', [ProductController::class, 'duplicate'])->meta([
136 'permissions' => 'products/create'
137 ]);
138
139 $router->get('/{id}/upgrade-paths', [ProductController::class, 'getUpgradeSettings'])->int('id')->meta([
140 'permissions' => 'products/view'
141 ]);
142 $router->post('/{id}/upgrade-path', [ProductController::class, 'saveUpgradeSetting'])->int('id')->meta([
143 'permissions' => 'products/edit'
144 ]);
145 $router->post('/upgrade-path/{id}/update', [ProductController::class, 'updateUpgradePath'])->int('id')->meta([
146 'permissions' => 'products/edit'
147 ]);
148 $router->delete('/upgrade-path/{id}/delete', [ProductController::class, 'deleteUpgradePath'])->int('id')->meta([
149 'permissions' => 'products/delete'
150 ]);
151
152 $router->get('/variation/{variantId}/upgrade-paths', [ProductController::class, 'getUpgradePaths'])->int('id')->meta([
153 'permissions' => 'products/view'
154 ]);
155
156 $router->post('/{postId}/pricing', [ProductController::class, 'update'])->meta([
157 'permissions' => 'products/edit'
158 ]);
159
160 $router->post('/{postId}/update-long-desc-editor-mode', [ProductController::class, 'updateLongDescEditorMode'])->meta([
161 'permissions' => 'products/edit'
162 ]);
163 $router->post('/{postId}/tax-class', [ProductController::class, 'updateTaxClass'])->meta([
164 'permissions' => 'products/edit'
165 ]);
166 $router->post('/{postId}/tax-class/remove', [ProductController::class, 'removeTaxClass'])->meta([
167 'permissions' => 'products/edit'
168 ]);
169 $router->post('/{postId}/tax-exempt', [ProductController::class, 'toggleTaxExempt'])->meta([
170 'permissions' => 'products/edit'
171 ]);
172
173 $router->post('/{postId}/shipping-class', [ProductController::class, 'updateShippingClass'])->meta([
174 'permissions' => 'products/edit'
175 ]);
176 $router->post('/{postId}/shipping-class/remove', [ProductController::class, 'removeShippingClass'])->meta([
177 'permissions' => 'products/edit'
178 ]);
179
180 // Stock Management
181 $router->put('/{postId}/update-inventory/{variantId}', [ProductController::class, 'updateInventory'])->meta([
182 'permissions' => 'products/edit'
183 ]);
184 $router->put('/{postId}/update-manage-stock', [ProductController::class, 'updateManageStock'])->meta([
185 'permissions' => 'products/edit'
186 ]);
187
188
189
190 $router->post('/{postId}/sync-downloadable-files', [ProductDownloadablesController::class, 'syncDownloadableFiles'])->meta([
191 'permissions' => 'products/edit'
192 ]);
193 $router->put('/{downloadableId}/update', [ProductDownloadablesController::class, 'update'])->meta([
194 'permissions' => 'products/edit'
195 ]);
196 $router->delete('/{downloadableId}/delete', [ProductDownloadablesController::class, 'delete'])->meta([
197 'permissions' => 'products/delete'
198 ]);
199 $router->get('getDownloadableUrl/{downloadableId}', [ProductDownloadablesController::class, 'getDownloadableUrl'])->meta([
200 'permissions' => 'products/view'
201 ]);
202
203 $router->get('/{productId}/pricing-widgets', [ProductController::class, 'getPricingWidgets'])->meta([
204 'permissions' => 'products/view'
205 ]);
206 $router->post('/{postId}/update-variant-option', [ProductController::class, 'updateVariantOption'])->int('id')->meta([
207 'permissions' => 'products/edit'
208 ]);
209 $router->post('/add-product-terms', [ProductController::class, 'addProductTerms'])->meta([
210 'permissions' => 'products/edit'
211 ]);
212 $router->delete('/{product}', [ProductController::class, 'delete'])->meta([
213 'permissions' => 'products/delete'
214 ]);
215
216 $router->post('/do-bulk-action', [ProductController::class, 'handleBulkActions'])->meta([
217 'permissions' => 'products/edit'
218 ]);
219
220 $router->post('/create-dummy', [ProductController::class, 'createDummyProducts'])->meta([
221 'permissions' => 'products/create'
222 ]);
223
224 $router->post('/sync-taxonomy-term/{postId}', [ProductController::class, 'syncTaxonomyTerms'])->meta([
225 'permissions' => 'products/edit'
226 ]);
227 $router->post('/delete-taxonomy-term/{postId}', [ProductController::class, 'deleteTaxonomyTerms'])->meta([
228 'permissions' => 'products/edit'
229 ]);
230
231 $router->post('/detail/{detailId}', [ProductController::class, 'updateProductDetail'])->meta([
232 'permissions' => 'products/edit'
233 ]);
234
235 $router->post('/variants', [ProductVariationController::class, 'create'])->meta([
236 'permissions' => 'products/create'
237 ]);
238
239 $router->post('/variants/{variantId}', [ProductVariationController::class, 'update'])->meta([
240 'permissions' => 'products/edit'
241 ]);
242 $router->post('/variants/{variantId}/tax-exempt', [ProductVariationController::class, 'updateTaxSettings'])->meta([
243 'permissions' => 'products/edit'
244 ]);
245
246 $router->delete('/variants/{variantId}', [ProductVariationController::class, 'delete'])->meta([
247 'permissions' => 'products/delete'
248 ]);
249
250 $router->post('/variants/{variantId}/setMedia', [ProductVariationController::class, 'setMedia'])->meta([
251 'permissions' => 'products/edit'
252 ]);
253
254 $router->put('/variants/{variantId}/pricing-table', [ProductVariationController::class, 'updatePricingTable'])->meta([
255 'permissions' => 'products/edit'
256 ]);
257 });
258
259
260 $router->prefix('variants')->withPolicy('ProductPolicy')->group(function (Router $router) {
261 $router->get('/', [VariantController::class, 'index'])->meta([
262 'permissions' => 'products/view'
263 ]);
264 });
265 //Integration route declaration
266 $router->prefix('integration')->withPolicy('IntegrationPolicy')->group(function (Router $router) {
267
268 $router->get('addons', [AddonsController::class, 'getAddons'])->meta([
269 'permissions' => 'integrations/view'
270 ]);
271
272 $router->get('global-settings', [IntegrationController::class, 'getGlobalSettings'])->meta([
273 'permissions' => 'integrations/view'
274 ]);
275
276 $router->post('global-settings', [IntegrationController::class, 'setGlobalSettings'])->meta([
277 'permissions' => 'integrations/manage'
278 ]);
279
280 $router->get('global-feeds', [IntegrationController::class, 'getFeeds'])->meta([
281 'permissions' => 'integrations/view'
282 ]);
283
284 $router->post('global-feeds/change-status/{integration_id}', [IntegrationController::class, 'changeStatus'])->int('integration_id')->meta([
285 'permissions' => 'integrations/manage'
286 ]);
287
288 $router->delete('global-feeds/{integration_id}', [IntegrationController::class, 'deleteSettings'])->int('integration_id')->meta([
289 'permissions' => 'integrations/delete'
290 ]);
291
292 // For product specific integration feed editor. New or existing integration
293 $router->get('global-feeds/settings', [IntegrationController::class, 'getSettings'])->meta([
294 'permissions' => 'integrations/view'
295 ]);
296
297 // For integration feed editor. For new or existing integration
298 $router->post('global-feeds/settings', [IntegrationController::class, 'saveSettings'])->meta([
299 'permissions' => 'integrations/manage'
300 ]);
301
302 $router->get('feed/lists', [IntegrationController::class, 'lists'])->meta([
303 'permissions' => 'integrations/view'
304 ]);
305
306
307 $router->get('feed/dynamic_options', [IntegrationController::class, 'getDynamicOptions'])->meta([
308 'permissions' => 'integrations/view'
309 ]);
310
311 $router->post('feed/chained', [IntegrationController::class, 'chained'])->meta([
312 'permissions' => 'integrations/manage'
313 ]);
314
315 $router->post('feed/install-plugin', [AddonsController::class, 'installAndActivate'])->meta([
316 'permissions' => 'integrations/manage'
317 ]);
318
319 });
320
321 //End integration route declaration
322
323 $router->post('settings/payment-methods/paypal/seller-auth-token', [ConnectConfig::class, 'getSellerAuthToken'])->withPolicy('AdminPolicy')->meta([
324 'permissions' => 'super_admin'
325 ]);
326
327 $router->post('settings/payment-methods/paypal/webhook/setup', [PaymentMethodController::class, 'setPayPalWebhook'])->withPolicy('AdminPolicy')->meta([
328 'permissions' => 'super_admin'
329 ]);
330 $router->get('settings/payment-methods/paypal/webhook/check', [PaymentMethodController::class, 'checkPayPalWebhook'])->withPolicy('AdminPolicy')->meta([
331 'permissions' => 'super_admin'
332 ]);
333
334
335 $router->prefix('settings/')
336 ->withPolicy('StoreSettingsPolicy')
337 ->group(function (Router $router) {
338
339 $router->get('payment-methods', [PaymentMethodController::class, 'getSettings'])->meta([
340 'permissions' => 'is_super_admin'
341 ]);
342 $router->post('payment-methods', [PaymentMethodController::class, 'store'])->meta([
343 'permissions' => 'is_super_admin'
344 ]);
345 $router->get('payment-methods/all', [PaymentMethodController::class, 'index'])->meta([
346 'permissions' => 'is_super_admin'
347 ]);
348
349 $router->post('payment-methods/reorder', [PaymentMethodController::class, 'reorder'])->meta([
350 'permissions' => 'is_super_admin'
351 ]);
352
353 $router->get('payment-methods/connect/info', [PaymentMethodController::class, 'connectInfo'])->meta([
354 'permissions' => 'is_super_admin'
355 ]);
356 $router->post('payment-methods/disconnect', [PaymentMethodController::class, 'disconnect'])->meta([
357 'permissions' => 'is_super_admin'
358 ]);
359
360 $router->post('payment-methods/design', [PaymentMethodController::class, 'saveDesign'])->meta([
361 'permissions' => 'is_super_admin'
362 ]);
363
364 $router->post('payment-methods/install-addon', [PaymentMethodController::class, 'installAddon'])->meta([
365 'permissions' => 'is_super_admin'
366 ]);
367
368 $router->post('payment-methods/activate-addon', [PaymentMethodController::class, 'activateAddon'])->meta([
369 'permissions' => 'is_super_admin'
370 ]);
371
372 // permissions get and store
373
374 $router->get('/permissions', [SettingsController::class, 'getPermissions'])
375 ->meta([
376 'permissions' => 'is_super_admin'
377 ]);
378
379 $router->post('/permissions', 'SettingsController@savePermissions')->meta([
380 'permissions' => 'is_super_admin'
381 ]);;
382
383
384 $router->get('/store', [SettingsController::class, 'getStore'])
385 ->meta([
386 'permissions' => 'store/settings'
387 ]);
388 $router->post('/store', [SettingsController::class, 'saveStore'])
389 ->meta([
390 'permissions' => 'store/settings'
391 ]);
392
393
394 // Plugin addon management routes (must be before generic modules/ routes)
395 // PDF Template routes are registered by FluentCart Pro plugin
396
397 $router->get('modules/plugin-addons', [ModuleSettingsController::class, 'getPluginAddons'])->meta([
398 'permissions' => 'is_super_admin'
399 ]);
400 $router->post('modules/plugin-addons/install', [ModuleSettingsController::class, 'installPluginAddon'])->meta([
401 'permissions' => 'is_super_admin'
402 ]);
403 $router->post('modules/plugin-addons/activate', [ModuleSettingsController::class, 'activatePluginAddon'])->meta([
404 'permissions' => 'is_super_admin'
405 ]);
406 $router->post('modules/turnstile/verify', [ModuleSettingsController::class, 'verifyTurnstileKeys'])->meta([
407 'permissions' => 'is_super_admin'
408 ]);
409 $router->get('modules', [ModuleSettingsController::class, 'getSettings'])->meta([
410 'permissions' => 'is_super_admin'
411 ]);
412 $router->post('modules', [ModuleSettingsController::class, 'saveSettings'])->meta([
413 'permissions' => 'is_super_admin'
414 ]);
415
416 // MCP (Features & addon → MCP card): status, on/off toggle, connection snippet.
417 $router->get('mcp', [McpSettingsController::class, 'status'])->meta([
418 'permissions' => 'is_super_admin'
419 ]);
420 $router->post('mcp/toggle', [McpSettingsController::class, 'toggle'])->meta([
421 'permissions' => 'is_super_admin'
422 ]);
423 $router->post('mcp/install-adapter', [McpSettingsController::class, 'installAdapter'])->meta([
424 'permissions' => 'is_super_admin'
425 ]);
426 $router->get('mcp/config-snippets', [McpSettingsController::class, 'getConfigSnippets'])->meta([
427 'permissions' => 'is_super_admin'
428 ]);
429
430
431 $router->post('confirmation', [SettingsController::class, 'saveConfirmation'])->meta([
432 'permissions' => 'is_super_admin'
433 ]);
434 //shortcode get
435 $router->get('confirmation/shortcode', [SettingsController::class, 'getShortcode'])->meta([
436 'permissions' => 'is_super_admin'
437 ]);
438
439
440 $router->get('storage-drivers', [StorageController::class, 'index'])->meta([
441 'permissions' => 'is_super_admin'
442 ]);
443 $router->post('storage-drivers', [StorageController::class, 'store'])->meta([
444 'permissions' => 'is_super_admin'
445 ]);
446 $router->get('storage-drivers/active-drivers', [StorageController::class, 'getActiveDrivers'])->meta([
447 'permissions' => 'is_super_admin'
448 ]);
449 $router->get('storage-drivers/{driver}', [StorageController::class, 'getSettings'])->meta([
450 'permissions' => 'is_super_admin'
451 ]);
452 $router->post('storage-drivers/verify-info', [StorageController::class, 'verifyConnectInfo'])->meta([
453 'permissions' => 'is_super_admin'
454 ]);
455 $router->post('storage-drivers/create-bucket', [StorageController::class, 'createBucket'])->meta([
456 'permissions' => 'is_super_admin'
457 ]);
458 $router->post('storage-drivers/bucket-list', [StorageController::class, 'listBuckets'])->meta([
459 'permissions' => 'is_super_admin'
460 ]);
461 $router->post('storage-drivers/reset', [StorageController::class, 'resetSettings'])->meta([
462 'permissions' => 'is_super_admin'
463 ]);
464 $router->post('storage-drivers/change-status', [StorageController::class, 'changeStatus'])->meta([
465 'permissions' => 'is_super_admin'
466 ]);
467
468
469 });
470
471 $router->prefix('orders')->withPolicy('OrderPolicy')->group(function (Router $router) {
472 $router->get('/', [OrderController::class, 'index'])->meta([
473 'permissions' => 'orders/view'
474 ]);
475
476 $router->post('/calculate-shipping', [OrderController::class, 'updateShipping'])->meta([
477 'permissions' => ['orders/create', 'orders/manage']
478 ]);
479
480 // Public utility: pure tax calculation, no DB writes. No longer called by the admin Vue
481 // (tax is now auto-applied server-side on save). Available for third-party integrations.
482 $router->post('/calculate-tax', [OrderController::class, 'calculateTax'])->meta([
483 'permissions' => ['orders/create', 'orders/manage'],
484 'permissions_type' => 'any',
485 ]);
486
487 $router->post('/', [OrderController::class, 'store'])->meta([
488 'permissions' => 'orders/create'
489 ]);
490
491 $router->post('/do-bulk-action', [OrderController::class, 'handleBulkActions'])->meta([
492 'permissions' => 'orders/manage'
493 ]);
494
495 $router->post('/{order}/mark-as-paid', [OrderController::class, 'markAsPaid'])->meta([
496 'permissions' => 'orders/manage'
497 ]);
498
499 $router->post('/{order}/generate-missing-licenses', [OrderController::class, 'generateMissingLicenses'])->meta([
500 'permissions' => 'orders/manage'
501 ]);
502
503 $router->get('/{order_id}', [OrderController::class, 'getDetails'])->int('order_id')->meta([
504 'permissions' => 'orders/view'
505 ]);
506
507 $router->post('/{order_id}', [OrderController::class, 'updateOrder'])
508 ->int('order_id')
509 ->meta([
510 'permissions' => 'orders/manage'
511 ]);
512
513 $router->post('/{order_id}/update-address-id', [OrderController::class, 'updateOrderAddressId'])
514 ->int('order_id')
515 ->meta([
516 'permissions' => 'orders/manage'
517 ]);
518
519 $router->post('/{order_id}/refund', [OrderController::class, 'refundOrder'])
520 ->int('order_id')
521 ->meta([
522 'permissions' => 'orders/can_refund'
523 ]);
524
525 $router->post('/{order_id}/change-customer', [OrderController::class, 'changeCustomer'])->int('order_id')->meta([
526 'permissions' => 'orders/manage'
527 ]);
528
529 $router->post('/{order_id}/create-and-change-customer', [OrderController::class, 'createAndChangeCustomer'])->meta([
530 'permissions' => 'orders/manage'
531 ])->int('order_id');
532
533 $router->delete('/{order_id}', [OrderController::class, 'deleteOrder'])->meta([
534 'permissions' => 'orders/delete'
535 ])->int('order_id');
536
537 $router->put('/{order}/statuses', [OrderController::class, 'updateStatuses'])->meta([
538 'permissions' => 'orders/manage_statuses'
539 ]);
540
541 $router->get('/{order}/transactions', [OrderController::class, 'getDetails'])->meta([
542 'permissions' => 'orders/view'
543 ]);
544
545 $router->post('/{order}/transactions/{transaction_id}/accept-dispute/', [OrderController::class, 'acceptDispute'])->meta([
546 'permissions' => 'orders/manage'
547 ]);
548
549 $router->get('/{id}/transactions/{transaction_id}', [OrderController::class, 'getDetails'])->meta([
550 'permissions' => 'orders/view'
551 ]);
552
553 $router->put('/{order}/address/{id}', [OrderController::class, 'updateOrderAddress'])->meta([
554 'permissions' => 'orders/manage'
555 ]);
556
557 $router->put('/{order}/transactions/{transaction}/status', [OrderController::class, 'updateTransactionStatus'])->meta([
558 'permissions' => 'orders/manage'
559 ]);
560
561 $router->post('/{order}/create-custom', [OrderController::class, 'createCustom'])->int('id')->meta([
562 'permissions' => 'orders/create'
563 ]);
564
565 $router->get('/shipping_methods', [OrderController::class, 'getShippingMethods'])->meta([
566 'permissions' => 'orders/manage'
567 ]);
568
569 $router->put('/{order}/sync-statuses', [OrderController::class, 'syncOrderStatuses'])->meta([
570 'permissions' => 'orders/manage'
571 ]);
572
573 });
574
575
576 $router->prefix('labels')->withPolicy('LabelPolicy')->group(function (Router $router) {
577 $router->get('/', [LabelController::class, 'index'])->meta([
578 'permissions' => 'labels/view'
579 ]);
580 $router->post('/', [LabelController::class, 'create'])->meta([
581 'permissions' => 'labels/manage'
582 ]);
583 $router->post('/update-label-selections', [LabelController::class, 'updateSelections'])->meta([
584 'permissions' => 'labels/manage'
585 ]);
586 });
587
588 $router->prefix('customers')->withPolicy('CustomerPolicy')->group(function (Router $router) {
589 $router->get('/', [CustomerController::class, 'index'])->meta([
590 'permissions' => 'customers/view'
591 ]);
592
593 $router->post('/', [CustomerController::class, 'store'])->meta([
594 'permissions' => 'customers/manage'
595 ]);
596
597 $router->get('/get-stats/{customer}', [CustomerController::class, 'getStats'])->meta([
598 'permissions' => 'customers/view'
599 ]);
600
601 $router->get('/attachable-user', [CustomerController::class, 'getAttachableUser'])->meta([
602 'permissions' => 'customers/manage'
603 ]);
604
605 $router->post('/{customerId}/attachable-user', [CustomerController::class, 'setAttachableUser'])->meta([
606 'permissions' => 'customers/manage'
607 ]);
608
609 $router->post('/{customerId}/detach-user', [CustomerController::class, 'detachCustomer'])->meta([
610 'permissions' => 'customers/manage'
611 ]);
612
613 $router->get('/{customerId}', [CustomerController::class, 'find'])->int('customerId')->meta([
614 'permissions' => 'customers/view'
615 ]);
616
617 $router->get('/{customerId}/order', [CustomerController::class, 'findOrder'])->int('customerId')->meta([
618 'permissions' => 'customers/view'
619 ]);
620
621 $router->put('/{customerId}', [CustomerController::class, 'update'])->meta([
622 'permissions' => 'customers/manage'
623 ]);
624
625 $router->put('/{customerId}/additional-info', [CustomerController::class, 'updateAdditionalInfo'])->meta([
626 'permissions' => 'customers/manage'
627 ]);
628
629 $router->post('/do-bulk-action', [CustomerController::class, 'handleBulkActions'])->meta([
630 'permissions' => 'customers/manage'
631 ]);
632
633 $router->get('/{customerId}/orders', [CustomerController::class, 'getCustomerOrders'])->meta([
634 'permissions' => 'customers/view'
635 ]);
636
637 $router->get('/{customerId}/address', [CustomerController::class, 'getAddress'])->meta([
638 'permissions' => 'customers/view'
639 ]);
640
641 $router->put('/{customerId}/address', [CustomerController::class, 'updateAddress'])->meta([
642 'permissions' => 'customers/manage'
643 ]);
644
645 $router->post('/{customerId}/address', [CustomerController::class, 'createAddress'])->meta([
646 'permissions' => 'customers/manage'
647 ]);
648
649 $router->delete('/{customerId}/address', [CustomerController::class, 'removeAddress'])->meta([
650 'permissions' => 'customers/delete'
651 ]);
652
653 $router->post('/{customerId}/address/make-primary', [CustomerController::class, 'setAddressPrimary'])->meta([
654 'permissions' => 'customers/manage'
655 ]);
656
657 $router->post('/{customerId}/recalculate-ltv', [CustomerController::class, 'recalculateLtv'])->int('customerId')->meta([
658 'permissions' => 'customers/manage'
659 ]);
660
661 });
662
663
664 $router->prefix('options')->withPolicy('ProductPolicy')->group(function (Router $router) {
665 $router->get('attr/groups', [AttributesController::class, 'getGroups'])->meta([
666 'permissions' => 'products/view'
667 ]);
668
669 $router->post('attr/group/', [AttributesController::class, 'createGroup'])->meta([
670 'permissions' => 'products/create'
671 ]);
672
673 $router->get('attr/group/{group_id}', [AttributesController::class, 'getGroup'])->meta([
674 'permissions' => 'products/view'
675 ]);
676
677 $router->put('attr/group/{group_id}', [AttributesController::class, 'updateGroup'])->meta([
678 'permissions' => 'products/edit'
679 ]);
680
681 $router->delete('attr/group/{group_id}', [AttributesController::class, 'deleteGroup'])->meta([
682 'permissions' => 'products/delete'
683 ]);
684
685 $router->get('attr/group/{group_id}/terms', [AttributesController::class, 'getTerms'])->meta([
686 'permissions' => 'products/view'
687 ]);
688
689 $router->post('attr/group/{group_id}/term', [AttributesController::class, 'createTerm'])->meta([
690 'permissions' => 'products/create'
691 ]);
692
693 $router->post('attr/group/{group_id}/term/{term_id}', [AttributesController::class, 'updateTerm'])->meta([
694 'permissions' => 'products/edit'
695 ]);
696
697 $router->delete('attr/group/{group_id}/term/{term_id}', [AttributesController::class, 'deleteTerm'])->meta([
698 'permissions' => 'products/delete'
699 ]);
700
701 $router->post('attr/group/{group_id}/term/{term_id}/serial', [AttributesController::class, 'changeTermSerial'])->meta([
702 'permissions' => 'products/edit'
703 ]);
704 });
705
706
707 $router->prefix('onboarding')->withPolicy('AdminPolicy')->group(function (Router $router) {
708 $router->get('/', [OnboardingController::class, 'index']);
709 $router->post('/', [OnboardingController::class, 'saveSettings']);
710 $router->post('/create-pages', [OnboardingController::class, 'createPages']);
711 $router->post('/create-page', [OnboardingController::class, 'createPage']);
712 $router->post('/save-tax', [OnboardingController::class, 'saveTaxSettings']);
713 });
714 $router->prefix('email-notification')->withPolicy('StoreSensitivePolicy')->group(function (Router $router) {
715 $router->get('/', [EmailNotificationController::class, 'index']);
716 $router->get('/get-short-codes', [EmailNotificationController::class, 'getShortCodes']);
717 $router->get('/get-settings', [EmailNotificationController::class, 'getSettings']);
718 $router->post('/save-settings', [EmailNotificationController::class, 'saveSettings']);
719 $router->get('/reminders', [EmailNotificationController::class, 'getSchedulingSettings']);
720 $router->post('/reminders', [EmailNotificationController::class, 'saveSchedulingSettings']);
721 $router->get('/digest-settings', [EmailNotificationController::class, 'getDigestSettings']);
722 $router->post('/digest-settings', [EmailNotificationController::class, 'saveDigestSettings']);
723 $router->post('/digest-settings/send-test', [EmailNotificationController::class, 'sendDigestTest']);
724 $router->post('/enable-notification/{name}', [EmailNotificationController::class, 'enableNotification']);
725 $router->post('/send-manual-reminder', [EmailNotificationController::class, 'sendManualReminder']);
726 $router->post('/preview-default-template', [EmailNotificationController::class, 'previewDefaultTemplate']);
727 $router->get('/{notification}', [EmailNotificationController::class, 'find']);
728 $router->put('/{notification}', [EmailNotificationController::class, 'update']);
729
730 });
731
732 $router->prefix('templates')->withPolicy('AdminPolicy')->group(function (Router $router) {
733 $router->get('/print-templates', [TemplateController::class, 'getPrintTemplates']);
734 $router->put('/print-templates', [TemplateController::class, 'savePrintTemplates']);
735 });
736
737
738 $router->prefix('coupons')->withPolicy('CouponPolicy')->group(function ($router) {
739 $router->get('/listCoupons', [CouponsController::class, 'listCoupons'])->meta([
740 'permissions' => ['orders/create', 'orders/manage', 'coupons/view']
741 ]);
742
743 $router->get('/', [CouponsController::class, 'index'])->meta([
744 'permissions' => 'coupons/view'
745 ]);
746 $router->get('/getSettings', [CouponsController::class, 'getSettings'])->meta([
747 'permissions' => 'coupons/view'
748 ]);
749 $router->get('/{id}', [CouponsController::class, 'viewDetails'])->meta([
750 'permissions' => 'coupons/view'
751 ]);
752 $router->post('/', [CouponsController::class, 'create'])->meta([
753 'permissions' => 'coupons/manage'
754 ]);
755 $router->put('/{id}', [CouponsController::class, 'update'])->meta([
756 'permissions' => 'coupons/manage'
757 ]);
758 $router->delete('/{id}', [CouponsController::class, 'delete'])->meta([
759 'permissions' => 'coupons/delete'
760 ]);
761 $router->post('/apply', [CouponsController::class, 'applyCoupon'])->meta([
762 'permissions' => ['orders/create', 'orders/manage'],
763 ]);
764 // $router->post('/apply', [CouponsController::class, 'calculateFinalAmount']);
765 $router->post('/cancel', [CouponsController::class, 'cancelCoupon'])->meta([
766 'permissions' => ['orders/create', 'orders/manage'],
767 ]);
768
769 $router->post('/re-apply', [CouponsController::class, 'reapplyCoupon'])->meta([
770 'permissions' => ['orders/create', 'orders/manage'],
771 ]);
772
773 $router->post('/checkProductEligibility', [CouponsController::class, 'isProductEligible'])->meta([
774 'permissions' => ['orders/create', 'orders/manage'],
775 ]);
776
777 $router->post('/storeCouponSettings', [CouponsController::class, 'storeCouponSettings'])->meta([
778 'permissions' => 'coupons/manage'
779 ]);
780 });
781
782 $router->prefix('files')->withPolicy('StoreSensitivePolicy')->group(function (Router $router) {
783 $router->get('/', [FileUploadController::class, 'index']);
784 $router->post('/upload', [FileUploadController::class, 'upload']);
785 $router->get('/bucket-list', [FileUploadController::class, 'getBucketList']);
786 $router->delete('/delete', [FileUploadController::class, 'deleteFile']);
787 });
788
789 $router->post('/upload-editor-file', [FileUploadController::class, 'uploadEditorFile'])->withPolicy('AdminPolicy');
790
791 $router->prefix('notes')->withPolicy('AdminPolicy')->group(function (Router $router) {
792 $router->post('/attach', [NotesController::class, 'attach']);
793 });
794
795 $router->prefix('app')->withPolicy('AdminPolicy')->group(function (Router $router) {
796 $router->get('init', [AppController::class, 'init']);
797 $router->get('attachments', [AppController::class, 'attachments']);
798 $router->post('upload-attachments', [AppController::class, 'uploadAttachments']);
799 });
800
801 $router->prefix('activity')->withPolicy('AdminPolicy')->group(function (Router $router) {
802 $router->get('/', [ActivityController::class, 'index']);
803 $router->delete('/{id}', [ActivityController::class, 'delete']);
804 $router->put('/{id}/mark-read', [ActivityController::class, 'markReadUnread']);
805 });
806
807 $router->prefix('taxes')->withPolicy('AdminPolicy')->group(function (Router $router) {
808 $router->get('/', [TaxController::class, 'index']);
809 $router->post('/', [TaxController::class, 'markAsFiled']);
810 });
811
812 $router->prefix('address-info')->withPolicy('UserPolicy')->group(function ($router) {
813 $router->get('/countries', [AddressInfoController::class, 'countriesOption']);
814 $router->get('/get-country-info', [AddressInfoController::class, 'getCountryInfo']);
815 });
816
817 // Add these new routes for product-specific integration settings
818 $router->prefix('products')->withPolicy('ProductPolicy')->group(function (Router $router) {
819 // New routes for product integrations
820 $router->get('/{product_id}/integrations/{integration_name}/settings', [ProductIntegrationsController::class, 'getProductIntegrationSettings'])->meta([
821 'permissions' => 'products/view'
822 ]);
823
824 $router->post('/{product_id}/integrations', [ProductIntegrationsController::class, 'saveProductIntegration'])->meta([
825 'permissions' => 'products/edit'
826 ]);
827
828 $router->delete('/{product_id}/integrations/{integration_id}', [ProductIntegrationsController::class, 'deleteProductIntegration'])->meta([
829 'permissions' => 'products/delete'
830 ]);
831
832 $router->post('/{product_id}/integrations/feed/change-status', [ProductIntegrationsController::class, 'changeStatus'])->meta([
833 'permissions' => 'products/edit'
834 ]);
835
836 $router->get('/{productId}/integrations', [ProductIntegrationsController::class, 'getFeeds'])->meta([
837 'permissions' => 'products/view'
838 ]);
839
840 });
841
842
843 // Tax Routes
844 $router->prefix('tax')->withPolicy('StoreSettingsPolicy')->group(function (Router $router) {
845 // TaxClass routes
846 $router->get('classes', [TaxRateController::class, 'getClasses'])->meta([
847 'permissions' => 'store/settings'
848 ]);
849 $router->post('classes', [TaxRateController::class, 'createClass'])->meta([
850 'permissions' => 'store/sensitive'
851 ]);
852 $router->delete('classes/{id}', [TaxRateController::class, 'deleteClass'])->int('id')->meta([
853 'permissions' => 'store/sensitive'
854 ]);
855
856 // TaxRates routes
857 $router->get('rates', [TaxRateController::class, 'index'])->meta([
858 'permissions' => 'store/settings'
859 ]);
860 $router->get('rates/country/rates/{country_code}', [TaxRateController::class, 'show'])->meta([
861 'permissions' => 'store/settings'
862 ]);
863 $router->post('rates/country/override', [TaxRateController::class, 'saveShippingOverride'])->meta([
864 'permissions' => 'store/sensitive'
865 ]);
866 $router->delete('rates/country/override/{id}', [TaxRateController::class, 'deleteShippingOverride'])->int('id')->meta([
867 'permissions' => 'store/sensitive'
868 ]);
869 $router->put('country/rate/{id}', [TaxRateController::class, 'update'])->int('id')->meta([
870 'permissions' => 'store/sensitive'
871 ]);
872 $router->post('country/rate', [TaxRateController::class, 'store'])->meta([
873 'permissions' => 'store/sensitive'
874 ]);
875 $router->delete('country/rate/{id}', [TaxRateController::class, 'delete'])->int('id')->meta([
876 'permissions' => 'store/sensitive'
877 ]);
878 $router->post('country-status/{country_code}', [TaxRateController::class, 'updateCountryStatus'])->meta([
879 'permissions' => 'store/sensitive'
880 ]);
881 $router->get('country-tax-id/{country_code}', [TaxRateController::class, 'getCountryTaxId'])->meta([
882 'permissions' => 'store/settings'
883 ]);
884 $router->post('country-tax-id/{country_code}', [TaxRateController::class, 'saveCountryTaxId'])->meta([
885 'permissions' => 'store/sensitive'
886 ]);
887
888 // Product category tax overrides
889 $router->get('product-overrides/{country_code}', [TaxRateController::class, 'getProductOverrides'])->meta([
890 'permissions' => 'store/settings'
891 ]);
892 $router->post('product-overrides', [TaxRateController::class, 'saveProductOverride'])->meta([
893 'permissions' => 'store/sensitive'
894 ]);
895 $router->delete('product-overrides/{id}', [TaxRateController::class, 'deleteProductOverride'])->int('id')->meta([
896 'permissions' => 'store/sensitive'
897 ]);
898
899 // $router->post('rates/country', [TaxRateController::class, 'addCountry']);
900
901 // TaxConfiguration routes
902 $router->get('configuration/rates', [TaxConfigurationController::class, 'getTaxRates'])->meta([
903 'permissions' => 'store/settings'
904 ]);
905 $router->post('configuration/countries', [TaxConfigurationController::class, 'saveConfiguredCountries'])->meta([
906 'permissions' => 'store/sensitive'
907 ]);
908 $router->get('configuration/settings', [TaxConfigurationController::class, 'getSettings'])->meta([
909 'permissions' => 'store/settings'
910 ]);
911 $router->post('configuration/settings', [TaxConfigurationController::class, 'saveSettings'])->meta([
912 'permissions' => 'store/sensitive'
913 ]);
914 $router->post('configuration/settings/eu-vat', [TaxEUController::class, 'saveEuVatSettings'])->meta([
915 'permissions' => 'store/sensitive'
916 ]);
917 $router->post('configuration/settings/eu-vat/reset-rates', [TaxEUController::class, 'resetEuRatesToDefaults'])->meta([
918 'permissions' => 'store/sensitive'
919 ]);
920 $router->get('configuration/settings/eu-vat/product-overrides', [TaxEUController::class, 'getEuProductOverrides'])->meta([
921 'permissions' => 'store/settings'
922 ]);
923 $router->get('configuration/settings/eu-vat/oss-rates', [TaxEUController::class, 'getOssCountryRates'])->meta([
924 'permissions' => 'store/settings'
925 ]);
926 $router->post('configuration/settings/eu-vat/oss-rates', [TaxEUController::class, 'saveOssCountryRates'])->meta([
927 'permissions' => 'store/sensitive'
928 ]);
929 });
930
931 $router->prefix('checkout-fields')->withPolicy('StoreSensitivePolicy')->group(function (Router $router) {
932 $router->get('get-fields', [CheckoutFieldsController::class, 'getFields']);
933 $router->post('save-fields', [CheckoutFieldsController::class, 'saveFields']);
934 });
935