Architektur-Überblick
Tech-Stack
Section titled “Tech-Stack”| Bereich | Technologie |
|---|---|
| Backend | NestJS 11, TypeScript, Prisma ORM 6 |
| Datenbank | PostgreSQL 16 (Multi-Tenant via tenantId) |
| Cache/Queue | Redis 7 |
| Web-Frontend | Next.js (App Router) mit Tenant-Subdomains |
| Mobile | Expo / React Native (Eltern-App) |
| E2E-Tests | Playwright |
| Dokumentation | Astro Starlight (diese Site + Benutzer-Handbuch) |
Monorepo-Struktur
Section titled “Monorepo-Struktur”Das Projekt ist ein pnpm-Monorepo. Jeder Workspace ist klar abgegrenzt:
| Workspace | Pfad | Zweck |
|---|---|---|
| API | api/ |
NestJS-Backend — REST-API, Geschäftslogik, Datenbankzugriff |
| Web | web/ |
Next.js-Frontend — Verwaltungsoberfläche und Elternportal |
| Mobile | mobile/ |
Expo/React-Native-App für Eltern |
| Shared | shared/ |
Geteilte TypeScript-Typen und Utilities (@flowgeist-kita/shared) |
| E2E | e2e/ |
Playwright-Test-Suites (API, Web, Mobile) |
| Docs-Site | docs-site/ |
Endbenutzer-Handbuch (eigenes Lockfile, kein Workspace-Member) |
| Dev-Docs | dev-docs/ |
Diese Entwickler-Dokumentation (eigenes Lockfile, kein Workspace-Member) |
API-Modulstruktur
Section titled “API-Modulstruktur”Die API ist in fachliche Module unter api/src/modules/<name>/ gegliedert —
z. B. kinder, beitraege, betreuungsvertraege, elternportal, tagespflege.
Jedes Modul kapselt Controller, Services und DTOs.
Querschnittliche Funktionalität (Auth, Tenant-Auflösung, Mail, gemeinsame
Utilities) liegt in api/src/common/ und api/src/modules/ für technische
Basis-Module.
Request-Lifecycle
Section titled “Request-Lifecycle”- Tenant-Resolution: Middleware löst den Mandanten aus der Subdomain auf.
- Authentifizierung: JWT-Guard prüft Access-Token, MFA-Status wird für privilegierte Rollen erzwungen.
- Autorisierung: Rollen- und Berechtigungs-Guards prüfen den Zugriff.
- Tenant-Isolation: Ein Interceptor stellt sicher, dass alle Datenbankzugriffe auf den Mandanten-Kontext beschränkt sind.
- Audit: Sicherheitsrelevante Aktionen werden revisionssicher protokolliert.
