Files
Kontrollverlust/handler.go
T
irrlichtandClaude Opus 5.5 c6ab082f8c SSR-Renderer entfernt, Fokus auf SPA + JSON-API
Die Kernlogik bleibt von der Schnittstelle getrennt; der letzte SSR-Stand
liegt im Tag ssr-archiv. Die Moderationsseite bleibt, liefert Fehler aber
als JSON.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TiXsPUqw7oeomZ8wZrQW5q
2026-09-26 21:28:34 +02:00

36 lines
1.3 KiB
Go

package main
import "net/http"
// handlerFunc ist die Handler-Signatur dieser App: wie http.HandlerFunc, aber
// mit Fehler-Rückgabe. Der Gewinn ist nicht nur Kürze -- die alte Form
// (writeError(...); return) machte ein vergessenes return zu einem stillen Bug:
// der Handler lief weiter und schrieb eine zweite Antwort in denselben
// ResponseWriter. Mit "return err" kann das strukturell nicht mehr passieren.
type handlerFunc func(http.ResponseWriter, *http.Request) error
// api hängt einen fehlerliefernden Handler in chi ein; der Fehler geht als
// JSON über writeAPIError hinaus.
func api(h handlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if err := h(w, r); err != nil {
writeAPIError(w, err)
}
}
}
// guard ist dasselbe für Middlewares: der Prüfschritt liefert einen Fehler,
// statt selbst zu schreiben. Der ResponseWriter wird durchgereicht, weil
// manche Prüfungen vor der Antwort noch Header setzen müssen.
func guard(check func(http.ResponseWriter, *http.Request) error) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if err := check(w, r); err != nil {
writeAPIError(w, err)
return
}
next.ServeHTTP(w, r)
})
}
}