Токен-аутентификация Sanctum (login/logout по устройствам), эндпоинты /api/v1 для зон/устройств/правил автоматизации с тем же RBAC (owner/viewer), что и в веб-версии — контроллеры переиспользуют существующие Policy и FormRequest. Устройства отдают живой статус из Device Shadow (Redis) и историю телеметрии из ClickHouse, плюс управление (turn-on/turn-off/set-level) через device-control-service.
34 lines
1.0 KiB
PHP
34 lines
1.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Resources;
|
|
|
|
use App\Models\Device;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Resources\Json\JsonResource;
|
|
|
|
/**
|
|
* @mixin Device
|
|
*
|
|
* `devices.status` in Postgres is only a stale snapshot (see migration
|
|
* comment) — Redis (Device Shadow) is authoritative. The controller stamps
|
|
* the live value onto the model as `live_status` before wrapping it here;
|
|
* `status` in the JSON always prefers that when present.
|
|
*/
|
|
class DeviceResource extends JsonResource
|
|
{
|
|
/** @return array<string, mixed> */
|
|
public function toArray(Request $request): array
|
|
{
|
|
return [
|
|
'id' => $this->id,
|
|
'name' => $this->name,
|
|
'external_id' => $this->external_id,
|
|
'protocol' => $this->protocol,
|
|
'status' => $this->live_status ?? $this->status,
|
|
'zone' => new ZoneResource($this->whenLoaded('zone')),
|
|
'device_type' => new DeviceTypeResource($this->whenLoaded('deviceType')),
|
|
'created_at' => $this->created_at,
|
|
];
|
|
}
|
|
}
|