package middleware import ( "context" "net/http" "git.nwaifu.su/sergey/MyGoServer/internal/apiserver/logger" "github.com/google/uuid" ) // requestIDKey is a custom type for context key to avoid collisions type requestIDKey struct{} var _ requestIDKey // RequestIDMiddleware adds a unique request ID to each request func RequestIDMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Generate a new request ID requestID := uuid.New().String() // Set request ID in response header w.Header().Set("X-Request-ID", requestID) // Add request ID to context using custom type ctx := r.Context() ctx = context.WithValue(ctx, requestIDKey{}, requestID) // Log the request ID assignment logger := logger.GetLogger() logger.WithFields(map[string]interface{}{ "request_id": requestID, }).Debug("Request ID assigned") // Continue with the request next.ServeHTTP(w, r.WithContext(ctx)) }) }