Files
WitShop/routes/web.php
T
marcoandClaude Sonnet 4.6 5dad8b9324
Deploy to Production (witstore.wende.it) / deploy (push) Successful in 7s
Add email templates, page layouts, and shop themes (template system)
- E-Mail-Templates: DB-gespeicherte HTML-Templates mit {{placeholder}}-System,
  Admin-UI zum Bearbeiten von Betreff und Body, alle 4 Mailables aktualisiert
- Seiten-Layouts: 4 Layouts für CMS-Seiten (Standard, Sidebar, Volle Breite, Landing),
  Layout-Auswahl im Admin-Formular
- Shop-Themes: 5 Farbthemen via CSS-Variablen, Picker in Einstellungen
- Deployment: EmailTemplateSeeder wird automatisch beim Deploy ausgeführt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 22:04:54 +02:00

123 lines
7.7 KiB
PHP

<?php
use App\Http\Controllers\Admin;
use App\Http\Controllers\Shop;
use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;
// ─── Shop: Startseite ────────────────────────────────────────────
Route::get('/', [Shop\HomeController::class, 'index'])->name('home');
// Produkte
Route::get('/produkte', [Shop\ProductController::class, 'index'])->name('shop.products.index');
Route::get('/kategorie/{slug}', [Shop\ProductController::class, 'category'])->name('shop.category');
Route::get('/produkt/{slug}', [Shop\ProductController::class, 'show'])->name('shop.product.show');
// Warenkorb
Route::get('/warenkorb', [Shop\CartController::class, 'index'])->name('cart.index');
Route::post('/warenkorb/hinzufuegen', [Shop\CartController::class, 'add'])->name('cart.add');
Route::post('/warenkorb/aktualisieren', [Shop\CartController::class, 'update'])->name('cart.update');
Route::post('/warenkorb/entfernen/{key}', [Shop\CartController::class, 'remove'])->name('cart.remove');
// Checkout
Route::get('/kasse', [Shop\CheckoutController::class, 'index'])->name('checkout.index');
Route::post('/kasse/adresse', [Shop\CheckoutController::class, 'storeAddress'])->name('checkout.address');
Route::get('/kasse/zahlung', [Shop\CheckoutController::class, 'payment'])->name('checkout.payment');
Route::match(['GET','POST'], '/kasse/bestaetigen', [Shop\CheckoutController::class, 'confirm'])->name('checkout.confirm');
Route::get('/kasse/danke/{order}', [Shop\CheckoutController::class, 'thankyou'])->name('checkout.thankyou');
// CMS-Seiten
Route::get('/seite/{slug}', [Shop\PageController::class, 'show'])->name('page');
Route::get('/blog', [Shop\PageController::class, 'blog'])->name('blog');
Route::get('/blog/{slug}', [Shop\PageController::class, 'blogPost'])->name('blog.post');
Route::get('/faq', [Shop\FaqController::class, 'index'])->name('faq');
Route::get('/widerruf', [Shop\WiderrufsController::class, 'index'])->name('widerruf');
Route::post('/widerruf', [Shop\WiderrufsController::class, 'submit'])->name('widerruf.submit');
// Kundenkonto (eingeloggt)
Route::middleware(['auth', 'verified'])->prefix('konto')->name('account.')->group(function () {
Route::get('/', [Shop\AccountController::class, 'index'])->name('index');
Route::get('/bestellungen', [Shop\AccountController::class, 'orders'])->name('orders');
Route::get('/bestellung/{order}', [Shop\AccountController::class, 'orderDetail'])->name('order');
Route::get('/adressen', [Shop\AccountController::class, 'addresses'])->name('addresses');
Route::post('/adressen', [Shop\AccountController::class, 'storeAddress'])->name('addresses.store');
Route::delete('/adressen/{address}', [Shop\AccountController::class, 'destroyAddress'])->name('addresses.destroy');
Route::get('/einstellungen', [Shop\AccountController::class, 'settings'])->name('settings');
Route::put('/einstellungen', [Shop\AccountController::class, 'updateSettings'])->name('settings.update');
});
// Bestellverfolgung (Gast)
Route::get('/bestellung/verfolgen', [Shop\OrderTrackingController::class, 'index'])->name('order.track');
Route::post('/bestellung/verfolgen', [Shop\OrderTrackingController::class, 'show'])->name('order.track.show');
// Auth (Breeze)
require __DIR__.'/auth.php';
// ─── Admin ───────────────────────────────────────────────────────
Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(function () {
Route::get('/', [Admin\DashboardController::class, 'index'])->name('dashboard');
// Kategorien
Route::resource('categories', Admin\CategoryController::class);
// Artikel
Route::resource('products', Admin\ProductController::class);
// Attribute
Route::get('attributes', [Admin\AttributeController::class, 'index'])->name('attributes.index');
Route::post('attributes', [Admin\AttributeController::class, 'store'])->name('attributes.store');
Route::delete('attributes/{attribute}', [Admin\AttributeController::class, 'destroy'])->name('attributes.destroy');
Route::post('attributes/{attribute}/values', [Admin\AttributeController::class, 'storeValue'])->name('attributes.values.store');
Route::delete('attribute-values/{value}', [Admin\AttributeController::class, 'destroyValue'])->name('attribute-values.destroy');
// Kunden
Route::get('customers', [Admin\CustomerController::class, 'index'])->name('customers.index');
Route::get('customers/{customer}', [Admin\CustomerController::class, 'show'])->name('customers.show');
Route::post('customers/{customer}/toggle-approval', [Admin\CustomerController::class, 'toggleApproval'])->name('customers.toggle-approval');
Route::delete('customers/{customer}', [Admin\CustomerController::class, 'destroy'])->name('customers.destroy');
// Bestellungen
Route::get('orders', [Admin\OrderController::class, 'index'])->name('orders.index');
Route::get('orders/{order}', [Admin\OrderController::class, 'show'])->name('orders.show');
Route::put('orders/{order}/status', [Admin\OrderController::class, 'updateStatus'])->name('orders.status');
Route::post('orders/{order}/invoice', [Admin\OrderController::class, 'sendInvoice'])->name('orders.invoice');
Route::get('orders/{order}/pdf', [Admin\OrderController::class, 'downloadInvoice'])->name('orders.pdf');
// CMS: Seiten
Route::resource('pages', Admin\PageController::class);
// CMS: Banner
Route::resource('banners', Admin\BannerController::class);
// CMS: FAQ
Route::get('faqs', [Admin\FaqController::class, 'index'])->name('faqs.index');
Route::post('faqs/groups', [Admin\FaqController::class, 'storeGroup'])->name('faqs.groups.store');
Route::post('faqs', [Admin\FaqController::class, 'store'])->name('faqs.store');
Route::put('faqs/{faq}', [Admin\FaqController::class, 'update'])->name('faqs.update');
Route::delete('faqs/{faq}', [Admin\FaqController::class, 'destroy'])->name('faqs.destroy');
// Admin-Benutzer
Route::get('admins', [Admin\AdminUserController::class, 'index'])->name('admins.index');
Route::get('admins/create', [Admin\AdminUserController::class, 'create'])->name('admins.create');
Route::post('admins', [Admin\AdminUserController::class, 'store'])->name('admins.store');
Route::get('admins/{admin}/edit', [Admin\AdminUserController::class, 'edit'])->name('admins.edit');
Route::put('admins/{admin}', [Admin\AdminUserController::class, 'update'])->name('admins.update');
Route::delete('admins/{admin}', [Admin\AdminUserController::class, 'destroy'])->name('admins.destroy');
// E-Mail-Templates
Route::get('email-templates', [Admin\EmailTemplateController::class, 'index'])->name('email-templates.index');
Route::get('email-templates/{emailTemplate}/edit', [Admin\EmailTemplateController::class, 'edit'])->name('email-templates.edit');
Route::put('email-templates/{emailTemplate}', [Admin\EmailTemplateController::class, 'update'])->name('email-templates.update');
// Einstellungen
Route::get('settings', [Admin\SettingsController::class, 'index'])->name('settings.index');
Route::put('settings', [Admin\SettingsController::class, 'update'])->name('settings.update');
// Versandkosten
Route::get('shipping', [Admin\ShippingController::class, 'index'])->name('shipping.index');
Route::post('shipping', [Admin\ShippingController::class, 'store'])->name('shipping.store');
Route::put('shipping/{rate}', [Admin\ShippingController::class, 'update'])->name('shipping.update');
Route::delete('shipping/{rate}', [Admin\ShippingController::class, 'destroy'])->name('shipping.destroy');
});