29-05-2026 Optimierungen Fixes am Code

This commit is contained in:
Kevin Adametz 2026-05-29 12:42:05 +00:00
parent e8c47b7553
commit 4bb9094207
31 changed files with 5141 additions and 76 deletions

View file

@ -0,0 +1,311 @@
# Status-Abgleich · User Panel
Stand: 2026-05-21
> Dieses Dokument vergleicht die Konzept-Dokumente im Ordner `docs/` mit dem
> tatsächlichen Code-Stand. Es dient als Single Source of Truth für die
> Entscheidung, welche Konzept-Abschnitte aktualisiert werden müssen und wo
> weiterhin Lücken bestehen.
>
> **Methode**: Code-Inspektion aller Customer-Komponenten in
> `resources/views/livewire/customer/`, Models, Migrationen und Services
> gegen die Inhalte der Doku in `docs/user-admin/` und `docs/konzept/`.
>
> **Lese-Hilfe**:
>
> - ✅ **Doku stimmt mit Code überein** — kein Handlungsbedarf
> - 🔄 **Doku ist überholt** — Code ist schon weiter, Doku muss nachgezogen werden
> - 📝 **Code ist hinter Doku** — Konzept beschreibt etwas, das noch nicht
> gebaut ist
> - ⚠️ **Inkonsistent** — Doku und Code widersprechen sich
> - ❓ **Nicht im Konzept** — im Code da, aber nirgends dokumentiert
---
## 1. Globale Architektur des User Backends
| Konzept-Aussage | Quelle | IST im Code | Status |
|---|---|---|---|
| User/Admin getrennt, technisch gemeinsames Backend, Trennung über Rollen/Policies | `Admin-User.md` | Umgesetzt: `PressReleasePolicy`, Spatie-Rollen, Customer-/Admin-Routen | ✅ |
| Navigation in „Mein Bereich · Finanzen · Konto" | `Admin-User.md`, `checkliste-user-backend.md` | `components/layouts/app/sidebar.blade.php` setzt die drei Gruppen | ✅ |
| Topbar oben rechts mit Firmen-Kontext-Switcher | `Admin-User.md` | `customer/company-switcher.blade.php` + Layout-Integration | ✅ |
| „Pressemappen" terminologisch auf „Firmen" umbenannt | `checkliste-user-backend.md` | Im UI durchgehend „Firmen" / „Meine Firmen"; Routen heißen aus Legacy-Gründen weiterhin `me.press-kits.*` | 🔄 (Doku-Nacharbeit: Hinweis ergänzen, dass die internen Route-Namen weiterhin `press-kits` heißen) |
| Phase 1 funktional abgeschlossen | `checkliste-user-backend.md` Z. 71 | Trifft zu — alle in „Erledigt" markierten Punkte sind im Code verifizierbar | ✅ |
---
## 2. Customer-Pages — IST-Stand pro Page
### Dashboard (`customer/dashboard.blade.php`)
| Konzept-Aussage | IST | Status |
|---|---|---|
| Datenqualitäts-Hinweise (Profil, Rechnungsadresse, Pressekontakte, PMs ohne Firma) | umgesetzt mit `<x-portal.hint-card>` | ✅ |
| KPI-Reihe Pressemitteilungen | umgesetzt mit `<x-portal.stat-card>`, Trend-Slot mit `pub/prüf/entwurf` | ✅ |
| Filter-Reaktion auf Firmen-Kontext | `recent` und `companies` queries respektieren `selectedCompany` | ✅ |
### Pressemitteilungen-Liste (`customer/press-releases/index.blade.php`)
| Konzept-Aussage | IST | Status |
|---|---|---|
| Status-Tabs (Alle/Veröffentlicht/Entwürfe/Prüfung/Abgelehnt/Archiv) | umgesetzt als `view-tabs` mit Counter-Pillen | ✅ |
| Filter ohne Firma, Status, Portal | `statusFilter`, `portalFilter`, `companyFilter` aktiv | ✅ |
| Filter-Presets (`user_filter_presets`) | **fehlt** | 📝 (in Phase 2 lt. Doku — bleibt pending) |
| PM-Detail Tab „Verlauf" aus `press_release_status_logs` | als „Status & Verlauf"-Card eingebaut, nicht als eigener Tab | 🔄 (Doku-Anpassung: Card statt Tab; funktional gleichwertig) |
| Hinweis Scheduling/Embargo in der Liste | **fehlt** | 📝 (s. eigener Gap-Block unten) |
### Pressemitteilungs-Forms
| Konzept-Aussage | IST | Status |
|---|---|---|
| Einfacher Editor mit Absätzen, fett + kursiv | Flux-Editor mit `heading | bold italic | bullet ordered blockquote | link` — mehr als minimal | 🔄 (Konzept-Update: Aktuelle Toolbar ist bewusst etwas größer als „nur fett + kursiv") |
| Pflichtfeld `company_id` für Customer | Validation `required` | ✅ |
| Portal aus Firma abgeleitet (Customer) | `updatedCompanyId()` setzt `portal` aus `company->portal` | ✅ |
| `subtitle`-Feld | seit Phase 7 da | ❓ (im Konzept nicht erwähnt, aber sinnvoll) |
| `scheduled_at`, `embargo_at`-Felder im Form | seit Phase 7F da | ❓ (im Konzept nicht beschrieben) |
| HTML-Sanitizer auf Save | `PressReleaseHtmlSanitizer` (mews/purifier) | ❓ (Konzept-Punkt 2/Bilder nennt KI-Check, aber keinen HTML-Sanitizer — sollte dokumentiert werden) |
| Boilerplate-Override pro PM | seit Phase 7 als optionaler Override-Text | ❓ (im Konzept nicht erwähnt) |
| Pressekontakt-Zuordnung Single-Select (1 pro PM, n:m beibehalten) | seit Phase 7, jetzt optional/Warnung | 🔄 (Konzept-Punkt: Pressekontakt war ursprünglich „mehrere möglich", jetzt 1 pro PM optional) |
| Attachment-Manager | **temporär deaktiviert wegen Security-Review** | ⚠️ (Konzept beschreibt Anhänge, Code hat es auskommentiert) |
### Pressemitteilungs-Detail (Customer Show)
| Konzept-Aussage | IST | Status |
|---|---|---|
| Status & Verlauf inkl. Logs | umgesetzt | ✅ |
| Zugeordnete Pressekontakte | umgesetzt | ✅ |
| Rejection-Begründung sichtbar | umgesetzt | ✅ |
| Vorschau-Link für externe Reviewer | `generateShareLink` via Magic-Link-Token | ✅ |
| Anzeige Subtitle / `scheduled_at` / `embargo_at` / `boilerplate_override` | **fehlt** (nur Admin-Show hat scheduled/embargo) | 📝 (offener Punkt aus letzter Diskussion) |
### Firmen-Liste (`customer/press-kits/index.blade.php`)
| Konzept-Aussage / Mockup | IST | Status |
|---|---|---|
| Karten-Grid pro Firma mit Logo, Status, Portal, Rolle, KPIs | Karten vorhanden, aber **deutlich schlichter** als Mockup | 📝 (Hauptthema Phase 8) |
| Counter-Strip (X Firmen, X aktiv, X PMs total, X Kontakte) | **fehlt** | 📝 |
| Saved-View-Tabs (Alle / Aktiv / In Anlage / Inaktiv / Mit mir geteilt) | **fehlt** | 📝 |
| Filter-Chips (Status / Portal / Rolle / Branche) | **nur Volltext-Suche** | 📝 |
| Seg-Toggle Karten/Liste | **fehlt** | 📝 |
| Empty-States (keine Firma / Filter ohne Treffer) | nur generischer Empty-State | 📝 |
| Rollen-Legende (Admin / Redakteur / Beobachter) | **fehlt** | 📝 |
| „Firma anlegen"-CTA | derzeit zeigt nur „Firma anlegen anfragen" → Profil; Mockup hat direkten Anlage-Flow | 🔄 (Firma-Self-Service ist Phase-2-Thema laut Doku, im Mockup aber wie Phase-1 dargestellt) |
### Firmen-Detail (`customer/press-kits/show.blade.php`)
| Konzept-Aussage | IST | Status |
|---|---|---|
| Tabs Übersicht / Stammdaten / Pressekontakte / PMs / Statistik / Abrechnung | **eine lange Seite mit Quick-Nav-Anker, keine echten Tabs** | 🔄 (Doku-Update: Quick-Nav statt Tabs; visuell gleichwertig) |
| Stammdaten inkl. Logo bearbeitbar | umgesetzt | ✅ |
| Pressekontakte verwalten | umgesetzt | ✅ |
| Eigentümer-Anzeige konsolidiert aus `owner_user_id` + `company_user.role` | umgesetzt | ✅ |
| Statistik-Tab | nur Stub („In Vorbereitung") | 📝 (Phase 2) |
| Abrechnung-Tab | nur Stub | 📝 (Phase 2) |
| Magic-Link aktiv/inaktiv-Badge pro Kontakt | **fehlt** | 📝 |
| Anzahl PMs pro Kontakt aus `press_release_contact` | **fehlt** | 📝 |
| „+ Neuer Pressekontakt" mit Magic-Link-Berechtigung-Toggle | nur Basis-Form, kein Magic-Link-Toggle | 📝 (gehört zu Magic-Link-Flow → Phase 2) |
### Settings (`settings/*`, `customer/profile`, `customer/security`)
| Konzept-Aussage | IST | Status |
|---|---|---|
| Profil + Rechnungsadresse + Sicherheit + Newsletter + API-Tokens | alles vorhanden | ✅ |
| Magic-Link-Verlauf in Sicherheit | **fehlt** | 📝 (Phase 2) |
| API-Nutzungs-Log | **fehlt** | 📝 (Phase 2) |
| Team-Tab (Agency-Tarif) | **fehlt** | 📝 (Phase 2) |
### Finanzen
| Konzept-Aussage | IST | Status |
|---|---|---|
| Rechnungen mit Legacy-Archiv | umgesetzt | ✅ |
| Buchungen & Add-ons | nur Stub | 📝 (Phase 2) |
| Credits & Tarif | nur „bald"-Eintrag in Sidebar | 📝 (Phase 2) |
| Zahlungsmethoden firmenscharf | **fehlt** | 📝 (Phase 2) |
---
## 3. Großthemen aus dem Konzept — Status
### 3.1 KI-Freigabe-Workflow
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 1.
| Punkt | Code-Stand |
|---|---|
| KI-Vorprüfung mit JSON-Antwort | **nicht implementiert** |
| Drei-Stufen-Ergebnis grün/gelb/rot | nur „review"/„published"/„rejected" via Admin-Flow |
| Logging der KI-Antworten | **fehlt** |
| Trust-Score | **fehlt** |
| Blacklist-Wort-Check | **vorhanden** über `PressReleaseService::submitForReview` mit `BlacklistViolationException` |
**Bewertung**: 📝 — Konzept-Vision für Phase 2/3, im Code nur die rudimentäre Blacklist-Variante.
### 3.2 Bilder & Lizenzen
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 2 + `Admin-User.md` Punkt 4.
| Punkt | Code-Stand |
|---|---|
| Upload-Workflow (Eigenes / Stock / KI) | Nur „Eigenes Bild" via `press-release-images-manager` |
| Pflichtfelder (Urheber, Lizenztyp, Lizenz-URL, Personen-Einwilligung, Rechte-Bestätigung) | Nur `title` + `copyright` (Freitext) — **deutlich unter Konzept** |
| KI-Wasserzeichen-Check | **fehlt** |
| Unsplash/Pexels-API | **fehlt** |
| KI-Bildgenerierung | **fehlt** |
| `is_preview`-Flag für Titelbild | im Modell vorhanden, im Manager toggelbar |
| Bild-Varianten (thumb/medium/large) | `ImageService::PRESS_RELEASE_IMAGE_VARIANTS` generiert sie automatisch |
| SVG-Platzhalter, falls keine Bilder | **inline in Landing-Page-Komponenten (z. B. `focus-hero`, `feed-top-item`), kein zentrales Set** |
**Bewertung**: 📝 — Großthema für Phase 8 (siehe Plan). Lizenzfelder + SVG-Platzhalter sind Pflicht, bevor Bild-Upload produktiv geht.
### 3.3 Notice-and-Action (Meldung durch Dritte)
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 3.
| Punkt | Code-Stand |
|---|---|
| Öffentliches Melden-Formular | **fehlt** |
| Ticketsystem mit Kategorien (Urheberrecht, Persönlichkeitsrecht, …) | **fehlt** |
| KI-Triage | **fehlt** |
| Quarantäne-Flow | **fehlt** |
**Bewertung**: 📝 — Phase 2/3-Thema, im Konzept gut beschrieben.
### 3.4 Magic-Link-Flow für Pressekontakte
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 6.
| Punkt | Code-Stand |
|---|---|
| `magic_links`-Tabelle | **vorhanden** |
| Magic-Link-Generator | `MagicLinkGenerator` existiert (wird für PM-Vorschau-Links genutzt) |
| Magic-Link für Pressekontakt-Zugang | **fehlt** als eigener Flow |
| Token-Tabelle `press_release_access_requests` o. ä. | **fehlt** |
| Änderungs-Wizard (Tippfehler/Daten/Korrektur/Update/DSGVO) | **fehlt** |
**Bewertung**: 📝 — Phase 2-Thema, vollständig im Konzept beschrieben.
### 3.5 Pricing / Tarife / Credits
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 8 + 9, `Konzept-Update 1.md`.
| Punkt | Code-Stand |
|---|---|
| Tarif-Tabellen (Einzel/Starter/Business/Pro/Agency) | **nicht im Datenmodell** |
| PM-Kontingent pro Tarif | **fehlt** |
| Bonus-Credits monatlich | **fehlt** |
| Credit-Pakete | **fehlt** |
| Auto-Refill | **fehlt** |
| Stripe-Integration | **fehlt** |
| `user_payment_options`-Tabelle | **vorhanden** (Pivot zu Companies da, aber kein aktiver Flow) |
**Bewertung**: 📝 — Phase 2/3, größtes ungebautes Feature. Für Phase 8 ist relevant: bei PM-Einreichung wird **konzeptuell** Quota dekrementiert; die UI-Anzeige im Veröffentlichungs-Modal kann darauf vorbereitet werden, das echte Decrement-Verhalten kommt aber erst mit dem Tarif-Modul.
### 3.6 Korrektur-Modell & Tombstones
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 4.
| Punkt | Code-Stand |
|---|---|
| Korrektur-Hinweis | **fehlt** |
| Update-Hinweis (am Ende anhängen) | **fehlt** |
| Anonymisierung (DSGVO) | **fehlt** |
| Tombstone statt Hard-Delete | `PressReleaseService::deleteFromAdmin()` setzt veröffentlichte PMs auf „archiviert" mit Ersatztext — **rudimentär da** |
| Textvorlagen admin-pflegbar | **fehlt** |
**Bewertung**: 🔄 — Tombstone-Variante existiert minimal; Konzept-Doku sollte den Ist-Stand notieren, der Rest ist Phase 2.
### 3.7 Score / Trust-Score (Konzept-Update 2)
**Konzept-Stand**: `Konzept-Update 2 Score-Stufen-System.md`.
| Punkt | Code-Stand |
|---|---|
| User-Score-Tabelle | **fehlt** |
| Firmen-Score | **fehlt** |
| Auto-Publishing in Abhängigkeit vom Score | **fehlt** |
**Bewertung**: 📝 — Phase 3, vollständig im Konzept.
---
## 4. Was im Code da ist, aber im Konzept nicht / nur am Rande steht
| Feature | Wo im Code | Doku-Nacharbeit |
|---|---|---|
| Phase-7-Schema-Erweiterungen (`press_releases.subtitle`, `scheduled_at`, `embargo_at`, `boilerplate_override`, `no_export`) | Migrationen `2026_05_20_*` | Im Konzept ergänzen, dass PMs Untertitel + Scheduling/Embargo unterstützen |
| `mews/purifier` für HTML-Sanitization | `PressReleaseHtmlSanitizer` | Im Konzept-Abschnitt zu Editor erwähnen |
| `press_release_attachments`-Tabelle + Model | Migration `2026_05_20_143424_*` | UI auskommentiert, Tabelle bleibt → Doku-Anker für spätere Reaktivierung |
| Background-Job für scheduled publishing | `app/Console/Commands/PublishScheduledPressReleases.php`, alle 5 Min via Scheduler | Im Konzept als „automatische Veröffentlichung zum geplanten Termin" hinzufügen |
| FluxUI Toast für UX-Feedback | `Flux::toast()` durchgehend in Customer-Forms | Konzept-übergreifend, kein Konzept-Update nötig |
| Smooth-Scroll zu Validation-Errors | `resources/js/portal-form-hooks.js` | UX-Detail, keine Konzept-Doku |
| Pre-Submit-Check-Liste in PM-Forms | computed `presubmitChecks` | Im Konzept als „Pre-Submit-Check senkt Support-Aufwand" ergänzen |
| Hub-Design-System (Tokens + Komponenten) | `dev/frontend/hub-flux/` (Phase 07) | Eigene Roadmap-Doku, nicht teil von `docs/` |
| Theme-Override pro Domain | `ThemeServiceProvider` + `config/domains.php` | In `Echte öffentliche Unterseiten.md` ergänzen |
| Public-Detail-Page (`web/release-detail.blade.php`) | umgesetzt | In `Echte öffentliche Unterseiten.md` als „existiert" markieren |
---
## 5. Offene Punkte aus dem letzten Code-Review
Diese Punkte habe ich beim Review der Phase-7-Forms gefunden, sie sind weder
in den Konzept-Dokumenten erfasst noch in einem Plan:
| Lücke | Betroffene Dateien | Empfehlung |
|---|---|---|
| Customer-Show zeigt weder `subtitle` noch `scheduled_at`/`embargo_at`/`boilerplate_override` | `customer/press-releases/show.blade.php` | Phase 8 |
| Admin-Show zeigt weder `subtitle` noch `boilerplate_override` | `admin/press-releases/show.blade.php` | Phase 8 |
| Liste-Indikator für Scheduling/Embargo | `customer/press-releases/index.blade.php`, `admin/press-releases/index.blade.php` | Phase 8 |
| Pressekontakt-Sidebar zeigt keine Warn-Box, wenn kein Kontakt gewählt | `customer/press-releases/create.blade.php`, `edit.blade.php` | Phase 8 |
| Anhang-Tests laufen ins Leere | `tests/Feature/PressReleaseAttachmentsManagerTest.php`, Teile von `PressReleasePhase7SchemaTest.php` | Phase 8 → `->skip(...)` mit Verweis auf Security-Review |
| Roadmap-Doku `19-PHASE-7-PRESS-RELEASE-FORM.md` ist nicht mehr aktuell | Letzte 3 große Änderungen fehlen | Phase 8-Doku-Block |
---
## 6. Empfehlungen zur Pflege der Doku
### 6.1 Sofort ohne Risiko machbar
1. In `Admin-User.md` ergänzen: „PMs unterstützen Untertitel, Scheduling und
Embargo seit Phase 7".
2. In `Presseportal Konzept für Relaunch.md` Abschnitt 1: aktuellen
Blacklist-Stand notieren („KI-Vorprüfung folgt; aktuell wird per
Blacklist gegen offensichtliche Verstöße geprüft").
3. In `Presseportal Konzept für Relaunch.md` Abschnitt 2: hinzufügen,
dass Bilder aktuell nur als „Eigenes Bild" hochgeladen werden können,
Stock- und KI-Quellen folgen.
4. In `Presseportal Konzept für Relaunch.md` Abschnitt 4: notieren, dass
Tombstone-Variante rudimentär da ist (`deleteFromAdmin`-Ersatztext),
die Korrektur-/Update-Hinweise aber noch fehlen.
5. In `checkliste-user-backend.md` neuen Block „Phase 7" hinzufügen mit
Verweis auf `dev/frontend/hub-flux/19-PHASE-7-PRESS-RELEASE-FORM.md`.
### 6.2 Mit Phase 8 ergänzen
6. Neuer Abschnitt im `Admin-User.md`: „Titelbild & SVG-Platzhalter".
7. Neuer Abschnitt im `Presseportal Konzept für Relaunch.md`: „Veröffentlichungs-Modal & Quota-Kommunikation".
8. Aktualisierung der Firmen-Liste-Doku im `Admin-User.md` mit den
neuen UI-Bausteinen (Counter-Strip, Saved-Views, Filter-Chips,
Card/List-Toggle, Rollen-Legende).
### 6.3 Längerfristig (Phase 2/3)
9. Magic-Link-Flow für Pressekontakte → eigenes Doku-Kapitel, sobald
gebaut.
10. Tarif-/Credit-System → eigener Architektur-Block (Datenmodell,
Stripe-Integration, Quota-Counter-Implementierung).
---
## 7. Quellen-Übersicht für die nächsten Schritte
| Frage | Quelle |
|---|---|
| Was ist konzeptuell der User-Backend-Aufbau? | `docs/user-admin/Admin-User.md` |
| Was ist bereits umgesetzt, was offen? | `docs/user-admin/checkliste-user-backend.md` (Phase 1 ✅) |
| Datenmodell-Übersicht? | `docs/user-admin/user-zusammenhaenge.md` |
| Großthemen-Konzept (KI, Bilder, Tombstones, Magic-Link, Pricing)? | `docs/user-admin/Presseportal Konzept für Relaunch.md` |
| Brand- & Design-System? | `docs/konzept/Entwicklungs-Konzept - Frontend-Komponenten Multi-Brand.md`, `dev/frontend/hub-flux/*` |
| Score-System? | `docs/konzept/Konzept-Update 2 Score-Stufen-System.md` |
| Aktuelle Phase 7 (PM-Form-Refactor)? | `dev/frontend/hub-flux/19-PHASE-7-PRESS-RELEASE-FORM.md` |
| Nächste Phase 8? | `docs/PHASE-8-USER-PANEL-PLAN.md` (neu, neben diesem Dokument) |