-
Notifications
You must be signed in to change notification settings - Fork 0
Code Architektur
Diese Seite ergänzt das Infrastrukturdiagramm um die Struktur innerhalb der Anwendungen.
HTTP/WebSocket
↓
app/api/routes/ Routing, Auth-Abhängigkeiten, Statuscodes
↓
app/services/ Geschäftslogik und Transaktionsabläufe
↓
app/repositories/ SQLAlchemy-Abfragen und Persistenz
↓
app/models/ ORM-Modelle
↕
app/schemas/ Pydantic-Ein-/Ausgabemodelle
Querschnittsfunktionen liegen unter app/core/: Konfiguration, Datenbank, Sessions,
MFA/WebAuthn, Redis, Rate-Limits, Fehlerprotokollierung und Kryptografie.
- Route: Request validieren, Benutzer/Sitzung laden, Service aufrufen, Response-Modell und passenden HTTP-Status definieren.
- Service: Geschäftsregeln, Berechtigungsentscheidungen und mehrere Repositories koordinieren.
- Repository: Daten laden/speichern; keine UI- oder HTTP-Entscheidungen treffen.
- Schema: öffentliche API-Verträge; interne Integer-IDs nicht nach aussen geben.
- Modell: Tabellen, Beziehungen, Constraints und Indizes.
Neue Fachlogik gehört nicht direkt in eine Route, wenn sie unabhängig vom HTTP-Endpunkt testbar oder von mehreren Endpunkten verwendbar ist.
Intern verwendet PostgreSQL Integer-IDs. Extern werden public_id-Werte ausgegeben und
akzeptiert. PublicIdModel übersetzt Modell- und Fremdschlüssel-IDs für Read-Schemas.
Jeder Zugriff auf mandantenbezogene Daten muss den aktuellen Mandanten berücksichtigen. Eine Ressource nur anhand ihrer ID zu laden und anschliessend ungeprüft zu ändern ist ein Cross-Tenant-IDOR. Bestehende Access-Services und tenant-gescopte Repository-Methoden sind zu bevorzugen.
app/ Next.js App-Router, Seiten und Layouts
components/ Fachkomponenten und gemeinsame UI
lib/api/ Browser- und Server-API-Zugriff
lib/hooks/ wiederverwendbare Client-Zustände
lib/offline-store.ts Offline-Pufferung
types/ API-Typen
e2e/ Playwright-Szenarien
Server-Komponenten laden Sitzungsdaten über backendFetchWithSession. Browser-Aufrufe
verwenden relative /api/...-Pfade mit Cookies und sind dadurch auf Haupt- und
Custom-Domains same-origin. Fehler werden als ApiError in die Kategorien offline,
timeout, backend, auth, validation und conflict übersetzt.
REST-Endpunkte bleiben die persistente Quelle für Autosave. Der WebSocket unter
/api/ws/protocols/{id} transportiert Presence, Sperren und Änderungsereignisse.
Redis hält diesen Zustand nur ephemer.
Der Client:
- sendet Heartbeats für gehaltene Sperren;
- verbindet sich mit exponentiellem Backoff neu;
- gleicht Sperren nach Reconnect mit dem Server-Snapshot ab;
- kann weiter über REST speichern, wenn die Kollaborationsverbindung ausfällt;
- puffert dafür geeignete Änderungen im Offline-Store und behandelt Konflikte explizit.
Ein Protokoll übernimmt beim Erstellen einen Snapshot seiner Vorlage. Spätere Vorlagenänderungen dürfen bestehende Protokolle nicht verändern. Live referenzierte Listen-/Verantwortlichkeitswerte werden beim Abschluss eingefroren. Änderungen an diesem Verhalten benötigen Service-, Export- und E2E-Tests.
Der Word-Import besteht aus isoliertem Parsing, Matching/Qualitätsbewertung, Vorschau,
Queue und Commit. Relevante Services liegen unter app/services/word_import_* und
isolated_parse.py. Parser-Ergebnisse dürfen nicht ungeprüft persistiert werden;
Zuordnungen und Schwellenwerte müssen in der Vorschau nachvollziehbar bleiben.
Dateien werden über FileService und konfigurierte Storage-Verzeichnisse verwaltet.
PDF-/Dokumentexporte laufen über ExportService; generierte Ergebnisse sind
regenerierbar und unterliegen Retention. Uploads benötigen Grössenprüfung, MIME- und
Magic-Byte-Prüfung, sichere Pfade, Quota und – je nach Typ – ClamAV-Scan.
Beim FastAPI-Start werden periodische Health-, Rescan-, Export- und Log-Cleanup-Schleifen gestartet. Weil mehrere Uvicorn-Worker laufen können, schützen PostgreSQL-Advisory-Locks vor doppelter Ausführung. Neue periodische Jobs müssen demselben Muster folgen oder eine andere explizite Single-Runner-Garantie besitzen.
- Startseite
-
Entwicklerdokumentation
- Entwickler-Onboarding
- Architektur
- Big Picture
- Code-Architektur
- API-Konventionen
- Datenbank und Migrationen
- Platform-Admin-Panel
- Mandanten-Export und -Import
- Testprozess
- Konfiguration
- Debugging und Observability
- Beitragen und Qualität
- Dokumentationspflege
- Deployment-Runbook
- Sicherheit
- Bekannte offene Punkte