ultimatepos/Modules/Maintenance/Http/Controllers/Api/V1/IotController.php

52 lines
1.6 KiB
PHP

<?php
namespace Modules\Maintenance\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Maintenance\Models\IotAlert;
use Modules\Maintenance\Models\IotDevice;
use Modules\Maintenance\Services\IotIngestionService;
use Modules\Maintenance\Traits\ResolvesBusiness;
class IotController extends Controller
{
use ResolvesBusiness;
public function index(Request $request)
{
$business = $this->resolveBusiness($request);
if (! $business) {
return $this->jsonError('Business not found.', 404);
}
return $this->jsonSuccess([
'devices' => IotDevice::where('business_id', $business->id)->get(),
'open_alerts' => IotAlert::where('business_id', $business->id)
->where('status', 'open')
->latest('id')
->limit(20)
->get(),
]);
}
public function ingest(Request $request, IotIngestionService $ingestion)
{
$business = $this->resolveBusiness($request);
if (! $business) {
return $this->jsonError('Business not found.', 404);
}
$validated = $request->validate([
'device_uid' => 'required|string',
'readings' => 'required|array',
'readings.*.metric' => 'required|string',
'readings.*.value' => 'required|numeric',
]);
$ingestion->ingest((int) $business->id, $validated['device_uid'], $validated['readings']);
return $this->jsonSuccess(null, 'Telemetry ingested.');
}
}