feat: some refactoring

This commit is contained in:
2025-11-22 22:23:49 +03:00
parent a247e6213e
commit 51f30b516e
29 changed files with 1094 additions and 129 deletions

View File

@@ -0,0 +1,42 @@
package middleware
import (
"context"
"net/http"
"time"
"git.nwaifu.su/sergey/MyGoServer/internal/apiserver/logger"
rhttp "git.nwaifu.su/sergey/MyGoServer/pkg/http"
)
// LoggingMiddleware logs HTTP requests
func LoggingMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
// Use the custom response writer to capture status code
rw := rhttp.NewResponseWriter(w)
next.ServeHTTP(rw, r)
// Log the request
logger := logger.GetLogger()
logger.WithFields(map[string]interface{}{
"method": r.Method,
"uri": r.RequestURI,
"remote_addr": r.RemoteAddr,
"user_agent": r.UserAgent(),
"status_code": rw.GetStatusCode(),
"duration": time.Since(start).String(),
"request_id": getRequestID(r.Context()),
}).Info("HTTP request")
})
}
// getRequestID retrieves request ID from context
func getRequestID(ctx context.Context) string {
if id, ok := ctx.Value("request_id").(string); ok {
return id
}
return ""
}

View File

@@ -0,0 +1,33 @@
package middleware
import (
"context"
"net/http"
"git.nwaifu.su/sergey/MyGoServer/internal/apiserver/logger"
"github.com/google/uuid"
)
// 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
ctx := r.Context()
ctx = context.WithValue(ctx, "request_id", 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))
})
}