Токен-аутентификация Sanctum (login/logout по устройствам), эндпоинты /api/v1 для зон/устройств/правил автоматизации с тем же RBAC (owner/viewer), что и в веб-версии — контроллеры переиспользуют существующие Policy и FormRequest. Устройства отдают живой статус из Device Shadow (Redis) и историю телеметрии из ClickHouse, плюс управление (turn-on/turn-off/set-level) через device-control-service.
39 lines
1.9 KiB
PHP
39 lines
1.9 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\Api\V1\AuthController;
|
|
use App\Http\Controllers\Api\V1\AutomationRuleController;
|
|
use App\Http\Controllers\Api\V1\DeviceController;
|
|
use App\Http\Controllers\Api\V1\DeviceTypeController;
|
|
use App\Http\Controllers\Api\V1\ZoneController;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
Route::prefix('v1')->group(function () {
|
|
Route::post('/login', [AuthController::class, 'login']);
|
|
|
|
Route::middleware('auth:sanctum')->group(function () {
|
|
Route::post('/logout', [AuthController::class, 'logout']);
|
|
Route::get('/me', [AuthController::class, 'me']);
|
|
|
|
Route::get('/zones', [ZoneController::class, 'index']);
|
|
Route::post('/zones', [ZoneController::class, 'store']);
|
|
Route::put('/zones/{zone}', [ZoneController::class, 'update']);
|
|
Route::delete('/zones/{zone}', [ZoneController::class, 'destroy']);
|
|
|
|
Route::get('/device-types', [DeviceTypeController::class, 'index']);
|
|
|
|
Route::get('/devices', [DeviceController::class, 'index']);
|
|
Route::post('/devices', [DeviceController::class, 'store']);
|
|
Route::get('/devices/{device}', [DeviceController::class, 'show']);
|
|
Route::put('/devices/{device}', [DeviceController::class, 'update']);
|
|
Route::delete('/devices/{device}', [DeviceController::class, 'destroy']);
|
|
Route::post('/devices/{device}/turn-on', [DeviceController::class, 'turnOn']);
|
|
Route::post('/devices/{device}/turn-off', [DeviceController::class, 'turnOff']);
|
|
Route::post('/devices/{device}/set-level', [DeviceController::class, 'setLevel']);
|
|
|
|
Route::get('/automation-rules', [AutomationRuleController::class, 'index']);
|
|
Route::post('/automation-rules', [AutomationRuleController::class, 'store']);
|
|
Route::put('/automation-rules/{automation_rule}', [AutomationRuleController::class, 'update']);
|
|
Route::delete('/automation-rules/{automation_rule}', [AutomationRuleController::class, 'destroy']);
|
|
});
|
|
});
|