Doku: Status-Sync 11./12.06., Decision-Update Preisstruktur und Phase-9-Plan
- Decision-Update Preisstruktur & Veroeffentlichungs-Flow aufgenommen (Launch-Tarife, Slot-Verbrauch bei Veroeffentlichung, Submit-Gate, Launch-Credits) inkl. Klarstellung 12.06.: Gelb geht direkt live, keine manuelle Pruef-Queue, nur Rot wird abgelehnt - Alle Status-Dokumente auf den Code-Stand gezogen: README-Index, STATUS-ABGLEICH (KI-Pipeline, Bilder/Lizenzen, Pricing), Checkliste (KI- und Titelbild-Bloecke, Launch-To-dos), Admin-User, user-zusammenhaenge (Datenmodell-Delta), Entwicklungsplan KI-Pruefung (Phase 0 abgehakt, Decision-Abgleich) - Ueberschriebene Tarif-Abschnitte in Konzept-Update 1/2 und Relaunch-Konzept mit Superseded-/IST-Hinweisen markiert - Neues Plan-Dokument PHASE-9-FLOW-UND-TARIFE-PLAN.md (9A-9J) - Phase-8-Roadmap-Doku (20-PHASE-8-USER-PANEL.md) + PROGRESS-Eintraege Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
a000238ca8
commit
8d8d957884
17 changed files with 2231 additions and 172 deletions
103
dev/frontend/hub-flux/20-PHASE-8-USER-PANEL.md
Normal file
103
dev/frontend/hub-flux/20-PHASE-8-USER-PANEL.md
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
# Phase 8 · User-Panel-Konsolidierung & PM-Lifecycle
|
||||
|
||||
Stand: 2026-05-29 · **abgeschlossen**
|
||||
|
||||
Plan-Doc: [`docs/PHASE-8-USER-PANEL-PLAN.md`](../../../docs/PHASE-8-USER-PANEL-PLAN.md)
|
||||
Abgleich: [`docs/STATUS-ABGLEICH-USER-PANEL.md`](../../../docs/STATUS-ABGLEICH-USER-PANEL.md)
|
||||
|
||||
Folge-Initiative nach Phase 7 (PM-Form-Refactor). Ziel: das User-Panel
|
||||
produktionsreif abrunden — Show-Page-Lücken, Firmen-Liste auf
|
||||
Mockup-Niveau, durchgängige PM-Titelbilder, rechtssichere Bild-Lizenzen
|
||||
und ein bewusster Veröffentlichungs-Flow mit Kontingent-Vorbereitung.
|
||||
|
||||
## Päckchen-Übersicht
|
||||
|
||||
| ID | Thema | Status |
|
||||
|---|---|---|
|
||||
| 8A | Show-Page-Lücken (subtitle, scheduling, embargo, boilerplate_override) — Customer + Admin | ✅ |
|
||||
| 8B | Listen-Indikatoren für Scheduling/Embargo | ✅ |
|
||||
| 8C | Pressekontakt-Warn-Box in der Form-Sidebar | ✅ |
|
||||
| 8D | Doku-Sync (`docs/user-admin/*`, `STATUS-ABGLEICH`) | ✅ |
|
||||
| 8E | Firmen-Liste auf Mockup-Niveau (Counter-Strip, Saved-Views, Filter-Chips, Toggle, Rollen-Legende) | ✅ |
|
||||
| 8F | SVG-Titelbild-Platzhalter-Set + Anzeige-Komponente + Picker-Modal | ✅ |
|
||||
| 8G | Titelbild-Schema (`placeholder_variant`) + Cover-Resolver | ✅ |
|
||||
| 8H | Bild-Upload mit Lizenz-Pflichtfeldern | ✅ |
|
||||
| 8I | Veröffentlichungs-Modal (Rechtshinweis + Kontingent) | ✅ |
|
||||
| 8J | Quota-Stub im Datenmodell + monatlicher Reset-Command | ✅ |
|
||||
| 8K | Tests, Pint, Build, Doku-Abschluss | ✅ |
|
||||
|
||||
## Wichtigste Code-Artefakte (8F–8J, neu in dieser Phase)
|
||||
|
||||
**Enums**
|
||||
- `app/Enums/PressReleasePlaceholder.php` — 9 SVG-Varianten (Default,
|
||||
Seed-deterministisch, Labels, Asset-Pfad).
|
||||
- `app/Enums/ImageLicenseType.php` — 5 Lizenztypen, `requiresLicenseUrl()`.
|
||||
|
||||
**Assets / Komponenten**
|
||||
- `public/images/press-release-placeholders/01..09-*.svg` (1600×900,
|
||||
3 Muster × 3 Hub-Farben).
|
||||
- `resources/views/components/portal/press-release-placeholder.blade.php` —
|
||||
rendert Bild/Platzhalter mit optionalem Titel-Overlay.
|
||||
- `resources/views/livewire/components/press-release-placeholder-picker.blade.php` —
|
||||
FluxUI-Modal mit 3×3-Grid, dispatcht `placeholder-selected`.
|
||||
|
||||
**Services**
|
||||
- `app/Services/PressRelease/PressReleaseCoverImage.php` — `coverUrl()`,
|
||||
`coverIsPlaceholder()`, `placeholder()`. Bevorzugt `is_preview`-Bild,
|
||||
fällt sonst auf den SVG-Platzhalter zurück.
|
||||
|
||||
**Schema (additive, nullable/Default-Migrationen)**
|
||||
- `press_releases.placeholder_variant` (string 32, nullable).
|
||||
- `press_release_images`: `author`, `license_type`, `license_url`,
|
||||
`persons_consent` (default false), `rights_confirmed_at`.
|
||||
- `users`: `press_release_quota` (default 3),
|
||||
`press_release_quota_used_this_month` (default 0).
|
||||
|
||||
**Models**
|
||||
- `PressRelease`: Cast + `creating`-Hook setzt deterministisch eine
|
||||
Platzhalter-Variante, wenn keine gesetzt ist.
|
||||
- `PressReleaseImage`: Lizenz-Felder + `license_type`-Enum-Cast.
|
||||
- `User`: `pressReleaseQuotaRemaining()`.
|
||||
|
||||
**Service-Hook & Command**
|
||||
- `PressReleaseService::submitForReview()` zählt
|
||||
`press_release_quota_used_this_month` des Autors hoch (Stub).
|
||||
- `app/Console/Commands/ResetMonthlyPressReleaseQuota.php` +
|
||||
Scheduler-Eintrag (`monthlyOn(1, '00:05')`) in `routes/console.php`.
|
||||
|
||||
**Views**
|
||||
- Customer-Show + Admin-Show: Hero-Titelbild via Cover-Resolver.
|
||||
- Customer Create/Edit: Platzhalter-Vorschau + Picker-Einbindung
|
||||
(`#[On('placeholder-selected')]`).
|
||||
- Customer-Show: Veröffentlichungs-Modal (`confirm-submit-review`) mit
|
||||
Rechts-Platzhalter, Kontingent-Badge und 3 Bestätigungs-Checkboxen
|
||||
(Submit-Button via Alpine disabled bis alle gesetzt).
|
||||
- Image-Manager: Lizenz-Felder + Anzeige in der Bild-Kachel.
|
||||
|
||||
## Tests (neu)
|
||||
|
||||
- `tests/Feature/PressReleasePlaceholderTest.php` (8) — Enum, Assets,
|
||||
Picker, Cover-Resolver (Platzhalter + echtes Bild).
|
||||
- `tests/Feature/PressReleaseImageLicenseTest.php` (3) — Pflichtfelder,
|
||||
CC-ohne-URL, vollständiger Upload + `rights_confirmed_at`.
|
||||
- `tests/Feature/PressReleaseQuotaTest.php` (3) — Remaining-Berechnung,
|
||||
Increment bei Submit, monatlicher Reset.
|
||||
- `tests/Feature/PressReleasePublishModalPhase8iTest.php` (2) — Modal-Inhalt
|
||||
(Rechtshinweis + Kontingent), Submit-Flow.
|
||||
|
||||
Gesamt-Suite nach Phase 8: **375 passed, 4 skipped**. Pint clean,
|
||||
`npm run build:portal` clean.
|
||||
|
||||
## Bewusste Abweichungen / offene Folge-Themen
|
||||
|
||||
- **8H — Upload-Control**: `flux:input type=file` statt `flux:file-upload`
|
||||
(Pro-Dropzone mit aufwändigem Slot-Aufbau). Funktion identisch, kein
|
||||
Risiko für den Upload-Flow. Dropzone-Optik ggf. separat nachziehen.
|
||||
- **8I — Rechtstext** ist ein **Platzhalter** und vor Go-Live anwaltlich
|
||||
zu prüfen.
|
||||
- **8J — Quota** ist ein Stub. Die Schnittstelle
|
||||
`User::pressReleaseQuotaRemaining()` bleibt stabil; das echte
|
||||
Tarif-/Credit-Modul löst Spalten + Decrement-Logik später ab.
|
||||
- Offen (Phase 2/3): Stock-/KI-Bildquellen, Wasserzeichen-Check,
|
||||
Magic-Link-Flow für Pressekontakte, Statistik-/Abrechnungs-Tabs,
|
||||
Anhänge-Reaktivierung (Security-Audit).
|
||||
|
|
@ -5,6 +5,67 @@
|
|||
|
||||
---
|
||||
|
||||
## 2026-05-29 · Phase 8 · User-Panel-Konsolidierung abgeschlossen (8F–8K) ✅
|
||||
|
||||
Abschluss von Phase 8. Die erste Hälfte (8A–8E: Show-Page-Lücken,
|
||||
Listen-Indikatoren, Pressekontakt-Warnung, Firmen-Liste auf Mockup-Niveau)
|
||||
war bereits im Commit „Optimierung der User und Admin Panels" enthalten,
|
||||
aber undokumentiert. Heute der zweite Block plus Doku-Sync.
|
||||
|
||||
Roadmap-Doc: `20-PHASE-8-USER-PANEL.md`. Plan: `docs/PHASE-8-USER-PANEL-PLAN.md`.
|
||||
|
||||
**8D — Doku-Sync**: `docs/user-admin/checkliste-user-backend.md`,
|
||||
`docs/STATUS-ABGLEICH-USER-PANEL.md` und `Admin-User.md` auf den
|
||||
echten IST-Stand gezogen (8A–8E waren als „offen" markiert, sind
|
||||
aber umgesetzt).
|
||||
|
||||
**8F — SVG-Titelbild-Platzhalter**
|
||||
- 9 Varianten (3 Muster × 3 Hub-Farben) in
|
||||
`public/images/press-release-placeholders/`.
|
||||
- `App\Enums\PressReleasePlaceholder` (Default, Seed-deterministisch).
|
||||
- `<x-portal.press-release-placeholder>` + Picker-Modal
|
||||
(`components.press-release-placeholder-picker`, dispatcht
|
||||
`placeholder-selected`).
|
||||
|
||||
**8G — Titelbild-Schema + Cover-Resolver**
|
||||
- Migration `placeholder_variant` auf `press_releases` (nullable).
|
||||
- Model-`creating`-Hook setzt deterministisch eine Variante.
|
||||
- `App\Services\PressRelease\PressReleaseCoverImage`
|
||||
(`coverUrl`/`coverIsPlaceholder`).
|
||||
- Hero-Bild in Customer-/Admin-Show; Vorschau + Picker in Create/Edit.
|
||||
|
||||
**8H — Bild-Upload mit Lizenz-Pflichtfeldern**
|
||||
- Migration: `author`, `license_type`, `license_url`,
|
||||
`persons_consent`, `rights_confirmed_at` auf `press_release_images`.
|
||||
- `App\Enums\ImageLicenseType` (CC/kommerziell erzwingen Lizenz-URL).
|
||||
- Image-Manager: Urheber (Pflicht), Lizenztyp (Pflicht), Lizenz-URL
|
||||
(bedingt), Personen-Einwilligung, Rechte-Bestätigung (Pflicht).
|
||||
- Abweichung: Upload-Control bleibt `flux:input type=file` statt
|
||||
`flux:file-upload` (Stabilität). Lizenzerfassung vollständig.
|
||||
|
||||
**8J — Quota-Stub (vor 8I, damit Modal darauf aufsetzt)**
|
||||
- Migration: `users.press_release_quota` (3),
|
||||
`..._used_this_month` (0).
|
||||
- `User::pressReleaseQuotaRemaining()`,
|
||||
Decrement in `PressReleaseService::submitForReview()`.
|
||||
- Command `press-releases:reset-monthly-quota` + Scheduler
|
||||
(`monthlyOn(1, '00:05')`).
|
||||
|
||||
**8I — Veröffentlichungs-Modal (Customer-Show)**
|
||||
- „Zur Prüfung einreichen" öffnet jetzt ein FluxUI-Modal statt
|
||||
`wire:confirm`: Rechtshinweis (Platzhalter, anwaltlich zu prüfen),
|
||||
Kontingent-Badge, 3 Bestätigungs-Checkboxen (Submit via Alpine
|
||||
disabled bis alle gesetzt) → ruft das bestehende `submitForReview()`.
|
||||
|
||||
**8K — Abschluss**
|
||||
- Neue Tests: `PressReleasePlaceholderTest` (8),
|
||||
`PressReleaseImageLicenseTest` (3), `PressReleaseQuotaTest` (3),
|
||||
`PressReleasePublishModalPhase8iTest` (2).
|
||||
- Suite: **375 passed, 4 skipped**. Pint clean.
|
||||
`npm run build:portal` clean.
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-29 · Wartung · Test-Regression-Fix + Phase-7-Doku nachgezogen
|
||||
|
||||
Review der Gesamt-Umsetzung. Zwei Befunde behoben:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue