diff --git a/HISTORY/2026-10-11-session-log.md b/HISTORY/2026-10-11-session-log.md index f9636cf..0a69475 100644 --- a/HISTORY/2026-10-11-session-log.md +++ b/HISTORY/2026-10-11-session-log.md @@ -262,3 +262,27 @@ payload (не-JSON → строка, 200 КБ → доставлен, 20 соо Методическая заметка: при повторных прогонах тесты «доставки» надо делать с уникальным payload, иначе срабатывает дедуп и тест ложно падает. + +## 11. Правки по итогам §10 (2026-10-11) + +1. **Валидация namespace во всех эндпоинтах.** Добавлены хелперы + `namespaceFromPath` / `requireNamespace` (`handler.go`); `ListIoTDevices`, + `GetIoTDevice`, `DeleteIoTDevice`, `UpdateIoTDevice`, `ListIoTTelemetry` + теперь отвечают `400` на невалидный `{namespace}` (раньше отдавали 200, а + телеметрия падала в хранилище с 500). `CreateIoTDevice` оставлен с прежним + порядком (JSON → валидация), текст ошибки не изменился. + Регрессионные тесты: `internal/service/api/handler/namespace_test.go` + (8 невалидных ns × 5 обработчиков; пустой ns → `default`). + `go build/vet/test -race ./...` — зелёные. +2. **Документ для интеграторов:** `doc/device-integration.md` — регистрация + устройства, MQTT (`wss`, username/topic), ACL-ограничения, + ⚠️ **требование ts/seq в payload** (дедуп по содержимому), лимиты + (1 МБ пакет, 250 КБ envelope), QoS1, чтение телеметрии, реальная задержка + «MQTT → API» до ~20 с (long-poll консьюмера). + +Собрано и опубликовано: образ `iot-service:v0.1.14` +(`latest`, `v0.1.13`, `v0.1.14` в Gitea). Проверено живым подом `iot-verify` +(удалён): `/health` → 200 `v0.1.14`; `bad_ns` для списка/телеметрии/карточки → +`400 {"error":"namespace must match [a-zA-Z0-9][a-zA-Z0-9-]* …"}`; валидный +`e2e-nubes` → 200. `terraform plan` = **0 to add, 1 to change** (registry_path +`v0.1.13` → `v0.1.14`). Применение — за владельцем.