package handler import ( "encoding/json" "log/slog" "net/http" "strings" ) func writeJSON(w http.ResponseWriter, status int, v any) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) _ = json.NewEncoder(w).Encode(v) } func writeError(w http.ResponseWriter, status int, msg string) { writeJSON(w, status, map[string]string{"error": msg}) } func writeInternalError(w http.ResponseWriter, r *http.Request, err error, msg string) { slog.Error("http error", "method", r.Method, "path", r.URL.Path, "err", err) writeError(w, http.StatusInternalServerError, msg) } func decodeJSON(r *http.Request, v any) error { defer r.Body.Close() return json.NewDecoder(r.Body).Decode(v) } func csvHeader(r *http.Request, key string) []string { raw := r.Header.Get(key) if raw == "" { return nil } parts := strings.Split(raw, ",") out := make([]string, 0, len(parts)) for _, p := range parts { p = strings.TrimSpace(p) if p != "" { out = append(out, p) } } return out }