// Изменено: 2026-03-07 // Handler — общий контейнер зависимостей для всех REST handlers. // Все handlers получают доступ к k8s, S3 и Postgres через эту структуру. // Логирование через slog, маршрутизация через gorilla/mux. package handler import ( "encoding/json" "log/slog" "net/http" "github.com/gorilla/mux" "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client" "gitea-naeel.giteak8s.services.ngcloud.ru/naeel/sless/internal/storage/postgres" "gitea-naeel.giteak8s.services.ngcloud.ru/naeel/sless/internal/storage/s3" ) // Handler содержит зависимости для всех REST-обработчиков. type Handler struct { K8s client.Client Scheme *runtime.Scheme S3 *s3.Client PG *postgres.Store Log *slog.Logger } // writeJSON отправляет JSON-ответ с указанным статусом. func writeJSON(w http.ResponseWriter, status int, v any) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) _ = json.NewEncoder(w).Encode(v) } // errResp возвращает структуру ошибки для JSON. func errResp(msg string) map[string]string { return map[string]string{"error": msg} } // pathVar читает переменную пути из gorilla/mux. func pathVar(r *http.Request, key string) string { return mux.Vars(r)[key] } // namespace читает {namespace} из пути, fallback — "default". func namespace(r *http.Request) string { if ns := mux.Vars(r)["namespace"]; ns != "" { return ns } return "default" }