50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
// 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]
|
|
}
|