// Package handler — HTTP-обработчики IoT REST API (новый монолит). // // Отличие от старого кода: устройства — в PostgreSQL (таблица iot_devices), // без k8s-клиента и CRD. Телеметрия — через iotpg, как раньше. package handler import ( "encoding/json" "log/slog" "net/http" "time" "github.com/aws/aws-sdk-go-v2/service/sqs" "github.com/gorilla/mux" "gitea.services.ngcloud.ru/Nail/IoT/internal/service/config" "gitea.services.ngcloud.ru/Nail/IoT/internal/service/store" "gitea.services.ngcloud.ru/Nail/IoT/internal/storage/iotpg" ) // Handler — зависимости всех HTTP-обработчиков. type Handler struct { Devices *store.DeviceStore IoTPG *iotpg.IoTPostgresStore SQS *sqs.Client Cfg *config.Config Log *slog.Logger // Version — версия бинарника (ldflags), StartedAt — для админ-статистики. Version string StartedAt time.Time } // 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] }