Добавлен REST API для мобильного приложения (этап 3, без Telegram)
Токен-аутентификация Sanctum (login/logout по устройствам), эндпоинты /api/v1 для зон/устройств/правил автоматизации с тем же RBAC (owner/viewer), что и в веб-версии — контроллеры переиспользуют существующие Policy и FormRequest. Устройства отдают живой статус из Device Shadow (Redis) и историю телеметрии из ClickHouse, плюс управление (turn-on/turn-off/set-level) через device-control-service.
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
<?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,
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user