Update template

This commit is contained in:
2025-05-24 08:52:11 +02:00
parent ca8b1a2e46
commit 542d28e7a9
18 changed files with 293 additions and 235 deletions

View File

@@ -0,0 +1,28 @@
package middleware
import (
"net/http"
)
// Middleware is a function that wraps an http.Handler with custom logic.
type Middleware func(http.Handler) http.Handler
// Chain is a helper to build up a pipeline of middlewares, then apply them to a
// final handler.
type Chain struct {
middlewares []Middleware
}
// Use appends a middleware to the chain.
func (c *Chain) Use(m Middleware) {
c.middlewares = append(c.middlewares, m)
}
// Then applies the entire chain of middlewares to the final handler in reverse
// order.
func (c *Chain) Then(h http.Handler) http.Handler {
for i := len(c.middlewares) - 1; i >= 0; i-- {
h = c.middlewares[i](h)
}
return h
}

View File

@@ -0,0 +1,18 @@
package middleware
import (
"log/slog"
"net/http"
)
func RecoverMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if err := recover(); err != nil {
slog.Error("Recovered from panic", "error", err)
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
}
}()
next.ServeHTTP(w, r)
})
}