Раньше device_types заводились только через сидер — теперь owner может посмотреть все типы (карточки: иконка по категории, capabilities тегами, число устройств этого типа) и добавить новый прямо из интерфейса: код, категория, возможности вводятся тегами (можно вписать вручную и добавить по Enter/кнопке). Ссылка на список — со страницы устройств. DeviceTypePolicy зеркалит остальные Policy (view — всем, create — только owner). DeviceTypeResource получил devices_count через whenCounted — опционально, не ломает существующий API-эндпоинт (там withCount не вызывается, поле просто не появляется).
53 lines
2.1 KiB
PHP
53 lines
2.1 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\AutomationRuleController;
|
|
use App\Http\Controllers\DeviceController;
|
|
use App\Http\Controllers\DeviceTypeController;
|
|
use App\Http\Controllers\ProfileController;
|
|
use App\Http\Controllers\ZoneController;
|
|
use App\Models\AutomationRule;
|
|
use App\Models\Device;
|
|
use App\Models\Zone;
|
|
use App\Services\DeviceShadow;
|
|
use Illuminate\Support\Facades\Route;
|
|
use Inertia\Inertia;
|
|
|
|
Route::get('/', function () {
|
|
return view('welcome');
|
|
});
|
|
|
|
Route::get('/dashboard', function (DeviceShadow $shadow) {
|
|
$devices = Device::all();
|
|
$onlineCount = collect($shadow->statuses($devices->pluck('external_id')->all()))
|
|
->filter(fn (string $status) => $status === 'online')
|
|
->count();
|
|
|
|
return Inertia::render('Dashboard', [
|
|
'zonesCount' => Zone::count(),
|
|
'devicesCount' => $devices->count(),
|
|
'onlineDevicesCount' => $onlineCount,
|
|
'activeRulesCount' => AutomationRule::where('is_active', true)->count(),
|
|
]);
|
|
})->middleware(['auth', 'verified'])->name('dashboard');
|
|
|
|
Route::middleware(['auth', 'verified'])->group(function () {
|
|
Route::resource('zones', ZoneController::class);
|
|
Route::resource('devices', DeviceController::class);
|
|
Route::resource('device-types', DeviceTypeController::class)->only(['index', 'create', 'store']);
|
|
Route::resource('automation-rules', AutomationRuleController::class)
|
|
->except('show')
|
|
->parameters(['automation-rules' => 'automation_rule']);
|
|
|
|
Route::post('/devices/{device}/turn-on', [DeviceController::class, 'turnOn'])->name('devices.turn-on');
|
|
Route::post('/devices/{device}/turn-off', [DeviceController::class, 'turnOff'])->name('devices.turn-off');
|
|
Route::post('/devices/{device}/set-level', [DeviceController::class, 'setLevel'])->name('devices.set-level');
|
|
});
|
|
|
|
Route::middleware('auth')->group(function () {
|
|
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
|
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
|
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
|
|
});
|
|
|
|
require __DIR__.'/auth.php';
|