docs(history): §11 — фикс валидации namespace, doc/device-integration.md, образ v0.1.14

This commit is contained in:
Repinoid
2026-10-11 20:29:40 +03:00
parent 52a93da95d
commit eeee7a5ea2
+24
View File
@@ -262,3 +262,27 @@ payload (не-JSON → строка, 200 КБ → доставлен, 20 соо
Методическая заметка: при повторных прогонах тесты «доставки» надо делать с Методическая заметка: при повторных прогонах тесты «доставки» надо делать с
уникальным payload, иначе срабатывает дедуп и тест ложно падает. уникальным 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`). Применение — за владельцем.