[Improvement] Kein Logging, keine Health-Endpunkte, keine CancellationToken #56

Open
opened 2026-09-09 20:17:04 +00:00 by Aceless · 1 comment
Owner

Logging

Im gesamten Backend wird kein ILogger verwendet. Fehlgeschlagene Logins, Rechtefehler, Datenbankfehler und Upload-Probleme hinterlassen keine Spur. Bei einem 500 gibt es ausserhalb der Konsolenausgabe des Frameworks nichts zum Nachsehen.

Vorschlag: strukturiertes Logging (Serilog o. ae.), Correlation-Id je Request, Warn-Log bei jedem abgelehnten Zugriff, Error-Log mit Kontext in der zentralen Fehlerbehandlung.

Health

Es gibt keinen /health-Endpunkt. Docker und der Reverse Proxy koennen nicht feststellen, ob die Anwendung und ihre Datenbankverbindung funktionieren.

Vorschlag: AddHealthChecks().AddNpgSql(connectionString) und MapHealthChecks("/health"), dazu ein HEALTHCHECK im Dockerfile.

CancellationToken

Keine Controller-Action und keine Repository-Methode nimmt einen CancellationToken entgegen. Bricht der Client ab, laufen Datenbankabfragen weiter.

Vorschlag: CancellationToken durchreichen und in CommandDefinition an Dapper uebergeben.

## Logging Im gesamten Backend wird kein `ILogger` verwendet. Fehlgeschlagene Logins, Rechtefehler, Datenbankfehler und Upload-Probleme hinterlassen keine Spur. Bei einem 500 gibt es ausserhalb der Konsolenausgabe des Frameworks nichts zum Nachsehen. **Vorschlag:** strukturiertes Logging (Serilog o. ae.), Correlation-Id je Request, Warn-Log bei jedem abgelehnten Zugriff, Error-Log mit Kontext in der zentralen Fehlerbehandlung. ## Health Es gibt keinen `/health`-Endpunkt. Docker und der Reverse Proxy koennen nicht feststellen, ob die Anwendung und ihre Datenbankverbindung funktionieren. **Vorschlag:** `AddHealthChecks().AddNpgSql(connectionString)` und `MapHealthChecks("/health")`, dazu ein `HEALTHCHECK` im Dockerfile. ## CancellationToken Keine Controller-Action und keine Repository-Methode nimmt einen `CancellationToken` entgegen. Bricht der Client ab, laufen Datenbankabfragen weiter. **Vorschlag:** `CancellationToken` durchreichen und in `CommandDefinition` an Dapper uebergeben.
Author
Owner

Teilweise erledigt.

Logging: ILogger wird jetzt verwendet. Der zentrale Fehler-Handler loggt jeden 500er mit Stacktrace, Methode und Pfad und jede abgelehnte Anfrage als Warnung. Fehlgeschlagene Logins und nicht löschbare Bilddateien werden ebenfalls protokolliert. Ein strukturiertes Logging-Framework mit Correlation-Id ist noch nicht eingerichtet, die TraceId steckt aber bereits in jeder ProblemDetails-Antwort.

Health: GET /health ist da und prüft die Datenbankverbindung über die NpgsqlDataSource. Getestet, liefert Healthy.

CancellationToken: nur dort durchgereicht, wo es ohne Umbau ging, also Bild-Upload und AppInfo. Für die Repositories bräuchte jeder Dapper-Aufruf eine CommandDefinition. Das ist reine Fleißarbeit über rund 40 Aufrufstellen und bleibt offen, damit dieser Änderungssatz überschaubar bleibt.

Bleibt für den CancellationToken-Teil offen.


Branch backend/issue-fixes, Commits 2a1cc95, 026544c.

Teilweise erledigt. **Logging:** `ILogger` wird jetzt verwendet. Der zentrale Fehler-Handler loggt jeden 500er mit Stacktrace, Methode und Pfad und jede abgelehnte Anfrage als Warnung. Fehlgeschlagene Logins und nicht löschbare Bilddateien werden ebenfalls protokolliert. Ein strukturiertes Logging-Framework mit Correlation-Id ist noch nicht eingerichtet, die TraceId steckt aber bereits in jeder ProblemDetails-Antwort. **Health:** `GET /health` ist da und prüft die Datenbankverbindung über die `NpgsqlDataSource`. Getestet, liefert `Healthy`. **CancellationToken:** nur dort durchgereicht, wo es ohne Umbau ging, also Bild-Upload und AppInfo. Für die Repositories bräuchte jeder Dapper-Aufruf eine `CommandDefinition`. Das ist reine Fleißarbeit über rund 40 Aufrufstellen und bleibt offen, damit dieser Änderungssatz überschaubar bleibt. Bleibt für den CancellationToken-Teil offen. --- Branch `backend/issue-fixes`, Commits 2a1cc95, 026544c.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Aceless/RecipePlanner#56
No description provided.