5.1 KiB
Technische Architektur
Überblick
Wgenerator ist eine Angular-Anwendung mit Firebase als Backend. Die App wird als Single Page Application gebaut und über Firebase Hosting ausgeliefert. Authentifizierung, Firestore und Storage werden über @angular/fire eingebunden.
Der Anwendungseinstieg liegt in src/main.ts; die fachlichen Bereiche werden über src/app/app-routing.module.ts lazy geladen. Der Standardpfad / leitet nach /songs weiter.
Frontend-Struktur
Der fachliche Code liegt unter src/app/modules:
songs: Liedliste, Lieddetails, Bearbeitung, Anhänge, Textdarstellung, Tonarten und Transposition.shows: Veranstaltungslisten, Show-Details, Bearbeitung, Song-Zuordnung, Archivierung, Veröffentlichung, Gastfreigaben und DOCX-Export.presentation: Auswahl, Fernsteuerung und Monitoransicht für Live-Präsentationen.user: Login, Logout, Registrierung, Passwort-Reset und Benutzerinformationen.brand: Start- und Hinweisbereich für neue oder noch nicht berechtigte Benutzer.guest: öffentliche Gastansicht für freigegebene Shows.
Gemeinsame Services liegen in src/app/services. Wiederverwendbare UI-Bausteine, Pipes, Guards und Direktiven liegen in src/app/widget-modules.
Routing und Modulgrenzen
Die Hauptrouten sind:
/songs:SongsModule, mit Authentifizierung und Rolleuser./shows:ShowsModule, mit Authentifizierung und Rolleleaderodermember./presentation:PresentationModule, mit Authentifizierung und Rollepresenter./user:UserModule, teilweise öffentlich und teilweise perAuthGuardgeschützt./brand:BrandModule, öffentlich./guest:GuestModule, öffentlich.
Zusätzliche Modulrouten schränken einzelne Aktionen ein. Beispielsweise benötigt /songs/new die Rolle contributor und /shows/new die Rolle leader.
Datenzugriff
Der technische Firestore-Zugriff ist in DbService gekapselt. Der Service stellt Wrapper für Collections und Dokumente bereit:
col$unddoc$liefern Live-Observables mitidField.add,set,updateunddeletekapseln Schreiboperationen.- Query-Constraints werden bei Bedarf an
col$übergeben.
Fachservices bauen darauf auf:
SongDataServiceundSongServiceverwaltensongs.FileDataService,FileServiceundUploadServiceverwalten Firestore-Metadaten und Firebase-Storage-Dateien zu Songs.ShowDataService,ShowService,ShowSongDataServiceundShowSongServiceverwalten Shows und deren eingebettete Show-Songs.GuestShowDataServiceundGuestShowServiceverwalten öffentliche Gastfreigaben.UserSessionService,UserServiceundUserSongUsageServiceverwalten Authentifizierung, Benutzerprofile, Rollen und Nutzungszähler.ConfigServiceundGlobalSettingsServicelesen beziehungsweise schreiben Dokumente unterglobal.
Mehrere Datenströme werden mit shareReplay gecacht, um Firestore-Listener bei Navigationen wiederzuverwenden.
Authentifizierung und Autorisierung
Firebase Auth liefert den Login-Status. UserSessionService verbindet den Auth-User mit dem Firestore-Dokument users/{uid}. Rollen werden im Feld role als Semikolon-getrennte Zeichenkette gespeichert.
AuthGuard schützt Routen, die einen Firebase-Login benötigen. RoleGuard liest requiredRoles aus der Route-Data-Konfiguration und erlaubt Zugriff, wenn der Benutzer mindestens eine passende Rolle besitzt. admin gilt in der Anwendung als übergeordnete Rolle.
Die Firestore-Regeln erlauben angemeldeten Benutzern breite Lese- und Schreibzugriffe auf fachliche Collections. Deshalb sind UI-Guards und Services fachlich wichtig, ersetzen aber keine feingranulare serverseitige Autorisierung.
Präsentationsarchitektur
Die Präsentation wird über Firestore synchronisiert:
global/static.currentShowenthält die aktuell ausgewählte Show.- Das Show-Dokument enthält Präsentationsfelder wie
presentationSongId,presentationSection,presentationZoom,presentationBackground,presentationDynamicCaptionundpresentationDynamicText. - Die Remote-Ansicht schreibt diese Werte.
- Die Monitoransicht liest die Werte live und rendert den aktuellen Zustand.
Damit können mehrere Browserfenster über Firestore als gemeinsamen Zustand zusammenarbeiten.
Firebase und Hosting
Die Firebase-Konfiguration wird über src/environments/firebase.ts importiert. environment.ts und environment.prod.ts unterscheiden production, nutzen aber dieselbe URL https://worshipgenerator.web.app.
firebase.json konfiguriert:
- Firestore-Regeln aus
firestore.rules. - Firestore-Indexdatei
firestore.indexes.json. - Hosting aus
dist/wgenerator/browser. - SPA-Rewrite auf
/index.html. - Cache-Header für HTML-Routen und statische JS/CSS-Dateien.
- Emulator-Ports für Firestore, Realtime Database und Hosting.
Build, Tests und Qualität
Angular nutzt den Builder @angular/build:application. LESS ist als Component-Style-Sprache konfiguriert; globale Styles kommen aus src/custom-theme.scss, src/styles/styles.less und src/styles/shadow.less.
Unit-Tests laufen über den Angular Unit-Test-Builder mit Vitest und src/test-vitest.ts als Setup-Datei. Linting läuft über Angular ESLint.