Подсказка external_id из уже увиденных устройств при добавлении
Поле External ID при создании/изменении устройства теперь input+datalist: можно вписать значение вручную (как раньше) или выбрать из подсказок — идентификаторы устройств, от которых device-control-service уже получал MQTT-телеметрию/ack (Redis-множество devices:known), но которые ещё не зарегистрированы в Postgres. Уже зарегистрированные id из списка подсказок исключаются. DeviceShadow::knownExternalIds() — новый read-метод (SMEMBERS devices:known), зеркалит то же множество, что Go-сервисы уже читают/ пишут для health-check/online-детекции.
This commit is contained in:
@@ -59,11 +59,11 @@ class DeviceController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function create()
|
||||
public function create(DeviceShadow $shadow)
|
||||
{
|
||||
$this->authorize('create', Device::class);
|
||||
|
||||
return Inertia::render('Devices/Create', $this->formOptions());
|
||||
return Inertia::render('Devices/Create', $this->formOptions($shadow));
|
||||
}
|
||||
|
||||
public function store(DeviceRequest $request)
|
||||
@@ -75,13 +75,13 @@ class DeviceController extends Controller
|
||||
return redirect()->route('devices.index')->with('status', 'Устройство добавлено.');
|
||||
}
|
||||
|
||||
public function edit(Device $device)
|
||||
public function edit(Device $device, DeviceShadow $shadow)
|
||||
{
|
||||
$this->authorize('update', $device);
|
||||
|
||||
return Inertia::render('Devices/Edit', [
|
||||
'device' => $device->only(['id', 'name', 'zone_id', 'device_type_id', 'external_id', 'protocol']),
|
||||
...$this->formOptions(),
|
||||
...$this->formOptions($shadow),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -150,11 +150,21 @@ class DeviceController extends Controller
|
||||
/**
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
private function formOptions(): array
|
||||
private function formOptions(DeviceShadow $shadow): array
|
||||
{
|
||||
$registeredIds = Device::pluck('external_id')->all();
|
||||
$unregisteredExternalIds = collect($shadow->knownExternalIds())
|
||||
->diff($registeredIds)
|
||||
->sort()
|
||||
->values();
|
||||
|
||||
return [
|
||||
'zones' => ZoneResource::collection(Zone::orderBy('name')->get())->resolve(),
|
||||
'deviceTypes' => DeviceTypeResource::collection(DeviceType::orderBy('code')->get())->resolve(),
|
||||
// external_id of devices device-control-service has already seen
|
||||
// over MQTT but nobody has registered yet — offered as
|
||||
// suggestions (not a closed list) when adding/editing a device.
|
||||
'unregisteredExternalIds' => $unregisteredExternalIds,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user