| @@ -11,11 +11,13 @@ | ||
| 11 | 11 | use FluentCart\App\Http\Controllers\AppControllers\AppController; |
| 12 | 12 | use FluentCart\App\Http\Controllers\CheckoutFieldsController; |
| 13 | 13 | use FluentCart\App\Http\Controllers\CustomerController; |
| 14 | 14 | use FluentCart\App\Http\Controllers\DashboardController; |
| 15 | +use FluentCart\App\Http\Controllers\DataBackfillController; | |
| 15 | 16 | use FluentCart\App\Http\Controllers\EmailNotificationController; |
| 16 | 17 | use FluentCart\App\Http\Controllers\FileUploadController; |
| 17 | 18 | use FluentCart\App\Http\Controllers\IntegrationController; |
| 19 | +use FluentCart\App\Http\Controllers\RenewalController; | |
| 18 | 20 | use FluentCart\App\Http\Controllers\LabelController; |
| 19 | 21 | use FluentCart\App\Http\Controllers\McpSettingsController; |
| 20 | 22 | use FluentCart\App\Http\Controllers\ModuleSettingsController; |
| 21 | 23 | use FluentCart\App\Http\Controllers\NotesController; |
| @@ -49,8 +51,12 @@ | ||
| 49 | 51 | $router->prefix('dashboard')->withPolicy('AdminPolicy')->group(function (Router $router) { |
| 50 | 52 | $router->get('/', [DashboardController::class, 'getOnboardingData']); |
| 51 | 53 | }); |
| 52 | 54 | |
| 55 | +$router->prefix('data-backfills')->withPolicy('AdminPolicy')->group(function (Router $router) { | |
| 56 | + $router->post('/run', [DataBackfillController::class, 'run']); | |
| 57 | +}); | |
| 58 | + | |
| 53 | 59 | $router->prefix('dashboard')->withPolicy('DashboardPolicy')->group(function (Router $router) { |
| 54 | 60 | $router->get('/stats', [DashboardController::class, 'getDashboardStats'])->meta([ |
| 55 | 61 | 'permissions' => 'dashboard_stats/view' |
| 56 | 62 | ]); |
| @@ -547,9 +553,9 @@ | ||
| 547 | 553 | 'permissions' => 'orders/create' |
| 548 | 554 | ]); |
| 549 | 555 | |
| 550 | 556 | $router->post('/do-bulk-action', [OrderController::class, 'handleBulkActions'])->meta([ |
| 551 | - 'permissions' => 'orders/manage' | |
| 557 | + 'permissions' => 'orders/delete' // every accepted action deletes orders — same gate as DELETE /{order_id} | |
| 552 | 558 | ]); |
| 553 | 559 | |
| 554 | 560 | $router->post('/{order}/mark-as-paid', [OrderController::class, 'markAsPaid'])->meta([ |
| 555 | 561 | 'permissions' => 'orders/manage' |
| @@ -604,11 +610,13 @@ | ||
| 604 | 610 | $router->post('/{order}/transactions/{transaction_id}/accept-dispute/', [OrderController::class, 'acceptDispute'])->meta([ |
| 605 | 611 | 'permissions' => 'orders/manage' |
| 606 | 612 | ]); |
| 607 | 613 | |
| 608 | - $router->get('/{id}/transactions/{transaction_id}', [OrderController::class, 'getDetails'])->meta([ | |
| 609 | - 'permissions' => 'orders/view' | |
| 610 | - ]); | |
| 614 | + $router->get('/{id}/transactions/{transaction_id}', [OrderController::class, 'getTransactionDetails']) | |
| 615 | + ->int('id', 'transaction_id') | |
| 616 | + ->meta([ | |
| 617 | + 'permissions' => 'orders/view' | |
| 618 | + ]); | |
| 611 | 619 | |
| 612 | 620 | $router->put('/{order}/address/{id}', [OrderController::class, 'updateOrderAddress'])->meta([ |
| 613 | 621 | 'permissions' => 'orders/manage' |
| 614 | 622 | ]); |
| @@ -616,8 +624,12 @@ | ||
| 616 | 624 | $router->put('/{order}/transactions/{transaction}/status', [OrderController::class, 'updateTransactionStatus'])->meta([ |
| 617 | 625 | 'permissions' => 'orders/manage' |
| 618 | 626 | ]); |
| 619 | 627 | |
| 628 | + $router->post('/{order}/transactions/{transaction}/sync', [OrderController::class, 'syncPendingTransaction'])->meta([ | |
| 629 | + 'permissions' => 'orders/manage' | |
| 630 | + ]); | |
| 631 | + | |
| 620 | 632 | $router->post('/{order}/create-custom', [OrderController::class, 'createCustom'])->int('id')->meta([ |
| 621 | 633 | 'permissions' => 'orders/create' |
| 622 | 634 | ]); |
| 623 | 635 | |
| @@ -630,9 +642,26 @@ | ||
| 630 | 642 | ]); |
| 631 | 643 | |
| 632 | 644 | }); |
| 633 | 645 | |
| 646 | +$router->prefix('renewals')->withPolicy('OrderPolicy')->group(function (Router $router) { | |
| 647 | + $router->get('/', [RenewalController::class, 'index'])->meta([ | |
| 648 | + 'permissions' => 'orders/view' | |
| 649 | + ]); | |
| 634 | 650 | |
| 651 | + $router->get('/{id}', [RenewalController::class, 'show'])->int('id')->meta([ | |
| 652 | + 'permissions' => 'orders/view' | |
| 653 | + ]); | |
| 654 | + | |
| 655 | + $router->post('/{order}/void', [RenewalController::class, 'void'])->meta([ | |
| 656 | + 'permissions' => 'orders/manage' | |
| 657 | + ]); | |
| 658 | + | |
| 659 | + $router->post('/{order}/resend', [RenewalController::class, 'resend'])->meta([ | |
| 660 | + 'permissions' => 'orders/manage' | |
| 661 | + ]); | |
| 662 | +}); | |
| 663 | + | |
| 635 | 664 | $router->prefix('labels')->withPolicy('LabelPolicy')->group(function (Router $router) { |
| 636 | 665 | $router->get('/', [LabelController::class, 'index'])->meta([ |
| 637 | 666 | 'permissions' => 'labels/view' |
| 638 | 667 | ]); |
| @@ -804,10 +833,10 @@ | ||
| 804 | 833 | }); |
| 805 | 834 | |
| 806 | 835 | $router->post('/upload-editor-file', [FileUploadController::class, 'uploadEditorFile'])->withPolicy('AdminPolicy'); |
| 807 | 836 | |
| 808 | -$router->prefix('notes')->withPolicy('AdminPolicy')->group(function (Router $router) { | |
| 809 | - $router->post('/attach', [NotesController::class, 'attach']); | |
| 837 | +$router->prefix('notes')->withPolicy('OrderPolicy')->group(function (Router $router) { | |
| 838 | + $router->post('/attach', [NotesController::class, 'attach'])->meta(['permissions' => 'orders/manage']); | |
| 810 | 839 | }); |
| 811 | 840 | |
| 812 | 841 | $router->prefix('app')->withPolicy('AdminPolicy')->group(function (Router $router) { |
| 813 | 842 | $router->get('init', [AppController::class, 'init']); |
| @@ -889,11 +918,8 @@ | ||
| 889 | 918 | $router->post('country/rate', [TaxRateController::class, 'store'])->meta([ |
| 890 | 919 | 'permissions' => 'store/sensitive' |
| 891 | 920 | ]); |
| 892 | 921 | $router->delete('country/rate/{id}', [TaxRateController::class, 'delete'])->int('id')->meta([ |
| 893 | - 'permissions' => 'store/sensitive' | |
| 894 | - ]); | |
| 895 | - $router->delete('country/{country_code}', [TaxRateController::class, 'deleteCountry'])->meta([ | |
| 896 | 922 | 'permissions' => 'store/sensitive' |
| 897 | 923 | ]); |
| 898 | 924 | $router->post('country-status/{country_code}', [TaxRateController::class, 'updateCountryStatus'])->meta([ |
| 899 | 925 | 'permissions' => 'store/sensitive' |