presseportale/dev/migration 2026/06-FEATURES-SCOPE.md

11 KiB
Raw Blame History

06 – Feature-Scope (IN / OUT / ANGEPASST)

Diese Matrix ist die fachliche Scope-Grundlage. Stand: 2026-04-23 – Entscheidungen vom Auftraggeber bestätigt.

Legende: IN = wird migriert · NEU = wird neu gebaut (nicht aus Legacy portiert) · OUT = entfällt · ANGEPASST = kommt rein, aber in veränderter Form · ARCHIV = nur lesbar für Nachschau.


1. Authentifizierung

Feature Legacy Scope Anmerkung
Login/Logout ✓ IN Fortify
Registrierung (neue User) ✓ IN Fortify-View anpassen; User-Typ bei Anmeldung wählen
Passwort zurücksetzen ✓ IN Fortify
E-Mail-Verifizierung ✓ IN Fortify
2FA (TOTP) – IN (neu) Fortify 2FA-Spalten liegen bereits in users
Remember-me ✓ IN Laravel Standard
Magic-Link Login (Login per E-Mail-Link) – NEU ⭐ Für Companies ohne Passwort + als Alternative für alle; kurzlebige signed URLs
Legacy-Passwort-Hashes weiter gültig sha1 OUT Go-Live-Mailing mit Reset-Link + Sicherheitshinweis
Legacy-API-Key-Kompatibilität ✓ OUT Sauberer Cut-over auf Sanctum; Kunden werden über neue Tokens informiert
Captcha beim Login sfCaptchaGDPlugin OUT Ersetzt durch Rate-Limiting + Honeypot

2. Benutzer / Profile

Feature Legacy Scope
User-CRUD im Admin ✓ IN
User-Rollen (Groups) sfGuardGroup IN (Spatie): admin, editor, customer, api-only
User-Permissions sfGuardPermission IN (Spatie)
User-Profile (Adresse, Tel, Tax-ID …) ✓ IN
Sanctum-Tokens verwalten (Self-Service) – NEU
User-Profile backlink_url ✓ IN
User-Profile show_stats ✓ IN
User-Profile disable_footer_code ✓ IN
User-Profile contract_date ✓ IN
ApiUser als eigener Typ ✓ ANGEPASST

3. Firmen & Kontakte

Feature Legacy Scope
Company-CRUD ✓ IN
Agency als Subtyp Inheritance IN
Mehrere verantwortliche User pro Company ResponsibleCompanyUser IN
Company-Login (eigenes Passwort) ✓ OUT
Company-Logo-Upload (verbessert) ✓ (minimal) ANGEPASST ⭐
Footer-Code deaktivieren pro Company ✓ IN
Contact-CRUD ✓ IN
Contact-Autocomplete in PM-Formular ✓ IN

4. Pressemitteilungen

Feature Legacy Scope
CRUD (Admin) ✓ IN
CRUD (Customer-Self-Service) ✓ IN ⭐
Multi-Kategorie? Nein (1 Kategorie) IN (1:1, N:M optional später)
Slugging per Titel+Sprache ✓ IN
Teaser-Range teaser_begin/teaser_end ✓ IN
Status (draft, published, rejected, archived) lose Strings IN
Publish/Reject-Workflow ✓ IN
Automatische Blacklist-Prüfung ✓ IN
Image-Upload mehrere pro PM (verbessert) ✓ ANGEPASST ⭐
Preview-Bild ✓ IN
Hits-Zähler ✓ IN
no_export-Flag ✓ IN
portal-Spalte (portal_type) – IN ⭐
SEO-Felder (Meta Title, Description) teilw. ANGEPASST
Kontakte zu PMs zuordnen ✓ IN
Öffentlicher Magic-Link zum Teilen / Vorschau – NEU

5. Kategorien

Feature Legacy Scope
CRUD mit Slug ✓ IN
Mehrsprachigkeit (DE + EN) ✓ IN
Hierarchie (Parent/Child) ✗ IN (neu, optional)
Footer-Code pro Kategorie ✓ IN

6. Newsletter

Feature Legacy Scope
Subscribe mit Double-Opt-In ✓ NEU
Unsubscribe-Link ✓ NEU
Admin: Subscriber-Liste ✓ NEU
Admin: Kampagnen (manuell versenden) ✗ NEU
CSV-Export / -Import ✗ NEU
Bestandssubscriber (aus Legacy) ✓ IN (Datenimport)

7. Billing / Payment / Invoicing

Großer Umbau (D-03, D-12, D-13): Komplett neuer Billing-Lauf, nur Stripe, alte Rechnungen → Archiv.

Feature Legacy Scope
PaymentOption-Verwaltung (neu definiert) ✓ NEU
Grandfathering (aktive Alt-User behalten Konditionen) – NEU ⭐
Recurring via Stripe Subscription – NEU
Onetime / Single-Purchase ✓ NEU
Coupons ✓ OUT (vertagt, D-16)
Mehrfach-Buchung pro Company ✓ IN (neu modelliert)
Zahlungsart: SPK Berlin / Cortal Consors / Bar / Post / PayPal ✓ OUT
Zahlungsart: Rechnung ✓ OUT ⭐
Zahlungsart: Stripe (Karte, SEPA, Klarna optional) ✗ NEU
Invoice-Generation (neu) ✓ NEU
Invoice-PDF ✓ (TCPDF) ANGEPASST
Mahnwesen ✓ (3 Stufen) NEU
Abweichende Rechnungs-Adresse ✓ IN
Tax-Exempt / Reverse-Charge ✓ IN
VAT-Berechnung ✓ IN (aktuelle Sätze)
Legacy-Rechnungen (PDFs) ✓ ARCHIV ⭐

8. REST-API

Details: 07-API-MIGRATION.md

Endpoint Legacy Scope
POST Pressrelease ✓ IN (neu implementiert, Sanctum-Auth)
GET Pressrelease-List ✓ IN
GET/PATCH Pressrelease ✓ IN
POST Image-Upload ✓ IN
GET Companies ✓ IN
GET Categories ✓ IN
POST Newsletter subscribe ✓ IN
Auth: Legacy api_key-Query-Param ✓ OUT ⭐
(alles andere Undokumentierte) ? ❓

9. Marketing / Redaktion

Feature Legacy Scope
Promotion-Links ✓ OUT ⭐
Footer-Code pro Kategorie/Sprache ✓ IN
„page"-Modul (statische Seiten) ✓ OUT

10. Cron / Scheduler

Job Legacy Scope
sfp:user-payment-create ✓ OUT
sfp:invoice-create ✓ NEU
sfp:invoice-reminder ✓ NEU
sfp:user-paymentoption-expire deaktiviert NEU
Magic-Link-Cleanup – NEU
Newsletter-Versand-Queue – NEU
Log-Rotation / Prune Failed Jobs – NEU

11. Bilder / Media

Feature Legacy Scope
Thumbnail-Generierung sfImageTransformPlugin ANGEPASST
Varianten (thumb_200, thumb_500, etc.) ✓ IN
Storage lokal ✓ IN (Dev + Prod initial)
Storage S3-kompatibel ✗ IN (optional später)
Alte Image-URLs (/thumbnails/...) ✓ ANGEPASST
Company-Logo größer & mehrere Varianten ✓ (minimal) NEU ⭐
Press-Release mehrere Bilder teils NEU ⭐

12. Kundenbereich / Customer-Portal ⭐ NEU AUFGEWERTET

Entscheidung D-11: Das Backend ist nicht nur Admin-UI, sondern bedient auch Endkunden.

Feature Scope Anmerkung
Customer-Login (Passwort oder Magic-Link) NEU Eigene Route-Gruppe customer.*
Eigenes Dashboard (Übersicht aktive Abos, letzte PMs, Rechnungen) NEU
Eigene Pressemitteilungen: Liste / Erstellen / Bearbeiten NEU
Eigene Rechnungen einsehen + PDF NEU Inkl. Legacy-Archivrechnungen
API-Tokens verwalten (Sanctum-PATs) NEU
Company-/Contact-Profile pflegen NEU
Zwei-Faktor-Auth aktivieren NEU
Passwort ändern / Mail ändern NEU

13. Frontend-Integration

Feature Legacy Scope
Altes Symfony-Frontend (presseecho/businessportal24.com) ✓ OUT
Neue Frontends (presseecho.test / businessportal24.test) vorhanden IN

14. Offene Scope-Entscheidungen (Restliste)

ID Thema Vorschlag / Status
S-01 Multi-Kategorie pro PM Bei 1:1 belassen; N:M-Ausbau nur auf Anfrage
S-02 Coupons-Wiedereinführung Vertagt (siehe D-16)
S-03 E-Mail-Duplikate zwischen Portalen Merge wenn gleiche E-Mail (siehe 05-DATABASE-MERGE §3.1)
S-04 S3 für Medien in Prod Optional, erst wenn Volumen es erfordert
S-05 Definition der neuen Stripe-Produkte Preisliste + Laufzeiten vom Auftraggeber noch zu liefern

15. QA-Checkliste (manuell, vor Go-Live)

  • Admin-Login (inkl. 2FA) funktioniert
  • Customer-Login via Magic-Link funktioniert
  • Customer-Login via Passwort funktioniert
  • Passwort-Reset-Flow funktioniert (für Go-Live-Mailing kritisch)
  • Portal-Scoping: Admin sieht mit Filter Presseecho-only, BP24-only, alle
  • Press Release: Admin: Create → Save Draft → Publish → Mail → sichtbar im Frontend
  • Press Release: Customer: Create → Save Draft → Submit → Admin sieht zur Prüfung
  • Pressrelease Image-Upload, mehrere Bilder, Preview-Bild-Flag
  • Company-Logo-Upload (mehrere Varianten)
  • Blacklist-Wort blockiert Publish
  • Newsletter Double-Opt-In End-to-End (neu)
  • Stripe-Checkout End-to-End inkl. Webhook, Invoice-PDF wird erzeugt
  • Grandfather-User: aktives Alt-Abo wird korrekt weiterberechnet/angezeigt
  • Legacy-Rechnungen im Archiv sichtbar (Admin + Customer)
  • API: POST /v1/press-releases mit Sanctum-Token
  • API: Alter api_key-Parameter wird abgewiesen (Error-Hinweis mit Migrationslink)
  • Alter /thumbnails/...-Link redirectet korrekt
  • Scheduler-Jobs greifen (Runbook: php artisan schedule:run und queue:work)
  • Import-Rehearsal: aktuelles Runbook aus MIGRATION-STEPS.md läuft auf frischer Ziel-DB gegen produktiven DB-Snapshot erfolgreich durch