From c16b0b77e2002113489cd6f176ffaa623d054bbb Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Tue, 30 Jun 2026 10:57:19 +0000 Subject: [PATCH] Doku: portalBadgeColor()-Klaerung im Plan vermerkt (toter Code entfernt) Co-Authored-By: Claude Opus 4.8 (1M context) --- dev/optimize/entwicklungsplan.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/optimize/entwicklungsplan.md b/dev/optimize/entwicklungsplan.md index c90b661b..cc7f1b21 100644 --- a/dev/optimize/entwicklungsplan.md +++ b/dev/optimize/entwicklungsplan.md @@ -13,7 +13,7 @@ Gesamttest-Suite zuletzt grün (**818 passed, 1 skipped**), Pint sauber. Jeder S **Hier geht es weiter** — der gesamte Rest ist **Blade-Component-Extraktion** und braucht **visuelle Kontrolle im Browser** (die automatischen Tests prüfen nur Text-Präsenz, keine Optik). Empfehlung: **eine Component pro Commit**, danach im Browser gegenchecken (`vendor/bin/sail npm run dev`). Reihenfolge des Wiedereinstiegs: 1. **5.4 Seiten-Struktur-Components** (risikoärmster UI-Einstieg, rein additiv): ``, ``, `` usw. — je Component erst die Komponente bauen (Muster: bestehende ``), dann eine Admin-Seite umstellen und visuell prüfen, dann die übrigen. -2. **5.3 Rest** (Badges/Formatierung): zuerst die Call-Sites von `portalBadgeColor()` klären (in `companies/index`, `companies/show`, `contacts/index` definiert — Aufruf-Stellen wirken teils tot, vor `Portal::badgeColor()` prüfen, ob die Methoden überhaupt noch gerendert werden); dann `PressReleaseStatus`-Badge-Methode + ``/``/``/``. +2. **5.3 Rest** (Badges/Formatierung): `portalBadgeColor()` ist **erledigt** — die Helfer waren tot (kein Call-Site) und wurden entfernt, eine `Portal::badgeColor()`-Zentralisierung entfällt. Offen bleibt nur die UI-Extraktion: `PressReleaseStatus`-Badge-Methode + ``/``/``/``. 3. **5.2 Rest**: gemeinsamer `UserUpsertService`/`SaveUserAction` (Achtung: Anlegen vs. Bearbeiten divergieren stark — Bearbeiten trägt zusätzlich Profil/Kontakte/Passwort/2FA; nur den wirklich gemeinsamen Persistenz-Kern ziehen) + Blade-Feld-Components (`billing-fields`, `company-link-picker`, `role-checkboxes`, `contact-fields`). 4. **5.5 Flash/Auth-Components**. 5. **Phase 6** (Web-Frontend) — separat, dem User gehörend, vor jedem Löschen bestätigen lassen. @@ -102,7 +102,7 @@ Keine Fachlogik-Änderung. Reduziert erreichbare Demo-Komponenten und Altlasten. - [x] **5.1 Tabellen-Concerns** — `HasSortableTable::sort()` (5 byte-identische Kopien zentralisiert; `$sortBy`/`$sortDir`-Defaults bleiben in der Komponente, da sie divergieren) und `HasFullTextSearch::supportsFullTextSearch()` (9 byte-identische Kopien — 4 Index-Listen + 5 Firmen-Comboboxen; nicht mehr genutzte `DB`-Imports entfernt). `AdminPerformanceCache::activeInactiveStats(Builder)` bündelt den identischen `SUM(CASE WHEN is_active)`-Block der Benutzer- und Firmenliste. Tests: erweiterte `AdminPerformanceCacheTest`; abgesichert durch 99 `Admin/`-Tests. **Bewusst zurückgestellt:** `HasResettableFilters` (die `updatedXxxFilter()` divergieren — manche normalisieren zusätzlich Werte; ein generischer `updated()`-Hook wäre eine Verhaltensänderung) und eine gemeinsame `hydrateRelationCounts()` (Count-Hydration unterscheidet sich je Tabelle real). - [~] **5.2 User create/edit entdoppeln** — **Teil 1 erledigt:** `ProvidesUserFormRules`-Concern bündelt die zwischen Anlegen/Bearbeiten identischen Validierungsblöcke (`userIdentityRules(?int $ignore)`, `userRolesAndCompaniesRules()`, `userBillingRules()`); die nur im Bearbeiten genutzten Profil-/Kontakt-Regeln bleiben dort inline. Beide Formulare nutzen die Spreads, 31 User-Tests grün. **Offen (bewusst, mit User abzustimmen):** gemeinsamer `UserUpsertService`/`SaveUserAction` für die ~175-Zeilen-`save()` (Anlegen/Bearbeiten divergieren stark — Bearbeiten trägt zusätzlich Profil, Kontakte, Passwort, 2FA), sowie die Blade-Feld-Components (`billing-fields`, `company-link-picker`, `role-checkboxes`, `contact-fields`) — Markup-Extraktion braucht visuelle QA (analog zur zurückgestellten 2.8). -- [~] **5.3 Formatierungs-Components/Enum** — **Erledigt (Model-Methoden, getestet):** `Contact::displayName()` (6 Relation-Stellen ersetzt; `ContactDisplayNameTest`) und `Category::localizedName()` (4 Stellen; `CategoryLocalizedNameTest`). **Offen (UI-/Blade-lastig, mit User abzustimmen):** `Portal::badgeColor()` (die `portalBadgeColor()`-Helfer haben uneinheitliche/teils tote Call-Sites — vor Zentralisierung klären), `PressReleaseStatus`-Badge-Methode sowie die Blade-Components ``, ``, ``, `` (Markup-Extraktion braucht visuelle QA). +- [~] **5.3 Formatierungs-Components/Enum** — **Erledigt (Model-Methoden, getestet):** `Contact::displayName()` (6 Relation-Stellen ersetzt; `ContactDisplayNameTest`) und `Category::localizedName()` (4 Stellen; `CategoryLocalizedNameTest`). **Geklärt & erledigt:** Die `portalBadgeColor()`-Helfer in `companies/index`, `companies/show`, `contacts/index` waren toter Code (kein Aufruf) und wurden entfernt — eine `Portal::badgeColor()`-Zentralisierung ist damit gegenstandslos. **Offen (UI-/Blade-lastig, mit User abzustimmen):** `PressReleaseStatus`-Badge-Methode sowie die Blade-Components ``, ``, ``, `` (Markup-Extraktion braucht visuelle QA). - [ ] **5.4 Seiten-Struktur-Components** — ``, ``, ``, ``, ``, ``. (Muster: bestehende ``/`components.portal.pagination`.) - [ ] **5.5 Flash/Auth-Components** — `` + `` app-weit; ``, ``/``; `ensureNotRateLimited()/throttleKey()`-Trait (login/magic-link divergieren); ``.