321 lines
11 KiB
Markdown
321 lines
11 KiB
Markdown
# Optimized Route Structure
|
|
|
|
## Current Route Organization Issues
|
|
|
|
The current routing system has several problems:
|
|
|
|
- Route duplication across multiple files
|
|
- Complex domain-based routing spread across different files
|
|
- Inconsistent middleware application
|
|
- Hard to maintain and understand
|
|
|
|
## Proposed New Structure
|
|
|
|
```
|
|
routes/
|
|
├── web.php # Main route orchestrator
|
|
├── api.php # API routes (unchanged)
|
|
├── console.php # Console routes (unchanged)
|
|
├── channels.php # Broadcasting routes (unchanged)
|
|
├── domains/
|
|
│ ├── main.php # Main domain routes (mivita.care)
|
|
│ ├── shop.php # Shop domain routes (mivita.shop)
|
|
│ └── subdomains/
|
|
│ ├── crm.php # CRM routes (my.mivita.care)
|
|
│ ├── portal.php # Portal routes (in.mivita.care)
|
|
│ ├── checkout.php # Checkout routes (checkout.mivita.care)
|
|
│ └── user-shops.php # User shop routes ({slug}.mivita.care)
|
|
└── shared/
|
|
├── legal.php # Legal pages (shared across domains)
|
|
├── common.php # Common functionality
|
|
└── api/
|
|
└── v1.php # API version 1 routes
|
|
```
|
|
|
|
## Implementation Examples
|
|
|
|
### routes/web.php (Orchestrator)
|
|
|
|
```php
|
|
<?php
|
|
|
|
use App\Domain\DomainContext;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Web Routes Orchestrator
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This file serves as the main orchestrator for all web routes.
|
|
| Domain-specific routes are loaded based on the current domain context.
|
|
|
|
|
*/
|
|
|
|
// Get domain context from middleware
|
|
$domainContext = app('domain.context');
|
|
|
|
// Load shared routes first (legal pages, etc.)
|
|
require __DIR__ . '/shared/legal.php';
|
|
require __DIR__ . '/shared/common.php';
|
|
|
|
// Load domain-specific routes based on context
|
|
match($domainContext->type) {
|
|
'main' => require __DIR__ . '/domains/main.php',
|
|
'main-shop' => require __DIR__ . '/domains/shop.php',
|
|
'crm' => require __DIR__ . '/domains/subdomains/crm.php',
|
|
'portal' => require __DIR__ . '/domains/subdomains/portal.php',
|
|
'checkout' => require __DIR__ . '/domains/subdomains/checkout.php',
|
|
'user-shop' => require __DIR__ . '/domains/subdomains/user-shops.php',
|
|
default => null // Unknown domains handled by middleware
|
|
};
|
|
```
|
|
|
|
### routes/domains/main.php (Main Domain)
|
|
|
|
```php
|
|
<?php
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Main Domain Routes (mivita.care)
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
Route::middleware(['domain.resolver'])->group(function () {
|
|
|
|
// Home page
|
|
Route::get('/', 'Web\SiteController@index')->name('home');
|
|
|
|
// Registration
|
|
Route::get('/registrierung', 'Web\RegisterController@index')->name('register_user');
|
|
Route::get('/reg/{member_id?}', 'Web\RegisterController@member')->name('register_user_member');
|
|
Route::post('/registrierung', 'Web\RegisterController@register')->name('register_user');
|
|
Route::get('/registrierung/finish', 'Web\RegisterController@finish')->name('register_user_finish');
|
|
|
|
// Contact
|
|
Route::get('/kontakt', 'Web\ContactController@create')->name('contact_create');
|
|
Route::post('/kontakt', 'Web\ContactController@store')->name('contact_store');
|
|
|
|
// Dynamic site routing
|
|
Route::get('/{site}/{subsite?}/{product_slug?}', 'Web\SiteController@site')->name('base.site');
|
|
|
|
// Language switching
|
|
Route::post('/change_website_lang', 'Web\SiteController@changeLang')->name('change_website_lang');
|
|
});
|
|
```
|
|
|
|
### routes/domains/subdomains/crm.php (CRM Domain)
|
|
|
|
```php
|
|
<?php
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| CRM Domain Routes (my.mivita.care)
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
Route::domain(config('app.pre_url_crm') . config('app.domain') . config('app.tld_care'))
|
|
->middleware(['domain.resolver', 'web'])
|
|
->group(function () {
|
|
|
|
// Cron jobs (public access)
|
|
Route::get('/cron/jobs/action/{action}/{key}', 'CronController@action')->name('cron_jobs_action');
|
|
Route::get('/cron/jobs/run/{key}', 'CronController@runCron')->name('cron_jobs_run');
|
|
|
|
// Authentication routes
|
|
Auth::routes();
|
|
Route::get('/logout', function () {
|
|
Auth::logout();
|
|
return redirect()->route('login');
|
|
})->name('logout');
|
|
|
|
// Public routes
|
|
Route::get('/', 'HomeController@index')->name('home');
|
|
Route::get('/register/verify/{confirmationCode}', 'HomeController@verify')->name('register_verify');
|
|
Route::get('/homeparty/{token?}/{gid?}', 'Web\HomepartyController@detail')->name('homeparty');
|
|
Route::post('/homeparty/{token?}/{gid?}', 'Web\HomepartyController@detailStore')->name('homeparty');
|
|
|
|
// Authenticated routes
|
|
Route::middleware(['auth'])->group(function () {
|
|
require __DIR__ . '/../../shared/crm/authenticated.php';
|
|
});
|
|
|
|
// Admin routes
|
|
Route::middleware(['admin'])->group(function () {
|
|
require __DIR__ . '/../../shared/crm/admin.php';
|
|
});
|
|
|
|
// Super admin routes
|
|
Route::middleware(['superadmin'])->group(function () {
|
|
require __DIR__ . '/../../shared/crm/superadmin.php';
|
|
});
|
|
|
|
// System admin routes
|
|
Route::middleware(['sysadmin'])->group(function () {
|
|
require __DIR__ . '/../../shared/crm/sysadmin.php';
|
|
});
|
|
});
|
|
```
|
|
|
|
### routes/domains/subdomains/user-shops.php (User Shops)
|
|
|
|
```php
|
|
<?php
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| User Shop Domain Routes ({slug}.mivita.care)
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
Route::middleware(['domain.resolver', 'web'])->group(function () {
|
|
|
|
// Home page
|
|
Route::get('/', 'Web\SiteController@index')->name('shop.home');
|
|
|
|
// Shopping cart functionality
|
|
Route::prefix('user/card')->name('user.card_')->group(function () {
|
|
Route::get('/add/{id}/{quantity?}/{product_slug?}', 'Web\CardController@addToCardGet')->name('add_get');
|
|
Route::post('/add/{id}', 'Web\CardController@addToCardPost')->name('add_post');
|
|
Route::get('/show', 'Web\CardController@showCard')->name('show');
|
|
Route::get('/checkout/server', 'Web\CardController@checkoutServer')->name('checkout_server');
|
|
Route::post('/update', 'Web\CardController@updateCard')->name('update');
|
|
Route::get('/remove/{rowId}', 'Web\CardController@removeCard')->name('remove');
|
|
Route::get('/delete', 'Web\CardController@deleteCard')->name('delete');
|
|
});
|
|
|
|
// Shop navigation
|
|
Route::get('/user/back/to/shop/{reference?}', 'Web\CardController@backToShop')->name('user.back_to_shop');
|
|
Route::get('/domain/check', 'Web\SiteController@domainCheck')->name('user.domain_check');
|
|
|
|
// Registration with referral
|
|
Route::get('/registrierung', 'Web\RegisterController@index')->name('shop.register_user');
|
|
Route::get('/reg/{member_id?}', 'Web\RegisterController@member')->name('shop.register_user_member');
|
|
Route::post('/registrierung', 'Web\RegisterController@register')->name('shop.register_user');
|
|
Route::get('/registrierung/finish', 'Web\RegisterController@finish')->name('shop.register_user_finish');
|
|
|
|
// Dynamic site routing (must be last)
|
|
Route::get('/{site}/{subsite?}/{product_slug?}', 'Web\SiteController@site')->name('shop.site');
|
|
|
|
// Language switching
|
|
Route::post('/change_website_lang', 'Web\SiteController@changeLang')->name('shop.change_website_lang');
|
|
});
|
|
```
|
|
|
|
### routes/shared/legal.php (Shared Legal Pages)
|
|
|
|
```php
|
|
<?php
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Shared Legal Routes
|
|
|--------------------------------------------------------------------------
|
|
| These routes are available across all domain types
|
|
*/
|
|
|
|
Route::get('/datenschutz', 'HomeController@legalDataProtected')->name('datenschutz');
|
|
Route::get('/impressum', 'HomeController@legalImprint')->name('impressum');
|
|
Route::get('/agb', 'HomeController@legalAGB')->name('agb');
|
|
|
|
// English routes
|
|
Route::get('/data-protection', 'HomeController@legalDataProtected')->name('data_protected');
|
|
Route::get('/imprint', 'HomeController@legalImprint')->name('imprint');
|
|
Route::get('/terms', 'HomeController@legalAGB')->name('terms');
|
|
```
|
|
|
|
### routes/shared/common.php (Common Functionality)
|
|
|
|
```php
|
|
<?php
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Common Routes
|
|
|--------------------------------------------------------------------------
|
|
| These routes provide common functionality across domains
|
|
*/
|
|
|
|
// Modal loading (AJAX)
|
|
Route::post('/loading/modal', 'HomeController@loadingModal')->name('loading_modal');
|
|
|
|
// Health check
|
|
Route::get('/health', function () {
|
|
return response()->json(['status' => 'ok']);
|
|
})->name('health_check');
|
|
|
|
// Maintenance mode check
|
|
Route::get('/maintenance', function () {
|
|
return view('maintenance');
|
|
})->name('maintenance');
|
|
```
|
|
|
|
## Benefits of New Structure
|
|
|
|
### 1. Clear Separation of Concerns
|
|
|
|
- Each domain type has its own route file
|
|
- Shared functionality is clearly separated
|
|
- Easy to understand which routes belong to which domain
|
|
|
|
### 2. Reduced Duplication
|
|
|
|
- Legal pages defined once and shared
|
|
- Common functionality centralized
|
|
- Domain-specific routes only defined once
|
|
|
|
### 3. Better Maintainability
|
|
|
|
- Changes to specific domain types are isolated
|
|
- Easier to add new domain types
|
|
- Clear structure for new developers
|
|
|
|
### 4. Performance Benefits
|
|
|
|
- Only relevant routes are loaded per domain
|
|
- Reduced route compilation time
|
|
- Better caching possibilities
|
|
|
|
### 5. Enhanced Security
|
|
|
|
- Domain-specific middleware applied correctly
|
|
- Easier to implement domain-specific security rules
|
|
- Clear boundaries between different application areas
|
|
|
|
## Migration Strategy
|
|
|
|
### Phase 1: Create New Structure
|
|
|
|
1. Create new directory structure
|
|
2. Copy existing routes to appropriate new files
|
|
3. Test each domain type individually
|
|
|
|
### Phase 2: Update Route Service Provider
|
|
|
|
1. Modify RouteServiceProvider to use new orchestrator
|
|
2. Implement domain context checking
|
|
3. Add fallback mechanisms
|
|
|
|
### Phase 3: Clean Up
|
|
|
|
1. Remove old route files
|
|
2. Update any hardcoded route references
|
|
3. Update documentation
|
|
|
|
### Phase 4: Optimize
|
|
|
|
1. Implement route caching per domain
|
|
2. Add performance monitoring
|
|
3. Optimize middleware stack per domain type
|