# Migration Guide - Von aktueller zu optimierter Domain-Routing Implementation ## 🎯 Überblick Dieser Guide führt Sie durch die schrittweise Migration von der aktuellen Domain-Routing-Implementation zur optimierten Lösung, die das Session-Timing-Problem behebt. ## 📋 Vorbereitung ### Pre-Migration Checklist - [ ] Vollständige Datensicherung erstellen - [ ] Aktuellen Code in Git committen - [ ] Tests für kritische User-Journeys vorbereiten - [ ] Monitoring-Setup für Migration - [ ] Rollback-Plan dokumentieren ### Systemanforderungen - PHP 8.1+ - Laravel 10+ - Bestehende Domain-Konfiguration - Cache-System (Redis empfohlen) ## 🗺️ Migrations-Roadmap ### Phase 1: Vorbereitung (30 min) ```bash # 1. Optimierte Dateien in Projekt kopieren cp -r dev/subdomain-optimization-claude/src/* app/ cp -r dev/subdomain-optimization-claude/config/* config/ # 2. Composer-Abhängigkeiten aktualisieren (falls nötig) composer install # 3. Konfiguration anpassen cp config/optimized_domains.php config/domains.php ``` ### Phase 2: Service Provider Migration (45 min) #### 2.1 Neuen Service Provider registrieren ```php // config/app.php 'providers' => [ // ... andere Provider // App\Providers\DomainServiceProvider::class, // ← Alte auskommentieren App\Providers\OptimizedDomainServiceProvider::class, // ← Neue hinzufügen ], ``` #### 2.2 Service Bindings aktualisieren Die optimierte Lösung verwendet Interfaces für bessere Testbarkeit: ```php // Alte Implementierung (zu entfernen): $this->app->singleton(DomainService::class, ...); $this->app->singleton(DomainContext::class, ...); // Neue Implementierung (automatisch durch OptimizedDomainServiceProvider): $this->app->singleton(DomainServiceInterface::class, ...); $this->app->singleton(SessionManagerInterface::class, ...); ``` ### Phase 3: Middleware-Stack Anpassung (60 min) #### 3.1 Alte Middleware aus Kernel entfernen ```php // app/Http/Kernel.php protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, // \App\Http\Middleware\DomainResolver::class, // ← ENTFERNEN \App\Http\Middleware\Localization::class, ], ]; ``` #### 3.2 Neue Middleware werden automatisch registriert Der `OptimizedDomainServiceProvider` registriert automatisch: - `DomainContextResolver` (vor Session) - `DomainSessionHandler` (nach Session) ### Phase 4: RouteServiceProvider Migration (45 min) #### 4.1 Alten RouteServiceProvider ersetzen ```php // app/Providers/RouteServiceProvider.php resolveDomain('test.mivita.test'); dd($context); ``` #### Problem: Routes werden nicht gefunden **Lösung:** ```php // Route-Cache leeren php artisan route:clear php artisan route:cache // Debug-Modus für Route-Loading aktivieren // config/optimized_domains.php 'debug' => [ 'log_route_loading' => true, ] ``` ### Debug-Commands ```bash # Domain-Resolution testen php artisan tinker >>> app(DomainServiceInterface::class)->resolveDomain('test.mivita.test'); # Session-Status prüfen >>> Session::all(); # Cache-Status prüfen >>> Cache::get('domain_parse_' . md5('test.mivita.test')); ``` ## 📚 Code-Anpassungen ### Controller-Anpassungen ```php // Alt: Direkte DomainContext-Injektion class MyController extends Controller { public function index(DomainContext $context) { // Funktioniert weiterhin durch Backward-Compatibility } } // Neu: Request-Attribute verwenden (empfohlen) class MyController extends Controller { public function index(Request $request) { $context = $request->attributes->get('domain_context'); // Optimierte Performance } } ``` ### Service-Anpassungen ```php // Alt: Concrete Class Dependency class MyService { public function __construct(DomainService $domainService) {} } // Neu: Interface Dependency (für bessere Testbarkeit) class MyService { public function __construct(DomainServiceInterface $domainService) {} } ``` ## ✅ Success Criteria Die Migration ist erfolgreich, wenn: - [ ] Alle automatisierten Tests bestehen - [ ] Session-Daten bei Domain-Wechseln korrekt erhalten bleiben - [ ] Keine doppelten Session-IDs mehr generiert werden - [ ] Performance-Verbesserungen messbar sind - [ ] Keine kritischen Fehler in Production auftreten - [ ] User-Journey funktioniert ohne Unterbrechungen ## 🎉 Post-Migration Cleanup Nach erfolgreichem Go-Live (nach 1-2 Wochen): ```bash # Alte Domain-Service-Dateien entfernen rm app/Services/DomainService.php rm app/Http/Middleware/DomainResolver.php rm app/Providers/DomainServiceProvider.php # Legacy-Code-Kommentare entfernen # TODO-Kommentare in neuen Dateien durchgehen # Performance-Monitoring auswerten ``` --- **Geschätzte Migrations-Zeit: 3-4 Stunden** **Empfohlenes Deployment-Fenster: Wartungsfenster mit geringem Traffic** **Risk Level: Medium (mit vollständigem Rollback-Plan)**