Doku: Phase 4 im Entwicklungsplan abgeschlossen markiert (4.1-4.4)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-06-19 12:16:13 +00:00
parent 43c83ca32d
commit 8e0aedaf95

View file

@ -74,8 +74,8 @@ Keine Fachlogik-Änderung. Reduziert erreichbare Demo-Komponenten und Altlasten.
- [x] **4.1 Portal-/Domain-Kontext extrahieren** — Die je Route-Closure ~6× wiederholte Host→Portal-Ableitung liegt jetzt in `WebPortalContext::fromRequest()` (liefert `portal`, `language`, `portalValues`, `domainConfig`). Die Domain-/Theme-Anwendung (config + `View::share` + Vite) ist als `DomainAssetContext::applyWebDomainConfig()` zentralisiert (vorher die `$applyWebDomainConfig`-Closure in `routes/web.php`, jetzt ein dünner Delegations-Wrapper, damit Bare-Root- und Edition-Home-Route unverändert bleiben). Abgesichert durch die 92 `Web/`-Tests, die jede Seite über den neuen Kontext laufen lassen.
- [x] **4.2 Published-Release-Query zentralisieren** — vier komponierbare Scopes auf `PressRelease`: `scopePublished()` (Status + gesetztes Datum, ohne Zeitschranke → für Statistik-Fenster), `scopeVisibleInArchive()` (`published()` + `published_at <= now()`), `scopeForPortalValues(array)`, `scopeForLanguage(string)`. ~19 dupliziierte Query-Blöcke in `routes/web.php` (Home, Kategorie, Detail, Veröffentlichen, Suche, Newsrooms, Newsroom-Detail, Legacy-Redirect) darüber zentralisiert; jedes `withoutGlobalScope(PortalScope)` an seiner Stelle erhalten (Klausel-Reihenfolge ist für das Ergebnis irrelevant, da reine AND-Verknüpfung). Test: `Web/PublishedReleaseScopeTest`; die 89 bestehenden `Web/`-Tests bleiben grün.
- [ ] **4.3 Page-Data in Services** — `HomePageData`/`CategoryPageData`/`NewsroomPageData` für Home/Kategorie/Newsroom/Detail/Suche/Preise.
- [ ] **4.4 Routen auf schlanke (Invokable) Controller umstellen** — schrittweise je Seite.
- [x] **4.3 Page-Data in Services** — acht `App\Services\Web\*PageData`-Klassen (`HomePageData`, `CategoryPageData`, `ReleaseDetailPageData`, `VeroeffentlichenPageData`, `SuchePageData`, `NewsroomsPageData`, `NewsroomDetailPageData`, `PreisePageData`) bündeln die komplette Datenaufbereitung; sie bekommen den `WebPortalContext` (bzw. Portal+Sprache) und liefern das View-Daten-Array.
- [x] **4.4 Routen auf schlanke (Invokable) Controller umstellen** — acht `App\Http\Controllers\Web\*Controller` (je Seite ein Commit) lösen den `WebPortalContext` auf, rufen die Page-Data und geben die View zurück. `routes/web.php` von ~1080 auf 233 Zeilen geschrumpft (nur noch Routing + Legacy-301-Redirects + Bare-Root/Hub). **Hinweis:** Bei `{slug}`-Routen führt die Controller-Signatur `string $edition` vor `string $slug` (positionsgebundene Route-Parameter-Auflösung in Laravel). Verhalten unverändert; die 92 `Web/`-Tests bleiben grün.
---