name('sitemap'); Route::post('/locale/{locale}', LocaleController::class)->name('locale.switch'); Route::get('/robots.txt', function () { $content = implode(PHP_EOL, [ 'User-agent: *', 'Allow: /', 'Disallow: /admin', 'Disallow: /search', 'Disallow: /favorites', 'Disallow: /compare', 'Disallow: /cart', 'Disallow: /checkout', 'Disallow: /account', 'Disallow: /login', 'Disallow: /register', 'Sitemap: ' . route('sitemap'), ]); return response($content, 200, ['Content-Type' => 'text/plain; charset=UTF-8']); })->name('robots'); Route::get('/', [ShopController::class, 'home'])->name('home'); Route::get('/search', [CatalogController::class, 'search'])->name('search.index'); Route::get('/catalog', [CatalogController::class, 'index'])->name('catalog.index'); Route::get('/category/{category:slug}', [CatalogController::class, 'category'])->name('catalog.category'); Route::get('/products/{product:slug}', [ProductController::class, 'show'])->name('products.show'); Route::get('/chat/messages', [ShopChatController::class, 'messages']) ->middleware('throttle:chat-read') ->name('chat.messages'); Route::post('/chat/messages', [ShopChatController::class, 'store']) ->middleware('throttle:chat-send') ->name('chat.send'); Route::get('/favorites', [FavoriteController::class, 'index'])->name('favorites.index'); Route::post('/favorites/{product}', [FavoriteController::class, 'toggle'])->name('favorites.toggle'); Route::get('/compare', [CompareController::class, 'index'])->name('compare.index'); Route::post('/compare/{product}', [CompareController::class, 'toggle'])->name('compare.toggle'); Route::delete('/compare', [CompareController::class, 'clear'])->name('compare.clear'); Route::get('/cart', [CartController::class, 'index'])->name('cart.index'); Route::post('/cart/{product}', [CartController::class, 'add'])->name('cart.add'); Route::patch('/cart/{product}', [CartController::class, 'update'])->name('cart.update'); Route::delete('/cart/{product}', [CartController::class, 'remove'])->name('cart.remove'); Route::get('/checkout', [CheckoutController::class, 'show'])->name('checkout.show'); Route::post('/checkout/requisites', [CheckoutController::class, 'prepare'])->name('checkout.prepare'); Route::get('/checkout/requisites', [CheckoutController::class, 'payment'])->name('checkout.payment'); Route::post('/checkout', [CheckoutController::class, 'store'])->name('checkout.store'); Route::get('/checkout/success/{order}', [CheckoutController::class, 'success'])->name('checkout.success'); Route::view('/about', 'pages.about')->name('pages.about'); Route::view('/contacts', 'pages.contacts')->name('pages.contacts'); Route::post('/contacts', [ContactController::class, 'submit']) ->middleware('throttle:contact-send') ->name('pages.contacts.submit'); Route::view('/shipping-payment', 'pages.shipping-payment')->name('pages.shipping-payment'); Route::middleware('guest')->group(function () { Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login'); Route::post('/login', [AuthController::class, 'login']) ->middleware('throttle:auth') ->name('login.attempt'); Route::get('/register', [AuthController::class, 'showRegisterForm'])->name('register'); Route::post('/register', [AuthController::class, 'register']) ->middleware('throttle:auth') ->name('register.store'); }); Route::post('/logout', [AuthController::class, 'logout'])->name('logout')->middleware('auth'); Route::middleware('auth')->group(function () { Route::get('/account', [AccountController::class, 'show'])->name('account'); Route::post('/account', [AccountController::class, 'update'])->name('account.update'); Route::get('/account/orders/{order}', [OrderController::class, 'show'])->name('account.orders.show'); }); Route::prefix('admin')->name('admin.')->group(function () { Route::get('login', [AdminAuthController::class, 'showLoginForm'])->name('login'); Route::post('login', [AdminAuthController::class, 'login']) ->middleware('throttle:admin-login') ->name('login.attempt'); Route::middleware([\App\Http\Middleware\AdminMiddleware::class])->group(function () { Route::post('logout', [AdminAuthController::class, 'logout'])->name('logout'); Route::get('/', [AdminDashboardController::class, 'index'])->name('dashboard'); Route::get('chats', [AdminChatController::class, 'index'])->name('chats.index'); Route::get('chats/{conversation}/messages', [AdminChatController::class, 'messages']) ->middleware('throttle:admin-chat-read') ->name('chats.messages'); Route::post('chats/{conversation}/messages', [AdminChatController::class, 'storeMessage']) ->middleware('throttle:admin-chat-send') ->name('chats.messages.store'); Route::patch('chats/{conversation}/status', [AdminChatController::class, 'updateStatus']) ->name('chats.status'); Route::delete('chats/{conversation}', [AdminChatController::class, 'destroy']) ->name('chats.destroy'); Route::get('products/export/csv', [AdminProductController::class, 'exportCsv'])->name('products.export'); Route::post('products/import/csv', [AdminProductController::class, 'importCsv'])->name('products.import'); Route::resource('home-slides', AdminHomeSlideController::class) ->parameters(['home-slides' => 'homeSlide']) ->except('show'); Route::resource('products', AdminProductController::class)->except('show'); Route::resource('categories', AdminCategoryController::class)->except('show'); Route::resource('orders', AdminOrderController::class)->only(['index', 'show', 'update']); }); });