store.Create классифицирует 23505 по имени constraint: (namespace,device_id) → ErrDeviceIDExists, иначе ErrAlreadyExists. Handler отдаёт разные 409-сообщения. Помогает Terraform понять, какое поле конфликтует.
34 lines
1.2 KiB
Go
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
|
|
}
|