PHP_VERSION, 'app_env' => config('app.env'), 'has_app_key' => ! empty(config('app.key')), 'app_key_len' => strlen((string) config('app.key')), 'db_connection' => config('database.default'), 'db_path' => $dbPath, 'db_file_exists' => is_string($dbPath) && file_exists($dbPath), 'db_dir_writable' => is_string($dbPath) && is_writable(dirname($dbPath)), ]; try { DB::connection()->getPdo(); $diagnostics['db_pdo'] = 'CONNECTED'; $diagnostics['tables'] = Schema::getTableListing(); } catch (Throwable $e) { $diagnostics['db_pdo_error'] = $e->getMessage(); } try { $diagnostics['categories_count'] = Category::count(); } catch (Throwable $e) { $diagnostics['categories_error'] = $e->getMessage(); } try { $diagnostics['products_count'] = Product::count(); } catch (Throwable $e) { $diagnostics['products_error'] = $e->getMessage(); } return response()->json($diagnostics); })->withoutMiddleware([ StartSession::class, EncryptCookies::class, ]); // Shop & Product routes Route::get('/', [ShopController::class, 'index'])->name('home'); Route::get('/catalogus', [ShopController::class, 'catalog'])->name('catalog'); Route::get('/product/{slug}', [ShopController::class, 'show'])->name('product.show'); Route::get('/custom-3d-print', [ShopController::class, 'customRequest'])->name('custom.request'); Route::post('/custom-3d-print', [ShopController::class, 'storeCustomRequest'])->name('custom.store'); Route::post('/custom-3d-print/bestellen', [CartController::class, 'addCustom'])->name('custom.cart.add'); // Winkelwagen Route::get('/winkelwagen', [CartController::class, 'index'])->name('cart.index'); Route::post('/winkelwagen/toevoegen', [CartController::class, 'add'])->name('cart.add'); Route::post('/winkelwagen/bijwerken', [CartController::class, 'update'])->name('cart.update'); Route::delete('/winkelwagen/verwijderen/{key}', [CartController::class, 'remove'])->name('cart.remove'); Route::get('/winkelwagen/aantal', [CartController::class, 'count'])->name('cart.count'); // Afrekenen & Bevestiging Route::get('/afrekenen', [CheckoutController::class, 'index'])->name('checkout.index'); Route::post('/afrekenen', [CheckoutController::class, 'store'])->name('checkout.store'); Route::get('/bestelling-ontvangen/{orderNumber}', [CheckoutController::class, 'success'])->name('checkout.success'); // Authenticatie & Klantenportaal Route::middleware('guest')->group(function () { Route::get('/inloggen', [LoginController::class, 'showLoginForm'])->name('login'); Route::post('/inloggen', [LoginController::class, 'login'])->name('login.submit'); Route::redirect('/login', '/inloggen'); Route::get('/registreren', [RegisterController::class, 'showRegistrationForm'])->name('register'); Route::post('/registreren', [RegisterController::class, 'register'])->name('register.submit'); Route::redirect('/register', '/registreren'); Route::get('/wachtwoord-vergeten', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('password.request'); Route::post('/wachtwoord-vergeten', [ForgotPasswordController::class, 'sendResetLinkEmail'])->name('password.email'); Route::get('/wachtwoord-resetten/{token}', [ForgotPasswordController::class, 'showResetForm'])->name('password.reset'); Route::post('/wachtwoord-resetten', [ForgotPasswordController::class, 'reset'])->name('password.update'); }); Route::middleware('auth')->group(function () { Route::post('/uitloggen', [LoginController::class, 'logout'])->name('logout'); Route::get('/uitloggen', [LoginController::class, 'logout']); // Fallback voor GET uitloggen // Klantendashboard / Mijn Account Route::get('/mijn-account', [AccountController::class, 'index'])->name('account.index'); Route::put('/mijn-account/profiel', [AccountController::class, 'updateProfile'])->name('account.profile'); Route::put('/mijn-account/wachtwoord', [AccountController::class, 'updatePassword'])->name('account.password'); }); // Admin & CMS Beheer (Beveiligd: alleen ingelogde admins) Route::prefix('admin')->name('admin.')->middleware(['auth', 'admin'])->group(function () { Route::redirect('/', '/admin/content'); // Layout, Stijl & Teksten CMS Route::get('/content', [ContentController::class, 'index'])->name('content.index'); Route::post('/content', [ContentController::class, 'update'])->name('content.update'); Route::post('/content/reset', [ContentController::class, 'reset'])->name('content.reset'); // Producten Beheer Route::resource('products', AdminProductController::class)->except(['show']); // Categorieën Beheer Route::resource('categories', AdminCategoryController::class)->only(['index', 'edit', 'update']); // Bestellingen Beheer Route::get('/orders', [AdminOrderController::class, 'index'])->name('orders.index'); Route::get('/orders/{order}', [AdminOrderController::class, 'show'])->name('orders.show'); Route::post('/orders/{order}/status', [AdminOrderController::class, 'updateStatus'])->name('orders.status'); // MakerWorld Importer & Collecties Auto-Sync Route::get('/makerworld', [MakerWorldController::class, 'index'])->name('makerworld.index'); Route::post('/makerworld/login', [MakerWorldController::class, 'login'])->name('makerworld.login'); Route::post('/makerworld/verify-code', [MakerWorldController::class, 'verifyCode'])->name('makerworld.verify-code'); Route::post('/makerworld/token', [MakerWorldController::class, 'saveToken'])->name('makerworld.token'); Route::post('/makerworld/disconnect', [MakerWorldController::class, 'disconnect'])->name('makerworld.disconnect'); Route::get('/makerworld/preview', [MakerWorldController::class, 'preview'])->name('makerworld.preview'); Route::post('/makerworld/import', [MakerWorldController::class, 'import'])->name('makerworld.import'); Route::post('/makerworld/batch-import', [MakerWorldController::class, 'batchImport'])->name('makerworld.batch-import'); // Collecties Auto-Sync Management Route::post('/makerworld/collections/add', [MakerWorldController::class, 'addCollection'])->name('makerworld.collections.add'); Route::post('/makerworld/collections/{collection}/toggle', [MakerWorldController::class, 'toggleCollectionSync'])->name('makerworld.collections.toggle'); Route::post('/makerworld/collections/{collection}/sync', [MakerWorldController::class, 'syncCollectionNow'])->name('makerworld.collections.sync'); Route::delete('/makerworld/collections/{collection}', [MakerWorldController::class, 'deleteCollection'])->name('makerworld.collections.delete'); // Artikel Beheer (Staging & Curation voor geïmporteerde modellen) Route::get('/makerworld/staging', [MakerWorldController::class, 'staging'])->name('makerworld.staging'); Route::post('/makerworld/staging/{product}/publish', [MakerWorldController::class, 'publishStaged'])->name('makerworld.staging.publish'); Route::post('/makerworld/staging/bulk-publish', [MakerWorldController::class, 'bulkPublishStaged'])->name('makerworld.staging.bulk-publish'); Route::delete('/makerworld/staging/{product}', [MakerWorldController::class, 'rejectStaged'])->name('makerworld.staging.reject'); Route::post('/makerworld/staging/bulk-reject', [MakerWorldController::class, 'bulkRejectStaged'])->name('makerworld.staging.bulk-reject'); });