package middleware import ( "net/http" "github.com/charmbracelet/log" "github.com/google/uuid" ) func WithLimit(logger *log.Logger, getLimit func(userID uuid.UUID) (bool, error), next func(w http.ResponseWriter, r *http.Request)) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { ctx := r.Context() userID, err := GetUserID(ctx, logger, w) if err != nil { w.WriteHeader(http.StatusUnauthorized) return } hasReachedLimit, err := getLimit(userID) if err != nil { logger.Error("failed to image limit", "err", err) w.WriteHeader(http.StatusInternalServerError) return } logger.Info("Limits", "hasReachedLimit", hasReachedLimit) if hasReachedLimit { w.WriteHeader(http.StatusTooManyRequests) return } next(w, r) } }