Files
backend_vib360_laravel/app/Http/Controllers/APIS/AdminApi/DeviceController.php
2025-04-24 13:32:49 +05:30

216 lines
7.9 KiB
PHP

<?php
namespace App\Http\Controllers\APIS\AdminApi;
use App\Http\Controllers\Controller;
use App\Http\Requests\CreateDeviceRequest;
use App\Models\Device;
use App\Services\DeviceService;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Log;
use Exception;
use Illuminate\Support\Facades\Validator;
class DeviceController extends Controller
{
protected $deviceService;
public function __construct(DeviceService $deviceService)
{
$this->deviceService = $deviceService;
}
public function createOrUpdateDevice(CreateDeviceRequest $request)
{
try {
$deviceData = [
'name' => $request->name ?? null,
'type' => $request->type ?? null,
'label' => $request->label ?? null,
'version' => $request->version ?? 1,
'customerId' => $request->customerId ?? 1,
'additionalInfo' => $request->additionalInfo ?? [],
'deviceData' => [
'configuration' => ['type' => 'DEFAULT'],
'transportConfiguration' => [
'type' => 'DEFAULT',
'powerMode' => $request->transportConfiguration['powerMode'] ?? 'PSM',
'psmActivityTimer' => $request->transportConfiguration['psmActivityTimer'] ?? 9007199254740991,
'edrxCycle' => $request->transportConfiguration['edrxCycle'] ?? 9007199254740991,
'pagingTransmissionWindow' => $request->transportConfiguration['pagingTransmissionWindow'] ?? 9007199254740991,
]
],
'deviceProfileId' => $request->deviceProfileId ?? 1,
'asset_id' => $request->asset_id ?? 'null',
];
// Optional Fields
// Handle updating existing devices
if (!empty($request->id)) {
$deviceData['id'] = $request->id;
}
if (!empty($request->firmwareId)) {
$deviceData['firmwareId'] = $request->firmwareId;
}
if (!empty($request->softwareId)) {
$deviceData['softwareId'] = $request->softwareId;
}
// Call Service to create/update device
$apiResponse = $this->deviceService->createOrUpdateDevice($deviceData);
// Log::info("API Response: " . json_encode($apiResponse));
// Store device in the database
$device = Device::updateOrCreate(
['id' => $apiResponse['id']['id'] ?? Str::uuid()->toString()],
[
'entity_type' => $apiResponse['id']['entityType'] ?? 'DEVICE',
'created_time' => $apiResponse['createdTime'] ?? now()->timestamp,
'customer_id' => $apiResponse['customerId']['id'] ?? null,
'name' => $apiResponse['name'] ?? null,
'type' => $apiResponse['type'] ?? null,
'label' => $apiResponse['label'] ?? null,
'asset_id' => $request->asset_id ?? 'null',
'device_profile_id' => $apiResponse['deviceProfileId']['id'] ?? null,
'firmware_id' => $apiResponse['firmwareId']['id'] ?? null,
'software_id' => $apiResponse['softwareId']['id'] ?? null,
'version' => $apiResponse['version'] ?? 1,
'tenant_id' => $apiResponse['tenantId']['id'] ?? null,
'device_data' => json_encode($apiResponse['deviceData'] ?? []),
'additional_info' => json_encode($apiResponse['additionalInfo'] ?? [])
]
);
return jsonResponseWithSuccessMessage(
!empty($request->id) ? 'Device updated successfully' : 'Device created successfully',
['device' => $device, 'api_response' => $apiResponse]
);
} catch (Exception $e) {
Log::error("Error: " . $e->getMessage());
$errorResponse = json_decode($e->getMessage(), true);
if (json_last_error() === JSON_ERROR_NONE) {
return jsonResponseWithErrorMessage($errorResponse['message'] ?? 'Something went wrong', 400, $errorResponse);
}
return jsonResponseWithErrorMessage($e->getMessage(), 500);
}
}
// public function listDevices(Request $request)
// {
// try {
// $devices = Device::with('deviceProfile','customer');
// return jsonResponseWithSuccessMessage('Devices fetched successfully', [
// 'devices' => $devices
// ]);
// } catch (Exception $e) {
// Log::error("An error occurred: " . $e->getMessage());
// return jsonResponseWithErrorMessage($e->getMessage(), 500);
// }
// }
public function listDevices(Request $request)
{
try {
$devices = Device::with('deviceProfile', 'customer')->get()->map(function ($device) {
$deviceData = $device->toArray();
unset($deviceData['device_profile'], $deviceData['customer']); // remove full relations
$deviceData['device_profile_name'] = $device->deviceProfile?->name;
$deviceData['customer_name'] = $device->customer?->name;
return $deviceData;
});
return jsonResponseWithSuccessMessage('Devices fetched successfully', [
'devices' => $devices
]);
} catch (Exception $e) {
Log::error("An error occurred: " . $e->getMessage());
return jsonResponseWithErrorMessage($e->getMessage(), 500);
}
}
public function deleteDevice(Request $request)
{
try {
$validator = Validator::make($request->all(), [
'device_id' => 'required|string',
]);
if ($validator->fails()) {
return jsonResponseWithErrorMessage($validator->errors()->first(), 400);
}
$deviceId = $request->input('device_id');
$response = $this->deviceService->deleteDevice(['deviceId' => $deviceId]);
$Device = Device::where('id', $deviceId)->first();
if ($Device) {
$Device->delete();
}
return jsonResponseWithSuccessMessage('Device deleted successfully', ['api_response' => $response]);
} catch (Exception $e) {
Log::error("An error occurred: " . $e->getMessage());
$errorResponse = json_decode($e->getMessage(), true);
if (json_last_error() === JSON_ERROR_NONE) {
return jsonResponseWithErrorMessage($errorResponse['message'] ?? 'Something went wrong', 400, $errorResponse);
}
return jsonResponseWithErrorMessage($e->getMessage(), 500);
}
}
public function devicelistCustomer($customerId)
{
try {
$devices = Device::with('deviceProfile:id,name', 'customer:id,name')
->where('customer_id', $customerId)
->get()
->map(function ($device) {
$deviceArray = $device->toArray();
unset($deviceArray['device_profile'], $deviceArray['customer']);
$deviceArray['customer_name'] = optional($device->customer)->name;
$deviceArray['device_profile_name'] = optional($device->deviceProfile)->name;
return $deviceArray;
});
if ($devices->isEmpty()) {
return response()->json(['message' => 'No devices found for this customer ID'], 200);
}
return jsonResponseWithSuccessMessage('Devices fetched successfully', [
'devices' => $devices
]);
} catch (Exception $e) {
Log::error("An error occurred in customer device listing: " . $e->getMessage());
return jsonResponseWithErrorMessage($e->getMessage(), 500);
}
}
}