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'], 404); } 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); } } }