Archived
51 lines
2.2 KiB
Markdown
51 lines
2.2 KiB
Markdown
# 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.
|