diff --git a/app/Http/Middleware/WithoutSsr.php b/app/Http/Middleware/WithoutSsr.php new file mode 100644 index 00000000..15f013f4 --- /dev/null +++ b/app/Http/Middleware/WithoutSsr.php @@ -0,0 +1,17 @@ + false]); + + return $next($request); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index fe8ddc71..d91ca9e3 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -13,6 +13,7 @@ use Illuminate\Http\Request; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', + api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 00000000..8bb1d34f --- /dev/null +++ b/routes/api.php @@ -0,0 +1,50 @@ +group(function () { + // Encryption + Route::post('encryption/setup', [EncryptionController::class, 'setup']); + Route::get('encryption/message', [EncryptionController::class, 'getMessage']); + + // Sync + Route::prefix('sync')->group(function () { + Route::get('categories', [CategorySyncController::class, 'index']); + Route::get('accounts', [AccountSyncController::class, 'index']); + Route::get('banks', [BankSyncController::class, 'index']); + Route::get('automation-rules', [AutomationRuleSyncController::class, 'index']); + + Route::get('transactions', [TransactionSyncController::class, 'index']); + Route::post('transactions', [TransactionSyncController::class, 'store']); + Route::patch('transactions/{transaction}', [TransactionSyncController::class, 'update']); + Route::delete('transactions/{transaction}', [TransactionSyncController::class, 'destroy']); + + Route::get('account-balances', [AccountBalanceSyncController::class, 'index']); + Route::post('account-balances', [AccountBalanceSyncController::class, 'store']); + Route::patch('account-balances/{accountBalance}', [AccountBalanceSyncController::class, 'update']); + }); + + // Account Balances + Route::put('accounts/{account}/balance/current', [AccountBalanceController::class, 'updateCurrent'])->name('api.accounts.balance.update-current'); + Route::get('accounts/{account}/balances', [AccountBalanceController::class, 'index'])->name('api.accounts.balances.index'); + Route::delete('accounts/{account}/balances/{accountBalance}', [AccountBalanceController::class, 'destroy'])->name('api.accounts.balances.destroy'); + + // Dashboard Analytics + Route::prefix('dashboard')->group(function () { + Route::get('net-worth', [DashboardAnalyticsController::class, 'netWorth']); + Route::get('monthly-spending', [DashboardAnalyticsController::class, 'monthlySpending']); + Route::get('cash-flow', [DashboardAnalyticsController::class, 'cashFlow']); + Route::get('net-worth-evolution', [DashboardAnalyticsController::class, 'netWorthEvolution']); + Route::get('top-categories', [DashboardAnalyticsController::class, 'topCategories']); + Route::get('account/{account}/balance-evolution', [DashboardAnalyticsController::class, 'accountBalanceEvolution']); + }); +}); diff --git a/routes/web.php b/routes/web.php index 49f072de..a98a3a00 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,18 +1,13 @@ group(function () { Route::get('setup-encryption', function () { return Inertia::render('auth/setup-encryption'); })->name('setup-encryption'); - - Route::post('api/encryption/setup', [EncryptionController::class, 'setup']); - Route::get('api/encryption/message', [EncryptionController::class, 'getMessage']); - - Route::get('api/sync/categories', [CategorySyncController::class, 'index']); - Route::get('api/sync/accounts', [AccountSyncController::class, 'index']); - Route::get('api/sync/banks', [BankSyncController::class, 'index']); - Route::get('api/sync/automation-rules', [\App\Http\Controllers\Sync\AutomationRuleSyncController::class, 'index']); - Route::get('api/sync/transactions', [\App\Http\Controllers\Sync\TransactionSyncController::class, 'index']); - Route::post('api/sync/transactions', [\App\Http\Controllers\Sync\TransactionSyncController::class, 'store']); - Route::patch('api/sync/transactions/{transaction}', [\App\Http\Controllers\Sync\TransactionSyncController::class, 'update']); - Route::delete('api/sync/transactions/{transaction}', [\App\Http\Controllers\Sync\TransactionSyncController::class, 'destroy']); - Route::get('api/sync/account-balances', [AccountBalanceSyncController::class, 'index']); - Route::post('api/sync/account-balances', [AccountBalanceSyncController::class, 'store']); - Route::patch('api/sync/account-balances/{accountBalance}', [AccountBalanceSyncController::class, 'update']); - Route::put('api/accounts/{account}/balance/current', [AccountBalanceController::class, 'updateCurrent'])->name('accounts.balance.update-current'); - Route::get('api/accounts/{account}/balances', [AccountBalanceController::class, 'index'])->name('accounts.balances.index'); - Route::delete('api/accounts/{account}/balances/{accountBalance}', [AccountBalanceController::class, 'destroy'])->name('accounts.balances.destroy'); - - // Dashboard Analytics - Route::prefix('api/dashboard')->group(function () { - Route::get('net-worth', [\App\Http\Controllers\Api\DashboardAnalyticsController::class, 'netWorth']); - Route::get('monthly-spending', [\App\Http\Controllers\Api\DashboardAnalyticsController::class, 'monthlySpending']); - Route::get('cash-flow', [\App\Http\Controllers\Api\DashboardAnalyticsController::class, 'cashFlow']); - Route::get('net-worth-evolution', [\App\Http\Controllers\Api\DashboardAnalyticsController::class, 'netWorthEvolution']); - Route::get('top-categories', [\App\Http\Controllers\Api\DashboardAnalyticsController::class, 'topCategories']); - Route::get('account/{account}/balance-evolution', [\App\Http\Controllers\Api\DashboardAnalyticsController::class, 'accountBalanceEvolution']); - }); }); Route::middleware(['auth', 'verified'])->group(function () { @@ -79,7 +46,7 @@ Route::middleware(['auth', 'verified'])->group(function () { Route::get('subscribe/cancel', [SubscriptionController::class, 'cancel'])->name('subscribe.cancel'); }); -Route::middleware(['auth', 'verified', 'redirect.encryption', 'subscribed'])->group(function () { +Route::middleware(['auth', 'verified', 'redirect.encryption', 'subscribed', WithoutSsr::class])->group(function () { Route::get('dashboard', DashboardController::class)->name('dashboard'); Route::get('accounts', [AccountController::class, 'index'])->name('accounts.list');