authorize('viewAny', Zone::class); $zones = Zone::withCount('devices')->orderBy('name')->get(); return Inertia::render('Zones/Index', [ 'zones' => ZoneResource::collection($zones)->resolve(), ]); } public function show(Zone $zone, DeviceShadow $shadow) { $this->authorize('view', $zone); $devices = $zone->devices()->with('deviceType')->orderBy('name')->get(); $statuses = $shadow->statuses($devices->pluck('external_id')->all()); $devices->each(fn ($d) => $d->live_status = $statuses[$d->external_id] ?? 'unknown'); return Inertia::render('Zones/Show', [ 'zone' => (new ZoneResource($zone))->resolve(), 'devices' => DeviceResource::collection($devices)->resolve(), ]); } public function create() { $this->authorize('create', Zone::class); return Inertia::render('Zones/Create'); } public function store(ZoneRequest $request) { $request->user()->zones()->create($request->validated()); return redirect()->route('zones.index')->with('status', 'Зона создана.'); } public function edit(Zone $zone) { $this->authorize('update', $zone); return Inertia::render('Zones/Edit', [ 'zone' => (new ZoneResource($zone))->resolve(), ]); } public function update(ZoneRequest $request, Zone $zone) { $zone->update($request->validated()); return redirect()->route('zones.index')->with('status', 'Зона обновлена.'); } public function destroy(Zone $zone) { $this->authorize('delete', $zone); $zone->delete(); return redirect()->route('zones.index')->with('status', 'Зона удалена.'); } }