Files
jouwdriedee/routes/web.php
T

140 lines
7.0 KiB
PHP

<?php
use App\Http\Controllers\AccountController;
use App\Http\Controllers\Admin\CategoryController as AdminCategoryController;
use App\Http\Controllers\Admin\ContentController;
use App\Http\Controllers\Admin\MakerWorldController;
use App\Http\Controllers\Admin\OrderController as AdminOrderController;
use App\Http\Controllers\Admin\ProductController as AdminProductController;
use App\Http\Controllers\Auth\ForgotPasswordController;
use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\Auth\RegisterController;
use App\Http\Controllers\CartController;
use App\Http\Controllers\CheckoutController;
use App\Http\Controllers\ShopController;
use App\Models\Category;
use App\Models\Product;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Schema;
// Health & Diagnostics
Route::get('/health-debug', function () {
$dbPath = config('database.connections.sqlite.database');
$diagnostics = [
'php_version' => 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
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');
});