Files
Repinoid 3a73207abd fix(iot): 409 различает конфликт name vs device_id (ревью)
store.Create классифицирует 23505 по имени constraint: (namespace,device_id) →
ErrDeviceIDExists, иначе ErrAlreadyExists. Handler отдаёт разные 409-сообщения.
Помогает Terraform понять, какое поле конфликтует.
2026-10-10 19:21:47 +03:00

34 lines
1.2 KiB
Go

// Package store — хранилище устройств IoT в PostgreSQL.
//
// Таблица iot_devices заменяет CRD IoTDevice и k8s Secrets старого IoT.
// Устройства: namespace, name, device_id, enabled, mqtt_password, metadata.
package store
import (
"errors"
"time"
)
// ErrNotFound — устройство не найдено.
var ErrNotFound = errors.New("device not found")
// ErrAlreadyExists — конфликт уникальности (namespace, name) или (namespace, device_id).
var ErrAlreadyExists = errors.New("device already exists")
// ErrDeviceIDExists — конфликт именно по (namespace, device_id) (отличается от
// конфликта по name для понятной ошибки API/Terraform, ревью 2026-10-10).
var ErrDeviceIDExists = errors.New("device_id already exists")
// Device — устройство IoT из таблицы iot_devices.
type Device struct {
Namespace string
Name string
DeviceID string
Enabled bool
MQTTPassword string
Metadata map[string]string
Phase string
LastConnected *time.Time
CreatedAt time.Time
}