Project to GitHub

This commit is contained in:
2026-06-24 08:33:23 +02:00
commit ecd89a68f8
121 changed files with 6481 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
# Architektur
Die Anwendung trennt Hosts, UI, API, Verträge und Datenbankzugriff strikt.
```text
Bsevita.Library.Maui -> Bsevita.Library.Ui -> Bsevita.Library.Models
Bsevita.Library.Web -> Bsevita.Library.Ui -> Bsevita.Library.Models
Bsevita.Library.Api -> Bsevita.Library.Models
Bsevita.Library.Api -> EF Core -> SQL Server LocalDB
```
## Projekte
- `Bsevita.Library.Models`: gemeinsame Request-/Response-Modelle, keine Datenbankabhängigkeit.
- `Bsevita.Library.Ui`: Razor Class Library mit Seiten, Layouts, Komponenten und API-Clients.
- `Bsevita.Library.Web`: Browser-Host für die UI; registriert `HttpClient` zur lokalen API.
- `Bsevita.Library.Maui`: nativer Host für dieselbe UI; löst die API-Adresse je Plattform auf.
- `Bsevita.Library.Api`: Controller, Services, EF Core und zentrale Fehlerbehandlung.
- `Bsevita.Library.Api.Tests`: API-Workflowtests mit Testdatenbank.
## Datenfluss
1. UI-Seiten rufen typed API-Clients aus `Bsevita.Library.Ui.Services` auf.
2. API-Clients senden HTTP-Requests an `/api/...` und lesen JSON oder ProblemDetails.
3. Controller delegieren an Services; Fachlogik liegt nicht im Controller.
4. Services verwenden `LibraryDbContext` und mappen Entities auf Models.
5. SQL Server speichert das Database-First-Schema aus `database/create_database.sql`.
## Datenbank
`database/create_database.sql` ist die Schema-Quelle. Der generierte EF-Code liegt unter `src/Bsevita.Library.Api/Data/Generated` und wird nicht für Fachlogik erweitert.
Wichtige Regeln liegen zusätzlich in der Datenbank:
- `UX_Students_CardNumber`: eindeutige Ausweisnummern.
- `UX_Books_BookNumber`: eindeutige Buchnummern.
- `UX_Loans_ActiveBook`: höchstens eine aktive Ausleihe pro Buch.
## Transaktionen und Fehler
Ausleihe, Rückgabe und Löschoperationen laufen in serialisierbaren Transaktionen, wenn eine relationale Datenbank verwendet wird. Vor dem Schreiben wird der aktuelle Zustand erneut geprüft.
Fachfehler werden zentral in `application/problem+json` übersetzt. Die UI zeigt diese Fehler über die gemeinsamen API-Clients an.
## Grenzen
- Die UI referenziert weder `Bsevita.Library.Api` noch `LibraryDbContext`.
- API-Verträge sind nicht die EF-Entities.
- Löschen deaktiviert Schüler und Bücher, damit historische Ausleihen erhalten bleiben.