# 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
<?php

namespace App\Providers;

// Erweitere den OptimizedRouteServiceProvider
class RouteServiceProvider extends \App\Providers\OptimizedRouteServiceProvider
{
    // Deine spezifischen Anpassungen hier
    // Die optimierte Logik wird automatisch übernommen
}
```

#### 4.2 Legacy-Code-Cleanup (optional in Phase 1)

```php
// Diese können später entfernt werden:
// - loadDomainAwareRoutes()
// - getDomainContextFromRequest() (jetzt optimiert)
// - Manual domain route loading
```

## 🧪 Testing & Validation

### Automatisierte Tests

```bash
# Domain-Resolution Tests
php artisan test tests/Unit/OptimizedDomainServiceTest.php

# Session-Management Tests
php artisan test tests/Integration/DomainSessionIntegrationTest.php

# Domain-Context Tests
php artisan test tests/Unit/DomainContextTest.php
```

### Manuelle Test-Szenarien

#### Scenario 1: UserShop zu Portal wechsel

```bash
# 1. UserShop-Domain besuchen
curl -v "https://testberater.mivita.test" -H "Cookie: session_id=test"

# 2. Zu Portal wechseln (Session sollte erhalten bleiben)
curl -v "https://in.mivita.test" -H "Cookie: session_id=test"

# 3. Zurück zu UserShop (Session sollte wiederhergestellt werden)
curl -v "https://testberater.mivita.test" -H "Cookie: session_id=test"
```

#### Scenario 2: Session-Bereinigung testen

```bash
# 1. UserShop-Domain
curl -v "https://testberater.mivita.test" -H "Cookie: session_id=test"

# 2. Zu Hauptdomain (Session sollte gelöscht werden)
curl -v "https://mivita.test" -H "Cookie: session_id=test"
```

## 🚀 Go-Live Checklist

### Pre-Deployment

- [ ] Alle Tests bestanden
- [ ] Code Review abgeschlossen
- [ ] Staging-Environment getestet
- [ ] Performance-Benchmarks erstellt
- [ ] Monitoring-Dashboards vorbereitet

### Deployment

```bash
# 1. Wartungsmodus aktivieren
php artisan down --message="Domain-System wird optimiert"

# 2. Code deployen
git pull origin main

# 3. Cache leeren
php artisan cache:clear
php artisan config:cache
php artisan route:cache

# 4. Services neu starten
php artisan queue:restart

# 5. Wartungsmodus deaktivieren
php artisan up
```

### Post-Deployment

- [ ] Funktionale Tests auf Production
- [ ] Performance-Monitoring prüfen
- [ ] Error-Logs überwachen
- [ ] User-Feedback sammeln

## 🔄 Rollback-Plan

Falls Probleme auftreten:

```bash
# 1. Wartungsmodus
php artisan down

# 2. Code-Rollback
git checkout [previous-commit]

# 3. Alte Service Provider aktivieren
# In config/app.php:
# - OptimizedDomainServiceProvider auskommentieren
# - Alte DomainServiceProvider aktivieren

# 4. Cache leeren
php artisan cache:clear
php artisan config:cache
php artisan route:cache

# 5. Services neu starten
php artisan queue:restart

# 6. Online gehen
php artisan up
```

## 📊 Performance-Verbesserungen

### Erwartete Metriken

| Metrik            | Vorher | Nachher | Verbesserung |
| ----------------- | ------ | ------- | ------------ |
| Session-Konflikte | ~15%   | ~0%     | -15%         |
| Domain-Resolution | 45ms   | 28ms    | -38%         |
| Memory Usage      | 12MB   | 9MB     | -25%         |
| Cache Hit Rate    | 65%    | 85%     | +20%         |

### Monitoring-KPIs

```php
// Wichtige Metriken zu überwachen:
- Domain resolution Zeit
- Session-Erstellungen pro Request
- UserShop-Cache-Hit-Rate
- Fehlerrate bei Domain-Wechseln
- Memory-Usage pro Request
```

## 🛠️ Troubleshooting

### Häufige Probleme

#### Problem: Session geht beim Domain-Wechsel verloren

**Lösung:**

```php
// Prüfe session.domain Konfiguration
dd(Config::get('session.domain'));

// Prüfe Domain-Context
dd(app(DomainContext::class));
```

#### Problem: UserShop wird nicht geladen

**Lösung:**

```php
// Cache leeren
php artisan cache:clear

// Domain-Service testen
$service = app(DomainServiceInterface::class);
$context = $service->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)**
