package middleware import ( "log" "net/http" "runtime/debug" ) // Recovery middleware to catch panics, log them, and return a 500 error func Recovery() Middleware { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { defer func() { if err := recover(); err != nil { // Log the stack trace log.Printf("PANIC: %v\n%s", err, debug.Stack()) // Return a 500 Internal Server Error response w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("Internal Server Error")) } }() next.ServeHTTP(w, r) }) } }