From fbaced66ae673acfcda3a29718773d4276e2a2b6 Mon Sep 17 00:00:00 2001 From: sayaliparab Date: Fri, 28 Mar 2025 20:01:51 +0530 Subject: [PATCH] rulechain --- .../APIS/AdminApi/AssetadmintController.php | 28 +--- .../APIS/AdminApi/RuleChainController.php | 74 ++++++++++ app/Services/RuleChainService.php | 136 ++++++++++++++++++ routes/admin_api.php | 9 +- 4 files changed, 220 insertions(+), 27 deletions(-) create mode 100644 app/Http/Controllers/APIS/AdminApi/RuleChainController.php create mode 100644 app/Services/RuleChainService.php diff --git a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php index c13ac7a..d7ad8f4 100644 --- a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php +++ b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php @@ -92,32 +92,7 @@ class AssetadmintController extends Controller } } - // public function deleteAsset($assetId) - // { - // if (!$assetId) { - // return jsonResponseWithErrorMessage('Asset ID is required', 400); - // } - // $response = $this->adminService->deleteAsset(['assetId' => $assetId]); - // Log::info("Response: " . json_encode($response)); - // if (!is_array($response)) { - // Log::error("Unexpected API response format.", ['response' => $response]); - // return jsonResponseWithErrorMessage('Unexpected API response format', 500); - // } - // if (isset($response['status']) && $response['status'] === 400) { - // Log::error("Failed to delete asset: " . $response['message']); - // return jsonResponseWithErrorMessage($response['message'], 400, $response); - // } - // if (empty($response)) { - // Log::error("API Data is empty, cannot delete asset."); - // return jsonResponseWithErrorMessage('Failed to delete asset', 400); - // } - // $asset = Asset::where('id', $assetId)->first(); - // if ($asset) { - // $asset->delete(); - // } - // return jsonResponseWithSuccessMessage('Asset deleted successfully', ['api_response' => $response]); - // } public function deleteAsset(Request $request) { @@ -127,7 +102,6 @@ class AssetadmintController extends Controller return jsonResponseWithErrorMessage('Asset ID is required', 400); } - // Call the service to delete the asset $response = $this->adminService->deleteAsset(['assetId' => $assetId]); Log::info("Response: " . json_encode($response)); @@ -242,4 +216,6 @@ class AssetadmintController extends Controller 'Assests' => $assets ]); } + + } diff --git a/app/Http/Controllers/APIS/AdminApi/RuleChainController.php b/app/Http/Controllers/APIS/AdminApi/RuleChainController.php new file mode 100644 index 0000000..a98046a --- /dev/null +++ b/app/Http/Controllers/APIS/AdminApi/RuleChainController.php @@ -0,0 +1,74 @@ +ruleChainService = $ruleChainService; + } + + + + public function getRuleChainList(Request $request) + { + try { + $page = $request->get('page', 0); // Default: first page + $pageSize = $request->get('pageSize', 10); // Default: 10 records per page + + $data = $this->ruleChainService->getRuleChains($page, $pageSize); + if (!empty($data['data'])) { + return jsonResponseWithSuccessMessage('Rule chains fetched successfully', $data); + } else { + return jsonResponseWithErrorMessage('No rule chains found', 404); + } + } catch (Exception $e) { + return jsonResponseWithErrorMessage($e->getMessage(), 500); + } + } + + public function exportruleChain(Request $request) + { + try { + $limit = $request->get('limit', 10000); // Default limit: 100 + + $data = $this->ruleChainService->exportRuleChains($limit); + + if (!empty($data['ruleChains'])) { + return jsonResponseWithSuccessMessage('Rule chains exported successfully', $data); + } else { + return jsonResponseWithErrorMessage('No rule chains found', 404); + } + + } catch (Exception $e) { + return jsonResponseWithErrorMessage($e->getMessage(), 500); + } + } + + public function showruleChain($ruleChainId) + { + try { + $data = $this->ruleChainService->getRuleChainById($ruleChainId); + + if (!empty($data)) { + return jsonResponseWithSuccessMessage('Rule chain fetched successfully', $data); + } else { + return jsonResponseWithErrorMessage('No rule chain found', 404); + } + + } catch (Exception $e) { + return jsonResponseWithErrorMessage($e->getMessage(), 500); + } + } + + +} diff --git a/app/Services/RuleChainService.php b/app/Services/RuleChainService.php new file mode 100644 index 0000000..1d3f052 --- /dev/null +++ b/app/Services/RuleChainService.php @@ -0,0 +1,136 @@ +baseUrl = env('THINGSBOARD_URL', 'http://65.0.131.117:8080'); + $this->username = env('THINGSBOARD_USERNAME', 'tenant1@thingsboard.org'); + $this->password = env('THINGSBOARD_PASSWORD', 'tenant1'); + } + + + + + public function getToken() + { + if (Cache::has('thingsboard_token')) { + return Cache::get('thingsboard_token'); + } + + $response = Http::withHeaders([ + 'accept' => 'application/json', + 'Content-Type' => 'application/json', + ]) + ->post("{$this->baseUrl}/api/auth/login", [ + 'username' => $this->username, + 'password' => $this->password, + ]); + + + if ($response->successful()) { + $token = $response->json('token'); + Cache::put('thingsboard_token', $token, now()->addMinutes(15)); + return $token; + } else { + Log::error("ThingsBoard Authentication Failed: " . $response->body()); + throw new Exception('Unable to authenticate with ThingsBoard: ' . $response->body()); + } + } + + + public function getRuleChains($page, $pageSize) + { + try { + $token = $this->getToken(); + + $response = Http::withHeaders([ + 'accept' => 'application/json', + 'Content-Type' => 'application/json', + 'X-Authorization' => "Bearer {$token}", + ])->get("{$this->baseUrl}/api/ruleChains", [ + 'page' => $page, + 'pageSize' => $pageSize, + 'sortProperty' => 'createdTime', + 'sortOrder' => 'DESC' + ]); + + if ($response->successful()) { + return $response->json(); + } else { + Log::error("Failed to fetch rule chains: " . $response->body()); + throw new Exception('Failed to fetch rule chains: ' . $response->body()); + } + + } catch (Exception $e) { + Log::error("Error: " . $e->getMessage()); + throw new Exception('Error while fetching rule chains: ' . $e->getMessage()); + } + } + + public function exportRuleChains($limit) + { + try { + $token = $this->getToken(); + + // Make the export API request + $response = Http::withHeaders([ + 'accept' => 'application/json', + 'Content-Type' => 'application/json', + 'X-Authorization' => "Bearer {$token}", + ])->get("{$this->baseUrl}/api/ruleChains/export", [ + 'limit' => $limit + ]); + + if ($response->successful()) { + return $response->json(); + } else { + Log::error("Failed to export rule chains: " . $response->body()); + throw new Exception('Failed to export rule chains: ' . $response->body()); + } + + } catch (Exception $e) { + Log::error("Error exporting rule chains: " . $e->getMessage()); + throw new Exception('Error exporting rule chains: ' . $e->getMessage()); + } + } + + public function getRuleChainById($ruleChainId) + { + try { + $token = $this->getToken(); + + $response = Http::withHeaders([ + 'accept' => 'application/json', + 'Content-Type' => 'application/json', + 'X-Authorization' => "Bearer {$token}", + ])->get("{$this->baseUrl}/api/ruleChain/{$ruleChainId}"); + + if ($response->successful()) { + return $response->json(); + } else { + Log::error("Failed to fetch rule chain: " . $response->body()); + throw new Exception('Failed to fetch rule chain: ' . $response->body()); + } + + } catch (Exception $e) { + Log::error("Error fetching rule chain: " . $e->getMessage()); + throw new Exception('Error fetching rule chain: ' . $e->getMessage()); + } + } +} diff --git a/routes/admin_api.php b/routes/admin_api.php index d7ddfd5..2ba8b29 100644 --- a/routes/admin_api.php +++ b/routes/admin_api.php @@ -10,7 +10,7 @@ use App\Http\Controllers\APIS\AdminApi\DeviceController; use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\APIS\AdminApi\AssetadmintController; - +use App\Http\Controllers\APIS\AdminApi\RuleChainController; use App\Http\Controllers\APIS\AdminApi\DeviceProfileMasterController; use App\Http\Controllers\APIS\AdminApi\LoginController; @@ -67,3 +67,10 @@ Route::post('/alarm/create-or-update', [AlarmControllerCommon::class, 'createOrU Route::get('/alarm/{id}', [AlarmControllerCommon::class, 'getAlarmById'])->name('get.alarm'); Route::post('/alarm/ack/{id}', [AlarmControllerCommon::class, 'acknowledgeAlarmById'])->name('ack.alarm'); Route::post('/alarm/filter', [AlarmControllerCommon::class, 'filterAlarm'])->name('alarm.filter'); + +//******************************************************* Rule Chain API ******************************************************** +Route::get('/rule-chains', [RuleChainController::class, 'getRuleChainList'])->name('list.RuleChain'); +Route::get('/rule-chains-export', [RuleChainController::class, 'exportruleChain'])->name('export.RuleChain'); +Route::get('/rule-chains/{ruleChainId}', [RuleChainController::class, 'showruleChain'])->name('show.RuleChain'); + +