hooks in config/services.php/.env.example, and updated wizard steps/controllers to store session payloads, attach packages, and surface localized success/error states. - Retooled payment handling for both Stripe and PayPal, adding richer status management in CheckoutController/ PayPalController, fallback flows in the wizard’s PaymentStep.tsx, and fresh feature tests for intent creation, webhooks, and the wizard CTA. - Introduced a consent-aware Matomo analytics stack: new consent context, cookie-banner UI, useAnalytics/ useCtaExperiment hooks, and MatomoTracker component, then instrumented marketing pages (Home, Packages, Checkout) with localized copy and experiment tracking. - Polished package presentation across marketing UIs by centralizing formatting in PresentsPackages, surfacing localized description tables/placeholders, tuning badges/layouts, and syncing guest/marketing translations. - Expanded docs & reference material (docs/prp/*, TODOs, public gallery overview) and added a Playwright smoke test for the hero CTA while reconciling outstanding checklist items.
5.2 KiB
5.2 KiB
Funktionale Spezifikationen – Tenant-Admin-App
Status
- Version: 1.1.0 (Stand 2025-10-13)
- Ersetzt: docs/prp/06-tenant-admin-pwa.md, docs/prp-addendum-2025-09-08-tenant-admin-pwa.md (Legacy-Referenz über Git History).
Deliverables
Die Admin-App muss folgende Kernfunktionen bereitstellen:
- Geführtes Onboarding: Welcome Flow (Hero, How-It-Works, Paketwahl, Zusammenfassung, Erstes Event). Automatische Weiterleitung für Tenants ohne aktive Events.
- Event-Management: Erstellen, Bearbeiten, Veröffentlichen, Archivieren; Join-Token-Verwaltung.
- Galerie-Management: Upload, Moderation, Feature-Flags, Analytics.
- Mitglieder-Verwaltung: Einladungen, Rollen, Zugriffskontrolle.
- Tasks & Emotions: Bibliothek, Zuweisung, Fortschritts-Tracking.
- Abrechnung: Paketübersicht, Stripe/PayPal Checkout, Ledger.
- Einstellungen: Branding, Limits, Rechtstexte, Benachrichtigungen.
- Offline-Support: App-Shell-Caching, Queueing von Mutationen, Sync bei Reconnect.
- Compliance: Audit-Logging, GDPR-konforme Löschung, ETag-basierte Konfliktlösung.
Capabilities
Authentifizierung & Autorisierung
- OAuth2 Authorization Code mit PKCE, Refresh-Tokens via Secure Storage (Web: IndexedDB, Capacitor: Preferences/Keychain).
- Tenant-Scoped Tokens; Rollen
tenant_admin(vollständig) &member(read-only, Upload).
Onboarding Journey
- Routen
/event-admin/welcome/*bilden den Flow. - Filament stellt einen korrespondierenden Onboarding-Wizard (QR/Join-Token, Layout-Download) bereit; Abschluss setzt
onboarding_completed_atserverseitig. useOnboardingProgresspersistiert Fortschritt (localStorage) und synchronisiert mit Backend (onboarding_completed_at).- Paketwahl nutzt
GET /tenant/packages; Stripe/PayPal-Fallbacks informieren bei fehlender Konfiguration. - Dashboard weist per CTA auf offenes Onboarding hin, bis ein erstes Event erstellt wurde.
Event Lifecycle
- Erstellung prüft Paketverfügbarkeit; generiert Join-Token (EventJoinToken-Service).
- QR-Layouts und Token-Rotation erfolgen über
/event-admin/welcomebzw. das Filament-Panel; slug-basierte QR-Links wurden deaktiviert. - Bearbeiten erlaubt Statuswechsel, Aufgaben, Emotions, Join-Token-Verwaltung.
- Veröffentlichen schaltet Guest-PWA frei; Archivieren respektiert Retention-Policy.
Medien & Moderation
- Direktupload via signed URLs, Thumbnail-Generierung serverseitig.
- Moderations-Grid mit Bulk-Aktionen, Filter (Neu, Genehmigt, Featured).
- Analytics: Likes, Uploadzahlen, aktive Gäste.
Tasks & Emotions
- Globale + Tenant-spezifische Bibliothek.
- Drag-and-Drop Zuweisung, Fortschritt je Event, Emotion-Tagging.
Billing & Checkout
- Pakete + Credit-Balance anzeigen.
- Stripe PaymentIntent & PayPal Smart Buttons; Fallback-Meldung bei fehlender Konfiguration.
- Ledger mit Historie (Paginierung, Filter).
Settings
- Branding (Logo, Farben), Domain/Links, Legal Pages.
- Notification Preferences, Paketlimits, Onboarding-Reset.
Offline & Sync
- Service Worker
public/admin-sw.jscached App-Shell/event-adminund statische Assets, liefert Offline-Fallback für Navigation. - Mutationen werden gequeued und nach Reconnect synchronisiert.
- ETag / If-Match für konfliktfreie Updates, Optimistic UI mit Rollback.
Fehlerbehandlung & UX
- Rate-Limit (429) → Retry-Hinweis.
- Offline-Banner + Retry-Buttons an kritischen Stellen (Checkout, Upload).
- i18n via
react-i18next(de/en); Strings inpublic/lang/{locale}/admin.json.
API-Integration
Die App nutzt Endpunkte aus docs/prp/03-api.md.
| Bereich | Endpunkte |
|---|---|
| Auth | POST /oauth/token, POST /oauth/token/refresh |
| Onboarding | GET /tenant/me (Progress Flags), GET /tenant/packages, POST /tenant/events |
| Events | GET/POST/PATCH/DELETE /tenant/events, POST /tenant/events/{event}/toggle, Join-Token Routen |
| Medien | GET /tenant/events/{event}/photos, POST /tenant/events/{event}/photos, PATCH /tenant/photos/{id} |
| Tasks & Emotions | GET /tenant/tasks, POST /tenant/events/{event}/tasks, GET /tenant/emotions |
| Settings | GET/PATCH /tenant/settings, GET /tenant/credits/balance, POST /tenant/purchases/intent |
Nicht-funktionale Anforderungen
- Performance: Ladezeit < 2s; Code-Splitting der Onboarding-Screens.
- Sicherheit: Keine sensiblen Logs; CSRF-mitigiert via PKCE/OAuth; Token-Refresh automatisiert.
- Accessibility: Tastaturbedienung, Fokus-Indikatoren,
prefers-reduced-motion. - Internationalisierung: Sprachumschaltung in Einstellungen; Standard de, Fallback en.
Teststrategie
- PHPUnit: Feature-Tests für Auth-Guards (Tenant ohne Events → Welcome Flow).
- React Testing Library:
TenantWelcomeLayout,PackageSelection,OnboardingGuard,OrderSummary. - Playwright:
tests/e2e/tenant-onboarding-flow.test.tsdeckt Login, Welcome → Packages → Summary → Event Setup ab; Erweiterung um Stripe/PayPal Happy Paths und Offline/Retry geplant. - Smoke Tests:
npm run test:e2ein CI mit optionalen Credentials (E2E_TENANT_EMAIL,E2E_TENANT_PASSWORD, Stripe/PayPal Keys).
Für UI-Details siehe docs/prp/tenant-app-specs/pages-ui.md. Einstellungen werden in docs/prp/tenant-app-specs/settings-config.md beschrieben.