presseportale/dev/migration 2026/06-FEATURES-SCOPE.md
Kevin Adametz 5b8bdf4182
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run
12-05-2026 Frontend dev
2026-05-12 18:32:33 +02:00

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