From 13bae520e5b868cccfb68b87876d5ee4ac3533f7 Mon Sep 17 00:00:00 2001 From: sayliraut Date: Wed, 16 Apr 2025 17:30:22 +0530 Subject: [PATCH 01/23] change in device --- app/Http/Controllers/APIS/AdminApi/DeviceController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/APIS/AdminApi/DeviceController.php b/app/Http/Controllers/APIS/AdminApi/DeviceController.php index c32f32e..7f4df0b 100644 --- a/app/Http/Controllers/APIS/AdminApi/DeviceController.php +++ b/app/Http/Controllers/APIS/AdminApi/DeviceController.php @@ -47,6 +47,7 @@ class DeviceController extends Controller ] ], 'deviceProfileId' => $request->deviceProfileId ?? 1, + 'asset_id' => $request->asset_id ?? 'a5daeb60-f36c-11ef-a9dc-45dd276e4cd5', ]; @@ -79,7 +80,7 @@ class DeviceController extends Controller 'name' => $apiResponse['name'] ?? null, 'type' => $apiResponse['type'] ?? null, 'label' => $apiResponse['label'] ?? null, - 'asset_id' => $apiResponse['asset_id'] ?? 'a5daeb60-f36c-11ef-a9dc-45dd276e4cd5', + 'asset_id' => $request->asset_id ?? 'a5daeb60-f36c-11ef-a9dc-45dd276e4cd5', 'device_profile_id' => $apiResponse['deviceProfileId']['id'] ?? null, 'firmware_id' => $apiResponse['firmwareId']['id'] ?? null, 'software_id' => $apiResponse['softwareId']['id'] ?? null, From fbe24a8651ab33d6be80f2434f2afd43306bad27 Mon Sep 17 00:00:00 2001 From: sayliraut Date: Wed, 16 Apr 2025 17:51:17 +0530 Subject: [PATCH 03/23] change in device validation --- app/Http/Requests/CreateDeviceRequest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Requests/CreateDeviceRequest.php b/app/Http/Requests/CreateDeviceRequest.php index 751e989..04ae6b5 100644 --- a/app/Http/Requests/CreateDeviceRequest.php +++ b/app/Http/Requests/CreateDeviceRequest.php @@ -27,7 +27,7 @@ class CreateDeviceRequest extends FormRequest return [ 'name' => 'required|string', - 'type' => 'required|string|max:255', + // 'type' => 'required|string|max:255', 'label' => 'required|string|max:255', 'customerId' => 'required', From f32d6763227a00383ac3d366c17510571ab56208 Mon Sep 17 00:00:00 2001 From: sayliraut Date: Mon, 21 Apr 2025 14:43:49 +0530 Subject: [PATCH 04/23] change in asset list by customer id --- app/Http/Controllers/APIS/AdminApi/AssetadmintController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php index dbb4627..8ddc97f 100644 --- a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php +++ b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php @@ -346,7 +346,7 @@ class AssetadmintController extends Controller }); if ($assets->isEmpty()) { - return response()->json(['message' => 'No assets found for this customer ID'], 404); + return response()->json(['message' => 'No assets found for this customer ID'], 200); } return jsonResponseWithSuccessMessage('Assets fetched successfully', [ From 8a529bbaa999f914b25684cfb7b53eae7b2bca3b Mon Sep 17 00:00:00 2001 From: sayliraut Date: Tue, 22 Apr 2025 15:53:42 +0530 Subject: [PATCH 05/23] change --- app/Http/Controllers/APIS/AdminApi/DeviceController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/DeviceController.php b/app/Http/Controllers/APIS/AdminApi/DeviceController.php index 7f4df0b..e845c7e 100644 --- a/app/Http/Controllers/APIS/AdminApi/DeviceController.php +++ b/app/Http/Controllers/APIS/AdminApi/DeviceController.php @@ -47,7 +47,7 @@ class DeviceController extends Controller ] ], 'deviceProfileId' => $request->deviceProfileId ?? 1, - 'asset_id' => $request->asset_id ?? 'a5daeb60-f36c-11ef-a9dc-45dd276e4cd5', + 'asset_id' => $request->asset_id ?? 'null', ]; @@ -80,7 +80,7 @@ class DeviceController extends Controller 'name' => $apiResponse['name'] ?? null, 'type' => $apiResponse['type'] ?? null, 'label' => $apiResponse['label'] ?? null, - 'asset_id' => $request->asset_id ?? 'a5daeb60-f36c-11ef-a9dc-45dd276e4cd5', + '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, From 773626a0b3c8f6c14d0bd004e6f55703f2811674 Mon Sep 17 00:00:00 2001 From: sayliraut Date: Wed, 23 Apr 2025 12:31:37 +0530 Subject: [PATCH 06/23] changes in create user function --- .../APIS/AdminApi/UsersController.php | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/UsersController.php b/app/Http/Controllers/APIS/AdminApi/UsersController.php index e6c53e2..131488f 100644 --- a/app/Http/Controllers/APIS/AdminApi/UsersController.php +++ b/app/Http/Controllers/APIS/AdminApi/UsersController.php @@ -9,6 +9,7 @@ use App\Mail\Admin\UserCreatedMail; use App\Models\User; use App\Services\AdminService; use Exception; +use Faker\Guesser\Name; use Illuminate\Database\QueryException; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Log; @@ -213,17 +214,17 @@ class UsersController extends Controller // Validation rules (include all fields) $validator = Validator::make($request->all(), [ 'email' => 'required|email|unique:users,email', - 'authority' => 'required|string|in:CUSTOMER_USER,TENANT_ADMIN,SYS_ADMIN', - 'tenant_id' => 'required|uuid', - 'customer_id' => 'nullable|uuid', - 'first_name' => 'required|string|max:255', - 'last_name' => 'required|string|max:255', - 'phone' => 'nullable|string|max:20', + // 'authority' => 'required|string|in:CUSTOMER_USER,TENANT_ADMIN,SYS_ADMIN', + // 'tenant_id' => 'required|uuid', + // 'customer_id' => 'nullable|uuid', + // 'first_name' => 'required|string|max:255', + // 'last_name' => 'required|string|max:255', + // 'phone' => 'nullable|string|max:20', 'name' => 'nullable|string|max:255', - 'description' => 'nullable|string', - 'default_dashboard_id' => 'nullable', - 'home_dashboard_id' => 'nullable', - 'version' => 'nullable|integer', + // 'description' => 'nullable|string', + // 'default_dashboard_id' => 'nullable', + // 'home_dashboard_id' => 'nullable', + // 'version' => 'nullable|integer', // Add validation for other fields as needed ]); @@ -243,17 +244,17 @@ class UsersController extends Controller $user = User::create([ 'id' => $userId, 'email' => $request->email, - 'authority' => $request->authority, - 'tenant_id' => $request->tenant_id, - 'customer_id' => $request->customer_id, - 'first_name' => $request->first_name, - 'last_name' => $request->last_name, - 'phone' => $request->phone, - 'name' => $request->name ?? "{$request->first_name} {$request->last_name}", - 'description' => $request->description, - 'default_dashboard_id' => $request->default_dashboard_id, + 'authority' => $request->authority ?? 'CUSTOMER_USER', + 'tenant_id' => $request->tenant_id ?? null, + 'customer_id' => $request->customer_id ?? null, + 'first_name' => $request->first_name ?? $request->name, + 'last_name' => $request->last_name ?? $request->name, + 'phone' => $request->phone ?? null, + 'name' => $request->name ?? null, + 'description' => $request->description ?? null, + 'default_dashboard_id' => $request->default_dashboard_id ?? null, 'default_dashboard_fullscreen' => $request->default_dashboard_fullscreen ?? false, - 'home_dashboard_id' => $request->home_dashboard_id, + 'home_dashboard_id' => $request->home_dashboard_id ?? null, 'home_dashboard_hide_toolbar' => $request->home_dashboard_hide_toolbar ?? false, 'user_credentials_enabled' => $request->user_credentials_enabled ?? false, 'failed_login_attempts' => $request->failed_login_attempts ?? 0, From 4aa3f03930cb8f008dcff0307b9722d1f6670c54 Mon Sep 17 00:00:00 2001 From: sayliraut Date: Wed, 23 Apr 2025 14:45:29 +0530 Subject: [PATCH 07/23] change in create user --- .../APIS/AdminApi/UsersController.php | 16 ++++++++-------- app/Services/AdminService.php | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/UsersController.php b/app/Http/Controllers/APIS/AdminApi/UsersController.php index 131488f..a54c5cf 100644 --- a/app/Http/Controllers/APIS/AdminApi/UsersController.php +++ b/app/Http/Controllers/APIS/AdminApi/UsersController.php @@ -217,10 +217,10 @@ class UsersController extends Controller // 'authority' => 'required|string|in:CUSTOMER_USER,TENANT_ADMIN,SYS_ADMIN', // 'tenant_id' => 'required|uuid', // 'customer_id' => 'nullable|uuid', - // 'first_name' => 'required|string|max:255', - // 'last_name' => 'required|string|max:255', + 'first_name' => 'required|string|max:255', + 'last_name' => 'required|string|max:255', // 'phone' => 'nullable|string|max:20', - 'name' => 'nullable|string|max:255', + // 'name' => 'nullable|string|max:255', // 'description' => 'nullable|string', // 'default_dashboard_id' => 'nullable', // 'home_dashboard_id' => 'nullable', @@ -247,10 +247,10 @@ class UsersController extends Controller 'authority' => $request->authority ?? 'CUSTOMER_USER', 'tenant_id' => $request->tenant_id ?? null, 'customer_id' => $request->customer_id ?? null, - 'first_name' => $request->first_name ?? $request->name, - 'last_name' => $request->last_name ?? $request->name, + 'first_name' => $request->first_name ?? '', + 'last_name' => $request->last_name ?? '', 'phone' => $request->phone ?? null, - 'name' => $request->name ?? null, + 'name' => $request->name ?? "{$request->first_name} {$request->last_name}", 'description' => $request->description ?? null, 'default_dashboard_id' => $request->default_dashboard_id ?? null, 'default_dashboard_fullscreen' => $request->default_dashboard_fullscreen ?? false, @@ -267,13 +267,13 @@ class UsersController extends Controller $serviceData = [ 'email' => $request->email, - 'authority' => $request->authority, + 'authority' => $request->authority ?? null, 'firstName' => $request->first_name, 'lastName' => $request->last_name, 'phone' => $request->phone, 'name' => $request->name ?? "{$request->first_name} {$request->last_name}", 'description' => $request->description, - 'tenant_id' => $request->tenant_id, + 'tenant_id' => 'bbab7c17-2f19-4eff-9ce7-63870e02b522', 'customer_id' => $request->customer_id ]; diff --git a/app/Services/AdminService.php b/app/Services/AdminService.php index 7e6915d..8ec4a60 100644 --- a/app/Services/AdminService.php +++ b/app/Services/AdminService.php @@ -273,7 +273,7 @@ class AdminService 'name' => $data['name'] ?? ($data['first_name'] . ' ' . $data['last_name'] ?? ''), 'phone' => $data['phone'] ?? '', 'tenantId' => [ - 'id' => $data['tenant_id'], + 'id' => 'bbab7c17-2f19-4eff-9ce7-63870e02b522', 'entityType' => 'TENANT' ], 'additionalInfo' => [ From d79dabbbaf9db76c7a5cf47fa57770712b684264 Mon Sep 17 00:00:00 2001 From: kshitige Date: Wed, 23 Apr 2025 16:44:25 +0530 Subject: [PATCH 08/23] school --- app/Http/Controllers/APIS/AdminApi/DeviceController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/APIS/AdminApi/DeviceController.php b/app/Http/Controllers/APIS/AdminApi/DeviceController.php index c32f32e..b4fc78d 100644 --- a/app/Http/Controllers/APIS/AdminApi/DeviceController.php +++ b/app/Http/Controllers/APIS/AdminApi/DeviceController.php @@ -180,7 +180,7 @@ class DeviceController extends Controller public function devicelistCustomer($customerId) - { + { try { $devices = Device::with('deviceProfile:id,name', 'customer:id,name') ->where('customer_id', $customerId) From d07dc2fd6a1efa51be01b4e283622428286fafde Mon Sep 17 00:00:00 2001 From: kshitige Date: Wed, 23 Apr 2025 16:55:25 +0530 Subject: [PATCH 09/23] school --- app/Services/AdminService.php | 36 +++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/app/Services/AdminService.php b/app/Services/AdminService.php index 8ec4a60..84f448c 100644 --- a/app/Services/AdminService.php +++ b/app/Services/AdminService.php @@ -490,12 +490,42 @@ class AdminService } } + // public function activateUser(User $user, string $password, string $activateToken) + // { + // try { + // $payload = [ + // 'activateToken' => $activateToken, + // 'password' => $password + // ]; + + // $activationUrl = "{$this->baseUrl}/api/noauth/activate"; + + // $response = Http::withHeaders([ + // 'Content-Type' => 'application/json', + // ])->post($activationUrl, $payload); + + // if (!$response->successful()) { + // Log::error("Failed to activate user in ThingsBoard. Error: " . $response->body()); + // throw new \Exception('Failed to activate user: ' . $response->body()); + // } + + // Log::info("User activated successfully in ThingsBoard for User ID: {$user->id}"); + // } catch (\Exception $e) { + // Log::error("Error activating user in ThingsBoard for User ID: {$user->id}. Exception: " . $e->getMessage()); + // throw $e; + // } + // } + + public function activateUser(User $user, string $password, string $activateToken) { try { + $dummyEmail = 'dummy+' . $user->id . '@example.com'; // unique dummy email + $payload = [ 'activateToken' => $activateToken, - 'password' => $password + 'password' => $password, + 'email' => $dummyEmail // send dummy email to ThingsBoard ]; $activationUrl = "{$this->baseUrl}/api/noauth/activate"; @@ -509,7 +539,7 @@ class AdminService throw new \Exception('Failed to activate user: ' . $response->body()); } - Log::info("User activated successfully in ThingsBoard for User ID: {$user->id}"); + Log::info("User activated in ThingsBoard with dummy email: {$dummyEmail} for User ID: {$user->id}"); } catch (\Exception $e) { Log::error("Error activating user in ThingsBoard for User ID: {$user->id}. Exception: " . $e->getMessage()); throw $e; @@ -517,8 +547,6 @@ class AdminService } - - public function getUserByEmailThingsBoard(string $email) { Log::info("Fetching ThingsBoard ID by email: $email"); From 494d7b7ea50ba8f4b2eed49d4d68a90d8d463393 Mon Sep 17 00:00:00 2001 From: kshitige Date: Wed, 23 Apr 2025 19:43:24 +0530 Subject: [PATCH 10/23] email thingsboard --- .../APIS/AdminApi/UsersController.php | 90 +++++++++++++++++-- app/Services/AdminService.php | 56 ++++++++++-- 2 files changed, 129 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/UsersController.php b/app/Http/Controllers/APIS/AdminApi/UsersController.php index a54c5cf..d3a3823 100644 --- a/app/Http/Controllers/APIS/AdminApi/UsersController.php +++ b/app/Http/Controllers/APIS/AdminApi/UsersController.php @@ -404,6 +404,78 @@ class UsersController extends Controller + // public function activate(Request $request, $id) + // { + // Log::info('Full Request URL: ' . $request->fullUrl()); + + // try { + // $user = User::find($id); + + // if (!$user) { + // Log::error("User not found for ID: {$id}"); + // return response()->json([ + // 'status' => false, + // 'message' => 'User not found.' + // ], 404); + // } + + // $token = $request->query('token'); + // if (!$token) { + // Log::error("Token missing for User ID: {$id}"); + // return response()->json([ + // 'status' => false, + // 'message' => 'Invalid activation link.' + // ], 401); + // } + + // // Update password in Laravel + // $user->password = Hash::make('password'); + // $user->save(); + // Log::info("Password updated for User ID: {$id} in Laravel."); + + // // Activate user in ThingsBoard + // $activateToken = $token; + // $password = 'password'; + + // try { + // $this->adminService->activateUser($user, $password, $activateToken); + // Log::info("User ID: {$id} activated successfully in ThingsBoard."); + + // return response()->json([ + // 'status' => true, + // 'message' => 'User activated and password updated successfully!', + // 'user_id' => $user->id + // ], 200); + + // } catch (\Exception $e) { + // Log::error("ThingsBoard activation failed: " . $e->getMessage()); + + // // If token is invalid or user is already activated, skip activation + // if (str_contains($e->getMessage(), 'Unable to find user credentials')) { + // return response()->json([ + // 'status' => true, + // 'message' => 'User is already activated. Password updated successfully.' + // ], 200); + // } + + // return response()->json([ + // 'status' => false, + // 'message' => 'Failed to activate user in ThingsBoard.', + // 'error' => $e->getMessage() + // ], 500); + // } + + // } catch (\Exception $e) { + // Log::error("Error activating user ID: {$id}. Exception: " . $e->getMessage()); + // return response()->json([ + // 'status' => false, + // 'message' => 'An error occurred. Please try again later.', + // 'error' => $e->getMessage() + // ], 500); + // } + // } + + public function activate(Request $request, $id) { Log::info('Full Request URL: ' . $request->fullUrl()); @@ -433,28 +505,31 @@ class UsersController extends Controller $user->save(); Log::info("Password updated for User ID: {$id} in Laravel."); - // Activate user in ThingsBoard - $activateToken = $token; - $password = 'password'; + // Dummy email for ThingsBoardg + // $dummyEmail = 'dummy+' . $user->id . '@example.com'; try { - $this->adminService->activateUser($user, $password, $activateToken); + $this->adminService->activateUser($user, 'password', $token); Log::info("User ID: {$id} activated successfully in ThingsBoard."); return response()->json([ 'status' => true, 'message' => 'User activated and password updated successfully!', - 'user_id' => $user->id + 'user_id' => $user->id, + 'real_email' => $user->email, + // 'tb_email' => $dummyEmail ], 200); } catch (\Exception $e) { Log::error("ThingsBoard activation failed: " . $e->getMessage()); - // If token is invalid or user is already activated, skip activation if (str_contains($e->getMessage(), 'Unable to find user credentials')) { return response()->json([ 'status' => true, - 'message' => 'User is already activated. Password updated successfully.' + 'message' => 'User is already activated. Password updated successfully.', + 'user_id' => $user->id, + 'real_email' => $user->email, + // 'tb_email' => $dummyEmail ], 200); } @@ -479,7 +554,6 @@ class UsersController extends Controller - // public function autoLogin(Request $request) // { // $request->validate([ diff --git a/app/Services/AdminService.php b/app/Services/AdminService.php index 84f448c..613c315 100644 --- a/app/Services/AdminService.php +++ b/app/Services/AdminService.php @@ -263,10 +263,15 @@ class AdminService if (!isset($data['tenant_id'])) { throw new \Exception('tenant_id is required'); } + static $counter = 1; + $email = "dummy{$counter}@example.com"; + $counter++; + // Prepare the payload with required fields $payload = [ - 'email' => $data['email'] ?? '', + + 'email' => $email, 'authority' => $data['authority'] ?? 'CUSTOMER_USER', 'firstName' => $data['first_name'] ?? '', 'lastName' => $data['last_name'] ?? '', @@ -520,33 +525,66 @@ class AdminService public function activateUser(User $user, string $password, string $activateToken) { try { - $dummyEmail = 'dummy+' . $user->id . '@example.com'; // unique dummy email + // $dummyEmail = 'dummy+' . $user->id . '@example.com'; + $token = $this->getToken(); - $payload = [ + // Step 1: Search for existing user by real email + $searchResponse = Http::withHeaders([ + 'Authorization' => "Bearer $token", + 'accept' => 'application/json' + ])->get("{$this->baseUrl}/api/users?pageSize=1&page=0&textSearch={$user->email}"); + + if ($searchResponse->successful() && !empty($searchResponse['data'])) { + $tbUser = $searchResponse['data'][0]; + $tbUserId = $tbUser['id']['id']; + + // Step 2: Update user email to dummy email + Http::withHeaders([ + 'Authorization' => "Bearer $token", + 'Content-Type' => 'application/json' + ])->post("{$this->baseUrl}/api/user", [ + 'id' => ['id' => $tbUserId], + // 'email' => $dummyEmail, + 'authority' => $tbUser['authority'], + 'firstName' => $tbUser['firstName'] ?? '', + 'lastName' => $tbUser['lastName'] ?? '', + 'tenantId' => $tbUser['tenantId'], + 'customerId' => $tbUser['customerId'], + 'additionalInfo' => $tbUser['additionalInfo'] ?? null, + ]); + + // Log::info("ThingsBoard user email updated to dummy: {$dummyEmail}"); + } + + // Step 3: Activate account using dummy email + $activationPayload = [ 'activateToken' => $activateToken, 'password' => $password, - 'email' => $dummyEmail // send dummy email to ThingsBoard + // 'email' => $dummyEmail ]; $activationUrl = "{$this->baseUrl}/api/noauth/activate"; $response = Http::withHeaders([ 'Content-Type' => 'application/json', - ])->post($activationUrl, $payload); + ])->post($activationUrl, $activationPayload); if (!$response->successful()) { - Log::error("Failed to activate user in ThingsBoard. Error: " . $response->body()); + Log::error("Activation failed. Response: " . $response->body()); throw new \Exception('Failed to activate user: ' . $response->body()); } - Log::info("User activated in ThingsBoard with dummy email: {$dummyEmail} for User ID: {$user->id}"); + // Log::info("User activated in ThingsBoard with dummy email: {$dummyEmail}"); + } catch (\Exception $e) { - Log::error("Error activating user in ThingsBoard for User ID: {$user->id}. Exception: " . $e->getMessage()); + Log::error("Error during ThingsBoard activation. Exception: " . $e->getMessage()); throw $e; } } + + public function getUserByEmailThingsBoard(string $email) { Log::info("Fetching ThingsBoard ID by email: $email"); @@ -611,4 +649,4 @@ class AdminService throw new Exception('Failed to fetch users: ' . $response->body()); } } -} +} \ No newline at end of file From e3f1a2816d343a66df4323a941a9a1cbe775ed40 Mon Sep 17 00:00:00 2001 From: sayliraut Date: Thu, 24 Apr 2025 12:37:42 +0530 Subject: [PATCH 11/23] Change in filter alarm --- app/Http/Controllers/AlarmControllerCommon.php | 7 +++---- app/Services/AlarmService.php | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/AlarmControllerCommon.php b/app/Http/Controllers/AlarmControllerCommon.php index 5f222f5..1c243a9 100644 --- a/app/Http/Controllers/AlarmControllerCommon.php +++ b/app/Http/Controllers/AlarmControllerCommon.php @@ -212,8 +212,6 @@ class AlarmControllerCommon extends Controller public function filterAlarm(Request $request) { try { - $token = readHeaderToken(); - $useId = $token['sub']; $alarmData = $request->only([ 'severity', @@ -222,10 +220,11 @@ class AlarmControllerCommon extends Controller 'startTs', 'endTs', 'deviceId', - 'assetId' + 'assetId', + 'assignId', ]); - $apiResponse = $this->alarmService->filterAlarm($alarmData, $useId); + $apiResponse = $this->alarmService->filterAlarm($alarmData); return jsonResponseWithSuccessMessage('Alarm data retrieved successfully', ['api_response' => $apiResponse]); } catch (Exception $e) { diff --git a/app/Services/AlarmService.php b/app/Services/AlarmService.php index a7a1fe4..74614aa 100644 --- a/app/Services/AlarmService.php +++ b/app/Services/AlarmService.php @@ -313,10 +313,9 @@ class AlarmService } - public function filterAlarm(array $data, $useId) + public function filterAlarm(array $data) { $token = $this->getToken(); - $deviceId = null; if (!empty($data['deviceId'])) { @@ -337,12 +336,12 @@ class AlarmService $queryParams = array_filter([ 'severityList' => $data['severity'] ?? null, - 'assigneeId' => $useId, + 'assigneeId' => $data['assignId'] ?? null, 'pageSize' => $data['pageSize'] ?? 10, 'page' => $data['page'] ?? 0, 'startTime' => $data['startTs'] ?? null, 'endTime' => $data['endTs'] ?? null, - 'deviceId' => $deviceId, + 'deviceId' => $deviceId, ], function ($value) { return $value !== null; }); From 6cf1eac1a731c00049761f172c699d1529314963 Mon Sep 17 00:00:00 2001 From: sayliraut Date: Thu, 24 Apr 2025 12:54:09 +0530 Subject: [PATCH 12/23] change --- app/Services/AdminService.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Services/AdminService.php b/app/Services/AdminService.php index 613c315..9d71f52 100644 --- a/app/Services/AdminService.php +++ b/app/Services/AdminService.php @@ -263,15 +263,15 @@ class AdminService if (!isset($data['tenant_id'])) { throw new \Exception('tenant_id is required'); } - static $counter = 1; - $email = "dummy{$counter}@example.com"; - $counter++; + // static $counter = 1; + // $email = "dummy{$counter}@example.com"; + // $counter++; // Prepare the payload with required fields $payload = [ - 'email' => $email, + 'email' => $data['email'] ?? '', 'authority' => $data['authority'] ?? 'CUSTOMER_USER', 'firstName' => $data['first_name'] ?? '', 'lastName' => $data['last_name'] ?? '', @@ -649,4 +649,4 @@ class AdminService throw new Exception('Failed to fetch users: ' . $response->body()); } } -} \ No newline at end of file +} From 67ff5bd04ba30527e4d2fdd5bfc2741a5777d007 Mon Sep 17 00:00:00 2001 From: kshitige Date: Thu, 24 Apr 2025 13:32:49 +0530 Subject: [PATCH 13/23] changes in device and asset fetch by customer id --- app/Http/Controllers/APIS/AdminApi/DeviceController.php | 4 ++-- app/Http/Controllers/APIS/AdminApi/UsersController.php | 7 ++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/DeviceController.php b/app/Http/Controllers/APIS/AdminApi/DeviceController.php index db70861..678e176 100644 --- a/app/Http/Controllers/APIS/AdminApi/DeviceController.php +++ b/app/Http/Controllers/APIS/AdminApi/DeviceController.php @@ -181,7 +181,7 @@ class DeviceController extends Controller public function devicelistCustomer($customerId) - { + { try { $devices = Device::with('deviceProfile:id,name', 'customer:id,name') ->where('customer_id', $customerId) @@ -198,7 +198,7 @@ class DeviceController extends Controller }); if ($devices->isEmpty()) { - return response()->json(['message' => 'No devices found for this customer ID'], 404); + return response()->json(['message' => 'No devices found for this customer ID'], 200); } return jsonResponseWithSuccessMessage('Devices fetched successfully', [ diff --git a/app/Http/Controllers/APIS/AdminApi/UsersController.php b/app/Http/Controllers/APIS/AdminApi/UsersController.php index d3a3823..6d93973 100644 --- a/app/Http/Controllers/APIS/AdminApi/UsersController.php +++ b/app/Http/Controllers/APIS/AdminApi/UsersController.php @@ -519,7 +519,6 @@ class UsersController extends Controller 'real_email' => $user->email, // 'tb_email' => $dummyEmail ], 200); - } catch (\Exception $e) { Log::error("ThingsBoard activation failed: " . $e->getMessage()); @@ -539,7 +538,6 @@ class UsersController extends Controller 'error' => $e->getMessage() ], 500); } - } catch (\Exception $e) { Log::error("Error activating user ID: {$id}. Exception: " . $e->getMessage()); return response()->json([ @@ -743,7 +741,7 @@ class UsersController extends Controller }); if ($users->isEmpty()) { - return response()->json(['message' => 'No users found for this customer ID'], 404); + return response()->json(['message' => 'No users found for this customer ID'], 200); } return jsonResponseWithSuccessMessage('Users fetched successfully', [ @@ -754,5 +752,4 @@ class UsersController extends Controller return jsonResponseWithErrorMessage($e->getMessage(), 500); } } - -} +} \ No newline at end of file From d4918cd4cf940e0d67c635fd38773c682484dcab Mon Sep 17 00:00:00 2001 From: sayliraut Date: Thu, 24 Apr 2025 17:09:46 +0530 Subject: [PATCH 14/23] changes in create alarm api --- app/Http/Controllers/AlarmControllerCommon.php | 12 ++++++------ app/Services/AlarmService.php | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/AlarmControllerCommon.php b/app/Http/Controllers/AlarmControllerCommon.php index 1c243a9..8456f26 100644 --- a/app/Http/Controllers/AlarmControllerCommon.php +++ b/app/Http/Controllers/AlarmControllerCommon.php @@ -30,16 +30,16 @@ class AlarmControllerCommon extends Controller $alarmData = [ 'type' => $request->type ?? null, 'severity' => $request->severity ?? null, - 'acknowledged' => false ?? null, - 'cleared' => $request->cleared ?? Carbon::now()->timestamp, + 'acknowledged' => false, + 'cleared' => false, 'startTs' => $request->startTs ?? Carbon::now()->timestamp, 'endTs' => $request->endTs ?? Carbon::now()->timestamp, 'details' => $request->details ?? [], - 'propagate' => $request->propagate ?? false, - 'propagateToOwner' => $request->propagateToOwner ?? false, - 'propagateToTenant' => $request->propagateToTenant ?? false, + 'propagate' => true, + 'propagateToOwner' => true, + 'propagateToTenant' => true, 'originator' => $request->originator ?? 1, - 'assigneeId' => $request->assigneeId ?? 1, + // 'assigneeId' => $request->assigneeId ?? 1, ]; diff --git a/app/Services/AlarmService.php b/app/Services/AlarmService.php index 74614aa..5b3f93e 100644 --- a/app/Services/AlarmService.php +++ b/app/Services/AlarmService.php @@ -395,10 +395,10 @@ class AlarmService 'id' => $data['originator'] ?? null, 'entityType' => 'DEVICE' ], - 'assigneeId' => [ - 'id' => $data['assigneeId'] ?? null, - 'entityType' => 'USER' - ], + // 'assigneeId' => [ + // 'id' => $data['assigneeId'] ?? null, + // 'entityType' => 'USER' + // ], 'details' => $data['details'] ?? [], 'propagate' => $data['propagate'] ?? false, 'propagateToOwner' => $data['propagateToOwner'] ?? false, From ed36935978cc187e42bda1d510e0d986cd0225c3 Mon Sep 17 00:00:00 2001 From: sayaliparab Date: Fri, 25 Apr 2025 15:29:40 +0530 Subject: [PATCH 15/23] userAssets --- .../APIS/AdminApi/AssetadmintController.php | 161 +++++++++--------- .../Controllers/AlarmControllerCommon.php | 5 +- app/Services/AdminService.php | 36 +--- 3 files changed, 86 insertions(+), 116 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php index 3e49fe2..42516e8 100644 --- a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php +++ b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php @@ -82,9 +82,9 @@ class AssetadmintController extends Controller public function storeAssest(CreateAssetRequest $request) { try { - $additionalInfo = $request->has('additional_info') && is_string($request->additional_info) - ? json_decode($request->additional_info, true) - : $request->additional_info; + // $additionalInfo = $request->has('additional_info') && is_string($request->additional_info) + // ? json_decode($request->additional_info, true) + // : $request->additional_info; $assetData = [ 'entity_type' => 'ASSET', // Backend defined 'createdTime' => now()->timestamp, // Backend defined @@ -96,7 +96,8 @@ class AssetadmintController extends Controller 'assetProfileId' => $request->asset_profile_id ?? Str::uuid()->toString(), 'externalId' => $request->external_id ?? Str::uuid()->toString(), 'version' => $request->version ?? '1.0', - 'additionalInfo' => $additionalInfo ?? ['description' => 'Default asset description'], + // 'additionalInfo' => $additionalInfo ?? ['description' => 'Default asset description'], + 'additionalInfo' => $request->additionalInfo ]; $response = $this->adminService->createAsset($assetData); if (!$response) { @@ -115,6 +116,7 @@ class AssetadmintController extends Controller $asset->external_id = $assetData['externalId']; $asset->version = $response['version'] ?? $assetData['version']; $asset->additional_info = json_encode($response['additionalInfo'] ?? $assetData['additionalInfo']); + // 'additional_info'  => json_encode($apiData['additionalInfo'] ?? [])  $asset->save(); // Fetch only the customer name $customerName = \App\Models\Customer::where('id', $assetData['customerId'])->value('name'); @@ -129,60 +131,7 @@ class AssetadmintController extends Controller return response()->json(['error' => $e->getMessage()], 500); } } - // public function storeAssest(CreateAssetRequest $request) - // { - // try { - // $additionalInfo = $request->has('additional_info') && is_string($request->additional_info) - // ? json_decode($request->additional_info, true) - // : (is_array($request->additional_info) ? $request->additional_info : ['description' => 'Default asset description']); - // $assetData = [ - // 'entity_type' => 'ASSET', - // 'createdTime' => now()->timestamp, - // 'tenantId' => $request->tenant_id ?? Str::uuid()->toString(), - // 'customerId' => $request->customer_xid, - // 'name' => $request->name, - // 'type' => $request->type ?? 'Default Type', - // 'label' => $request->label ?? '', - // 'assetProfileId' => $request->asset_profile_id ?? Str::uuid()->toString(), - // 'externalId' => $request->external_id ?? Str::uuid()->toString(), - // 'additionalInfo' => $additionalInfo, - // ]; - - // $response = $this->adminService->createAsset($assetData); - - // if (!$response) { - // throw new \Exception('Failed to create asset via admin service'); - // } - - // $asset = new Asset(); - // $asset->id = $response['id']['id'] ?? Str::uuid()->toString(); - // $asset->entity_type = $assetData['entity_type']; - // $asset->created_time = $assetData['createdTime']; - // $asset->tenant_id = $assetData['tenantId']; - // $asset->customer_xid = $assetData['customerId']; - // $asset->name = $response['name'] ?? $assetData['name']; - // $asset->type = $response['type'] ?? $assetData['type']; - // $asset->label = $response['label'] ?? $assetData['label']; - // $asset->asset_profile_id = $assetData['assetProfileId']; - // $asset->external_id = $assetData['externalId']; - // $asset->version = $response['version'] ?? 1; - // $asset->additional_info = json_encode($response['additionalInfo'] ?? $assetData['additionalInfo']); - // $asset->save(); - - // $customerName = \App\Models\Customer::where('id', $assetData['customerId'])->value('name'); - - // return response()->json([ - // 'message' => 'Asset created successfully!', - // 'data' => $asset, - // 'customer_name' => $customerName, - // 'api_response' => $response - // ], 200); - // } catch (\Exception $e) { - // Log::error('Error in creating asset: ' . $e->getMessage()); - // return response()->json(['error' => $e->getMessage()], 500); - // } - // } @@ -201,6 +150,7 @@ class AssetadmintController extends Controller 'assests' => $assets ]); } catch (Exception $e) { + Log::error("An error occurred: " . $e->getMessage()); return jsonResponseWithErrorMessage($e->getMessage(), 500); } @@ -246,17 +196,76 @@ class AssetadmintController extends Controller } + // public function assignAssetToUser(Request $request) + // { + + // try { + // $request->validate([ + // 'user_id' => 'required|exists:users,id', + // 'asset_id' => 'required|uuid' + // ]); + + // $userId = $request->user_id; + // $assetId = $request->asset_id; + + // $userAssetLink = UserAssetLink::where('user_id', $userId) + // ->where('asset_id', $assetId) + // ->first(); + + // if (!$userAssetLink) { + // $userAssetLink = new UserAssetLink(); + // $userAssetLink->user_id = $userId; + // $userAssetLink->asset_id = $assetId; + // $userAssetLink->active = 1; + // $userAssetLink->save(); + + // Log::info("Asset successfully assigned to user.", ['userId' => $userId, 'assetId' => $assetId]); + + // return response()->json([ + // 'success' => true, + // 'message' => 'Asset assigned to user successfully.', + // 'data' => $userAssetLink + // ], 200); + // } + + // if ($userAssetLink->active == 1) { + // $userAssetLink->active = 0; + // $userAssetLink->save(); + // return response()->json([ + // 'success' => true, + // 'message' => 'Asset unassigned from user.', + // 'data' => $userAssetLink + // ], 200); + // } + + // $userAssetLink->active = 1; + // $userAssetLink->save(); + // return response()->json([ + // 'success' => true, + // 'message' => 'Asset reassigned to user successfully.', + // 'data' => $userAssetLink + // ], 200); + // } catch (Exception $e) { + // Log::error("Error assigning asset: " . $e->getMessage()); + // return response()->json([ + // 'success' => false, + // 'message' => 'Failed to assign or unassign asset to user', + // 'error' => $e->getMessage() + // ], 500); + // } + // } public function assignAssetToUser(Request $request) { - try { $request->validate([ 'user_id' => 'required|exists:users,id', - 'asset_id' => 'required|uuid' + 'asset_id' => 'required|uuid', + 'active' => 'required|boolean' ]); $userId = $request->user_id; $assetId = $request->asset_id; + $activeStatus = $request->active; $userAssetLink = UserAssetLink::where('user_id', $userId) ->where('asset_id', $assetId) @@ -266,37 +275,24 @@ class AssetadmintController extends Controller $userAssetLink = new UserAssetLink(); $userAssetLink->user_id = $userId; $userAssetLink->asset_id = $assetId; - $userAssetLink->active = 1; - $userAssetLink->save(); - - Log::info("Asset successfully assigned to user.", ['userId' => $userId, 'assetId' => $assetId]); - - return response()->json([ - 'success' => true, - 'message' => 'Asset assigned to user successfully.', - 'data' => $userAssetLink - ], 200); } - if ($userAssetLink->active == 1) { - $userAssetLink->active = 0; - $userAssetLink->save(); - return response()->json([ - 'success' => true, - 'message' => 'Asset unassigned from user.', - 'data' => $userAssetLink - ], 200); - } - - $userAssetLink->active = 1; + $userAssetLink->active = $activeStatus; $userAssetLink->save(); + + $message = $activeStatus + ? 'Asset assigned to user successfully.' + : 'Asset unassigned from user.'; + + Log::info($message, ['userId' => $userId, 'assetId' => $assetId]); + return response()->json([ 'success' => true, - 'message' => 'Asset reassigned to user successfully.', + 'message' => $message, 'data' => $userAssetLink ], 200); } catch (Exception $e) { - Log::error("Error assigning asset: " . $e->getMessage()); + Log::error("Error assigning/unassigning asset: " . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Failed to assign or unassign asset to user', @@ -305,6 +301,7 @@ class AssetadmintController extends Controller } } + public function customerList() { try { diff --git a/app/Http/Controllers/AlarmControllerCommon.php b/app/Http/Controllers/AlarmControllerCommon.php index 5f222f5..7e69d9c 100644 --- a/app/Http/Controllers/AlarmControllerCommon.php +++ b/app/Http/Controllers/AlarmControllerCommon.php @@ -108,7 +108,7 @@ class AlarmControllerCommon extends Controller public function acknowledgeAlarmById($id) { try { - $token = app('App\Services\AdminService')->getToken(); // Fetch cached token + $token = app('App\Services\AdminService')->getToken(); // Fetch cached token0 $url = env('THINGSBOARD_URL') . "/api/alarm/{$id}"; $getResponse = Http::withHeaders([ @@ -149,6 +149,8 @@ class AlarmControllerCommon extends Controller ]); } + + return jsonResponseWithErrorMessage('Failed to acknowledge alarm: ' . $ackResponse->body(), $ackResponse->status()); } catch (\Exception $e) { return jsonResponseWithErrorMessage('An error occurred: ' . $e->getMessage(), 500); @@ -200,6 +202,7 @@ class AlarmControllerCommon extends Controller ]); } + return jsonResponseWithErrorMessage('Failed to clear alarm: ' . $clearResponse->body(), $clearResponse->status()); } catch (\Exception $e) { Log::error('Error clearing alarm: ' . $e->getMessage()); diff --git a/app/Services/AdminService.php b/app/Services/AdminService.php index 12ba33d..08c9b76 100644 --- a/app/Services/AdminService.php +++ b/app/Services/AdminService.php @@ -93,7 +93,7 @@ class AdminService // throw new Exception('Failed to create asset: ' . $response->body()); // } // } - + // public function createAsset(array $data) // { // $token = $this->getToken(); @@ -142,7 +142,8 @@ class AdminService 'type' => $data['type'], 'label' => $data['label'], // 'version' => removed to let backend default to 1 - 'additionalInfo' => $data['additionalInfo'], + // 'additionalInfo' => $data['additionalInfo'], + 'additionalInfo' => ['description' => $data['additionalInfo'] ?? 'User description'], ]; $response = Http::withHeaders([ @@ -160,37 +161,6 @@ class AdminService } } - // public function createAsset(array $data) - // { - // $token = $this->getToken(); - - // $payload = [ - // 'entityType' => $data['entity_type'], - // 'createdTime' => $data['createdTime'], - // 'customerId' => [ - // 'id' => $data['customerId'], - // 'entityType' => 'CUSTOMER' - // ], - // 'name' => $data['name'], - // 'type' => $data['type'], - // 'label' => $data['label'], - // 'additionalInfo' => $data['additionalInfo'], // must be an array - // ]; - - // $response = Http::withHeaders([ - // 'Authorization' => "Bearer $token", - // 'Accept' => 'application/json', - // 'Content-Type' => 'application/json', - // ])->withBody(json_encode($payload), 'application/json') - // ->post("{$this->baseUrl}/api/asset"); - - // if ($response->successful()) { - // return $response->json(); - // } else { - // Log::error('Error in creating asset: ' . $response->body()); - // throw new Exception('Failed to create asset: ' . $response->body()); - // } - // } From ec67eca87bdf74ad59a593b96e2394d33fc57f41 Mon Sep 17 00:00:00 2001 From: sayaliparab Date: Mon, 28 Apr 2025 12:08:04 +0530 Subject: [PATCH 16/23] assignTouser --- .../APIS/AdminApi/AssetadmintController.php | 114 +++++++++++++++++- app/Models/Asset.php | 6 +- 2 files changed, 112 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php index 7f0ae8e..068c82b 100644 --- a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php +++ b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php @@ -136,21 +136,85 @@ class AssetadmintController extends Controller + // public function listAssest() + // { + // try { + // $assets = Asset::with('customer')->get()->map(function ($asset) { + // $assetData = $asset->toArray(); + // unset($assetData['customer']); + // $assetData['customer_name'] = $asset->customer?->name; + // return $assetData; + // }); + + // return jsonResponseWithSuccessMessage('Assets fetched successfully', [ + // 'assests' => $assets + // ]); + // } catch (Exception $e) { + + // Log::error("An error occurred: " . $e->getMessage()); + // return jsonResponseWithErrorMessage($e->getMessage(), 500); + // } + // } + + // public function listAssest() + // { + // try { + // $assets = Asset::with([ + // 'customer:id,name', + // 'userAssetLinks.user:id,name' // eager load user names + // ])->get()->map(function ($asset) { + // $assetData = $asset->toArray(); + + // unset($assetData['customer'], $assetData['user_asset_links']); // remove full objects + + // $assetData['customer_name'] = $asset->customer?->name; + + // // Collect user names from user_asset_links + // $userNames = $asset->userAssetLinks->map(function ($userAssetLink) { + // return optional($userAssetLink->user)->name; + // })->filter()->values(); // remove nulls and reset keys + + // $assetData['user_names'] = $userNames; + + // return $assetData; + // }); + + // return jsonResponseWithSuccessMessage('Assets fetched successfully', [ + // 'assets' => $assets + // ]); + // } catch (Exception $e) { + // Log::error("An error occurred: " . $e->getMessage()); + // return jsonResponseWithErrorMessage($e->getMessage(), 500); + // } + // } + public function listAssest() { try { - $assets = Asset::with('customer')->get()->map(function ($asset) { + $assets = Asset::with([ + 'customer:id,name', + 'userAssetLinks.user:id,first_name' // eager load first_name only + ])->get()->map(function ($asset) { $assetData = $asset->toArray(); - unset($assetData['customer']); + + unset($assetData['customer'], $assetData['user_asset_links']); // remove full objects + $assetData['customer_name'] = $asset->customer?->name; + + // Collect user first names from user_asset_links + $userFirstNames = $asset->userAssetLinks->map(function ($userAssetLink) { + return optional($userAssetLink->user)->first_name; + })->filter()->values(); // remove nulls and reset keys + + $assetData['assign_to_user'] = $userFirstNames; + return $assetData; }); return jsonResponseWithSuccessMessage('Assets fetched successfully', [ - 'assests' => $assets + 'assets' => $assets ]); } catch (Exception $e) { - Log::error("An error occurred: " . $e->getMessage()); return jsonResponseWithErrorMessage($e->getMessage(), 500); } @@ -160,6 +224,8 @@ class AssetadmintController extends Controller + + public function deleteAsset(Request $request) { $assetId = $request->input('assetId'); // Fetching ID from request body @@ -328,17 +394,53 @@ class AssetadmintController extends Controller } + // public function assestlistCustomer($customerId) + // { + // try { + // $assets = Asset::with('customer:id,name') + // ->where('customer_xid', $customerId) + // ->get() + // ->map(function ($asset) { + // return collect($asset) + // ->except('customer') // remove the full customer object + // ->merge([ + // 'customer_name' => optional($asset->customer)->name, + // ]); + // }); + + // if ($assets->isEmpty()) { + // return response()->json(['message' => 'No assets found for this customer ID'], 200); + // } + + // return jsonResponseWithSuccessMessage('Assets fetched successfully', [ + // 'assets' => $assets + // ]); + // } catch (Exception $e) { + // Log::error("An error occurred in asset listing: " . $e->getMessage()); + // return jsonResponseWithErrorMessage($e->getMessage(), 500); + // } + // } + public function assestlistCustomer($customerId) { try { - $assets = Asset::with('customer:id,name') + $assets = Asset::with([ + 'customer:id,name', + 'userAssetLinks.user:id,name' // eager load user through userAssetLink + ]) ->where('customer_xid', $customerId) ->get() ->map(function ($asset) { + // Get user names linked to the asset + $userNames = $asset->userAssetLinks->map(function ($userAssetLink) { + return optional($userAssetLink->user)->name; + })->filter()->values(); // filter nulls and reset keys + return collect($asset) - ->except('customer') // remove the full customer object + ->except('customer', 'userAssetLinks') // remove full objects ->merge([ 'customer_name' => optional($asset->customer)->name, + 'assign_to_user' => $userNames, // attach user names ]); }); diff --git a/app/Models/Asset.php b/app/Models/Asset.php index fd8dc5f..5fb248c 100644 --- a/app/Models/Asset.php +++ b/app/Models/Asset.php @@ -57,6 +57,8 @@ class Asset extends Model { return $this->hasMany(Device::class, 'asset_id', 'id'); } - - + public function userAssetLinks() + { + return $this->hasMany(UserAssetLink::class, 'asset_id', 'id'); + } } From dbc5b14ca392ac21ec41f85f19b976a8da0fc24a Mon Sep 17 00:00:00 2001 From: sayaliparab Date: Mon, 28 Apr 2025 12:43:55 +0530 Subject: [PATCH 17/23] username --- .../APIS/AdminApi/AssetadmintController.php | 81 +++++++++++++++---- 1 file changed, 66 insertions(+), 15 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php index 068c82b..c94f93f 100644 --- a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php +++ b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php @@ -161,7 +161,7 @@ class AssetadmintController extends Controller // try { // $assets = Asset::with([ // 'customer:id,name', - // 'userAssetLinks.user:id,name' // eager load user names + // 'userAssetLinks.user:id,first_name' // eager load first_name only // ])->get()->map(function ($asset) { // $assetData = $asset->toArray(); @@ -169,12 +169,12 @@ class AssetadmintController extends Controller // $assetData['customer_name'] = $asset->customer?->name; - // // Collect user names from user_asset_links - // $userNames = $asset->userAssetLinks->map(function ($userAssetLink) { - // return optional($userAssetLink->user)->name; + // // Collect user first names from user_asset_links + // $userFirstNames = $asset->userAssetLinks->map(function ($userAssetLink) { + // return optional($userAssetLink->user)->first_name; // })->filter()->values(); // remove nulls and reset keys - // $assetData['user_names'] = $userNames; + // $assetData['assign_to_user'] = $userFirstNames; // return $assetData; // }); @@ -193,7 +193,7 @@ class AssetadmintController extends Controller try { $assets = Asset::with([ 'customer:id,name', - 'userAssetLinks.user:id,first_name' // eager load first_name only + 'userAssetLinks.user:id,first_name,last_name' // eager load first_name and last_name ])->get()->map(function ($asset) { $assetData = $asset->toArray(); @@ -201,12 +201,19 @@ class AssetadmintController extends Controller $assetData['customer_name'] = $asset->customer?->name; - // Collect user first names from user_asset_links - $userFirstNames = $asset->userAssetLinks->map(function ($userAssetLink) { - return optional($userAssetLink->user)->first_name; + // Collect user id and full name (first_name + last_name) from user_asset_links + $assignToUsers = $asset->userAssetLinks->map(function ($userAssetLink) { + $user = $userAssetLink->user; + if ($user) { + return [ + 'user_id' => $user->id, + 'full_name' => trim($user->first_name . ' ' . $user->last_name), + ]; + } + return null; })->filter()->values(); // remove nulls and reset keys - $assetData['assign_to_user'] = $userFirstNames; + $assetData['assign_to_users'] = $assignToUsers; return $assetData; }); @@ -226,6 +233,7 @@ class AssetadmintController extends Controller + public function deleteAsset(Request $request) { $assetId = $request->input('assetId'); // Fetching ID from request body @@ -421,26 +429,69 @@ class AssetadmintController extends Controller // } // } + // public function assestlistCustomer($customerId) + // { + // try { + // $assets = Asset::with([ + // 'customer:id,name', + // 'userAssetLinks.user:id,name' // eager load user through userAssetLink + // ]) + // ->where('customer_xid', $customerId) + // ->get() + // ->map(function ($asset) { + // // Get user names linked to the asset + // $userNames = $asset->userAssetLinks->map(function ($userAssetLink) { + // return optional($userAssetLink->user)->name; + // })->filter()->values(); // filter nulls and reset keys + + // return collect($asset) + // ->except('customer', 'userAssetLinks') // remove full objects + // ->merge([ + // 'customer_name' => optional($asset->customer)->name, + // 'assign_to_user' => $userNames, // attach user names + // ]); + // }); + + // if ($assets->isEmpty()) { + // return response()->json(['message' => 'No assets found for this customer ID'], 200); + // } + + // return jsonResponseWithSuccessMessage('Assets fetched successfully', [ + // 'assets' => $assets + // ]); + // } catch (Exception $e) { + // Log::error("An error occurred in asset listing: " . $e->getMessage()); + // return jsonResponseWithErrorMessage($e->getMessage(), 500); + // } + // } + public function assestlistCustomer($customerId) { try { $assets = Asset::with([ 'customer:id,name', - 'userAssetLinks.user:id,name' // eager load user through userAssetLink + 'userAssetLinks.user:id,first_name,last_name' // eager load first_name and last_name ]) ->where('customer_xid', $customerId) ->get() ->map(function ($asset) { - // Get user names linked to the asset - $userNames = $asset->userAssetLinks->map(function ($userAssetLink) { - return optional($userAssetLink->user)->name; + // Get user details (id and full name) linked to the asset + $assignToUsers = $asset->userAssetLinks->map(function ($userAssetLink) { + $user = $userAssetLink->user; + if ($user) { + return [ + 'user_id' => $user->id, + 'full_name' => trim($user->first_name . ' ' . $user->last_name), + ]; + } + return null; })->filter()->values(); // filter nulls and reset keys return collect($asset) ->except('customer', 'userAssetLinks') // remove full objects ->merge([ 'customer_name' => optional($asset->customer)->name, - 'assign_to_user' => $userNames, // attach user names + 'assign_to_users' => $assignToUsers, // attach user_id and full_name ]); }); From b7c8eaac588e941ef5706f94078864f2fb94404d Mon Sep 17 00:00:00 2001 From: sayaliparab Date: Mon, 28 Apr 2025 16:00:30 +0530 Subject: [PATCH 18/23] userName --- .../APIS/AdminApi/AssetadmintController.php | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php index c94f93f..b4f671b 100644 --- a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php +++ b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php @@ -188,12 +188,54 @@ class AssetadmintController extends Controller // } // } + // public function listAssest() + // { + // try { + // $assets = Asset::with([ + // 'customer:id,name', + // 'userAssetLinks.user:id,first_name,last_name' // eager load first_name and last_name + // ])->get()->map(function ($asset) { + // $assetData = $asset->toArray(); + + // unset($assetData['customer'], $assetData['user_asset_links']); // remove full objects + + // $assetData['customer_name'] = $asset->customer?->name; + + // // Collect user id and full name (first_name + last_name) from user_asset_links + // $assignToUsers = $asset->userAssetLinks->map(function ($userAssetLink) { + // $user = $userAssetLink->user; + // if ($user) { + // return [ + // 'user_id' => $user->id, + // 'full_name' => trim($user->first_name . ' ' . $user->last_name), + // ]; + // } + // return null; + // })->filter()->values(); // remove nulls and reset keys + + // $assetData['assign_to_users'] = $assignToUsers; + + // return $assetData; + // }); + + // return jsonResponseWithSuccessMessage('Assets fetched successfully', [ + // 'assets' => $assets + // ]); + // } catch (Exception $e) { + // Log::error("An error occurred: " . $e->getMessage()); + // return jsonResponseWithErrorMessage($e->getMessage(), 500); + // } + // } + public function listAssest() { try { $assets = Asset::with([ 'customer:id,name', - 'userAssetLinks.user:id,first_name,last_name' // eager load first_name and last_name + 'userAssetLinks' => function ($query) { + $query->where('active', 1) // Only fetch active user asset links + ->with(['user:id,first_name,last_name']); // Eager load user info + } ])->get()->map(function ($asset) { $assetData = $asset->toArray(); @@ -201,7 +243,7 @@ class AssetadmintController extends Controller $assetData['customer_name'] = $asset->customer?->name; - // Collect user id and full name (first_name + last_name) from user_asset_links + // Collect user id and full name (first_name + last_name) from active user_asset_links $assignToUsers = $asset->userAssetLinks->map(function ($userAssetLink) { $user = $userAssetLink->user; if ($user) { From 9d671ed516e01a2c32c08da8906c108376e547cc Mon Sep 17 00:00:00 2001 From: sayaliparab Date: Mon, 28 Apr 2025 16:38:10 +0530 Subject: [PATCH 19/23] assign --- .../APIS/AdminApi/AssetadmintController.php | 65 ++++++++++++++++--- 1 file changed, 57 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php index b4f671b..b1637c9 100644 --- a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php +++ b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php @@ -381,6 +381,52 @@ class AssetadmintController extends Controller // } // } + // public function assignAssetToUser(Request $request) + // { + // try { + // $request->validate([ + // 'user_id' => 'required|exists:users,id', + // 'asset_id' => 'required|uuid', + // 'active' => 'required|boolean' + // ]); + + // $userId = $request->user_id; + // $assetId = $request->asset_id; + // $activeStatus = $request->active; + + // $userAssetLink = UserAssetLink::where('user_id', $userId) + // ->where('asset_id', $assetId) + // ->first(); + + // if (!$userAssetLink) { + // $userAssetLink = new UserAssetLink(); + // $userAssetLink->user_id = $userId; + // $userAssetLink->asset_id = $assetId; + // } + + // $userAssetLink->active = $activeStatus; + // $userAssetLink->save(); + + // $message = $activeStatus + // ? 'Asset assigned to user successfully.' + // : 'Asset unassigned from user.'; + + // Log::info($message, ['userId' => $userId, 'assetId' => $assetId]); + + // return response()->json([ + // 'success' => true, + // 'message' => $message, + // 'data' => $userAssetLink + // ], 200); + // } catch (Exception $e) { + // Log::error("Error assigning/unassigning asset: " . $e->getMessage()); + // return response()->json([ + // 'success' => false, + // 'message' => 'Failed to assign or unassign asset to user', + // 'error' => $e->getMessage() + // ], 500); + // } + // } public function assignAssetToUser(Request $request) { try { @@ -394,16 +440,18 @@ class AssetadmintController extends Controller $assetId = $request->asset_id; $activeStatus = $request->active; - $userAssetLink = UserAssetLink::where('user_id', $userId) - ->where('asset_id', $assetId) - ->first(); - - if (!$userAssetLink) { - $userAssetLink = new UserAssetLink(); - $userAssetLink->user_id = $userId; - $userAssetLink->asset_id = $assetId; + if ($activeStatus) { + // If assigning asset, first unassign from any other users + UserAssetLink::where('asset_id', $assetId) + ->update(['active' => 0]); } + // Now either update existing record or create a new one for this user and asset + $userAssetLink = UserAssetLink::firstOrNew([ + 'user_id' => $userId, + 'asset_id' => $assetId + ]); + $userAssetLink->active = $activeStatus; $userAssetLink->save(); @@ -429,6 +477,7 @@ class AssetadmintController extends Controller } + public function customerList() { try { From 3bfe45bc63aa8184eb7d657f7d9e8ec32de97336 Mon Sep 17 00:00:00 2001 From: sayaliparab Date: Mon, 28 Apr 2025 17:00:04 +0530 Subject: [PATCH 20/23] userAssest --- .../APIS/AdminApi/AssetadmintController.php | 72 +++++++++++++++---- 1 file changed, 59 insertions(+), 13 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php index b1637c9..36d4c01 100644 --- a/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php +++ b/app/Http/Controllers/APIS/AdminApi/AssetadmintController.php @@ -556,33 +556,79 @@ class AssetadmintController extends Controller // } // } + // public function assestlistCustomer($customerId) + // { + // try { + // $assets = Asset::with([ + // 'customer:id,name', + // 'userAssetLinks.user:id,first_name,last_name' // eager load first_name and last_name + // ]) + // ->where('customer_xid', $customerId) + // ->get() + // ->map(function ($asset) { + // // Get user details (id and full name) linked to the asset + // $assignToUsers = $asset->userAssetLinks->map(function ($userAssetLink) { + // $user = $userAssetLink->user; + // if ($user) { + // return [ + // 'user_id' => $user->id, + // 'full_name' => trim($user->first_name . ' ' . $user->last_name), + // ]; + // } + // return null; + // })->filter()->values(); // filter nulls and reset keys + + // return collect($asset) + // ->except('customer', 'userAssetLinks') // remove full objects + // ->merge([ + // 'customer_name' => optional($asset->customer)->name, + // 'assign_to_users' => $assignToUsers, // attach user_id and full_name + // ]); + // }); + + // if ($assets->isEmpty()) { + // return response()->json(['message' => 'No assets found for this customer ID'], 200); + // } + + // return jsonResponseWithSuccessMessage('Assets fetched successfully', [ + // 'assets' => $assets + // ]); + // } catch (Exception $e) { + // Log::error("An error occurred in asset listing: " . $e->getMessage()); + // return jsonResponseWithErrorMessage($e->getMessage(), 500); + // } + // } + + public function assestlistCustomer($customerId) { try { $assets = Asset::with([ 'customer:id,name', - 'userAssetLinks.user:id,first_name,last_name' // eager load first_name and last_name + 'userAssetLinks' => function ($query) { + $query->where('active', 1) // Only active links + ->with('user:id,first_name,last_name'); // Eager load user + } ]) ->where('customer_xid', $customerId) ->get() ->map(function ($asset) { - // Get user details (id and full name) linked to the asset - $assignToUsers = $asset->userAssetLinks->map(function ($userAssetLink) { - $user = $userAssetLink->user; - if ($user) { - return [ - 'user_id' => $user->id, - 'full_name' => trim($user->first_name . ' ' . $user->last_name), - ]; - } - return null; - })->filter()->values(); // filter nulls and reset keys + // Since only active userAssetLinks are fetched, take the first one (only one user per asset) + $assignToUser = $asset->userAssetLinks->first(); // get first active link if exists + + $userDetails = null; + if ($assignToUser && $assignToUser->user) { + $userDetails = [ + 'user_id' => $assignToUser->user->id, + 'full_name' => trim($assignToUser->user->first_name . ' ' . $assignToUser->user->last_name), + ]; + } return collect($asset) ->except('customer', 'userAssetLinks') // remove full objects ->merge([ 'customer_name' => optional($asset->customer)->name, - 'assign_to_users' => $assignToUsers, // attach user_id and full_name + 'assign_to_user' => $userDetails, // assign only one user ]); }); From fc45f740f5716466376882b47471be3427fe3391 Mon Sep 17 00:00:00 2001 From: sayliraut Date: Mon, 28 Apr 2025 19:33:05 +0530 Subject: [PATCH 21/23] changes --- app/Http/Controllers/AlarmControllerCommon.php | 1 + app/Services/AlarmService.php | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/AlarmControllerCommon.php b/app/Http/Controllers/AlarmControllerCommon.php index 8456f26..174c31d 100644 --- a/app/Http/Controllers/AlarmControllerCommon.php +++ b/app/Http/Controllers/AlarmControllerCommon.php @@ -40,6 +40,7 @@ class AlarmControllerCommon extends Controller 'propagateToTenant' => true, 'originator' => $request->originator ?? 1, // 'assigneeId' => $request->assigneeId ?? 1, + 'acknowledged' => false, ]; diff --git a/app/Services/AlarmService.php b/app/Services/AlarmService.php index 5b3f93e..9fc7197 100644 --- a/app/Services/AlarmService.php +++ b/app/Services/AlarmService.php @@ -320,8 +320,7 @@ class AlarmService if (!empty($data['deviceId'])) { $deviceId = $data['deviceId']; - } - elseif (!empty($data['assetId'])) { + } elseif (!empty($data['assetId'])) { $deviceId = Device::where('asset_id', $data['assetId'])->value('id'); } @@ -401,6 +400,7 @@ class AlarmService // ], 'details' => $data['details'] ?? [], 'propagate' => $data['propagate'] ?? false, + 'acknowledged' => false, 'propagateToOwner' => $data['propagateToOwner'] ?? false, ]; From 45742aa1178fce88e238c2f7457745b8e2998396 Mon Sep 17 00:00:00 2001 From: sayliraut Date: Mon, 28 Apr 2025 19:38:06 +0530 Subject: [PATCH 22/23] change --- app/Http/Controllers/AlarmControllerCommon.php | 3 +-- app/Services/AlarmService.php | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/AlarmControllerCommon.php b/app/Http/Controllers/AlarmControllerCommon.php index b8bf600..915721e 100644 --- a/app/Http/Controllers/AlarmControllerCommon.php +++ b/app/Http/Controllers/AlarmControllerCommon.php @@ -40,7 +40,6 @@ class AlarmControllerCommon extends Controller 'propagateToTenant' => true, 'originator' => $request->originator ?? 1, // 'assigneeId' => $request->assigneeId ?? 1, - 'acknowledged' => false, ]; @@ -203,7 +202,7 @@ class AlarmControllerCommon extends Controller ]); } - + return jsonResponseWithErrorMessage('Failed to clear alarm: ' . $clearResponse->body(), $clearResponse->status()); } catch (\Exception $e) { Log::error('Error clearing alarm: ' . $e->getMessage()); diff --git a/app/Services/AlarmService.php b/app/Services/AlarmService.php index 9fc7197..ba28ef0 100644 --- a/app/Services/AlarmService.php +++ b/app/Services/AlarmService.php @@ -386,7 +386,7 @@ class AlarmService $payload = [ 'type' => $data['type'] ?? null, 'severity' => $data['severity'] ?? null, - 'acknowledged' => $data['acknowledged'] ?? null, + 'acknowledged' => false, 'cleared' => $data['cleared'] ?? Carbon::now()->timestamp, 'startTs' => $data['startTs'] ?? Carbon::now()->timestamp, 'endTs' => $data['endTs'] ?? Carbon::now()->timestamp, @@ -400,7 +400,6 @@ class AlarmService // ], 'details' => $data['details'] ?? [], 'propagate' => $data['propagate'] ?? false, - 'acknowledged' => false, 'propagateToOwner' => $data['propagateToOwner'] ?? false, ]; From 09b1d79f0034a2a00f076243b541cea5eba95eb1 Mon Sep 17 00:00:00 2001 From: kshitige Date: Wed, 30 Apr 2025 15:02:21 +0530 Subject: [PATCH 23/23] token --- app/Http/Controllers/APIS/AdminApi/UsersController.php | 9 ++++++--- app/Services/AdminService.php | 8 +++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/APIS/AdminApi/UsersController.php b/app/Http/Controllers/APIS/AdminApi/UsersController.php index 6d93973..b951d5e 100644 --- a/app/Http/Controllers/APIS/AdminApi/UsersController.php +++ b/app/Http/Controllers/APIS/AdminApi/UsersController.php @@ -295,13 +295,14 @@ class UsersController extends Controller $activationLink = url("/apia/activate/{$userId}?token={$randomToken}"); // Send activation email - Mail::to($user->email)->queue(new UserCreatedMail($user, $activationLink)); + Mail::to($user->email)->send(new UserCreatedMail($user, $activationLink)); return response()->json([ 'success' => true, 'message' => 'User created successfully', 'data' => [ 'user_id' => $userId, + 'token'=>$randomToken, 'activation_link' => $activationLink, 'external_service_response' => $serviceResponse ] @@ -661,7 +662,6 @@ class UsersController extends Controller $localResponse = null; $thingsboardResponse = null; - // ✅ Check in Local database $user = User::where('email', $email)->first(); if ($user) { @@ -688,6 +688,9 @@ class UsersController extends Controller ], 200); } + + + public function userlistCustomer(Request $request) { try { @@ -752,4 +755,4 @@ class UsersController extends Controller return jsonResponseWithErrorMessage($e->getMessage(), 500); } } -} \ No newline at end of file +} diff --git a/app/Services/AdminService.php b/app/Services/AdminService.php index 9d71f52..e2bd58c 100644 --- a/app/Services/AdminService.php +++ b/app/Services/AdminService.php @@ -263,15 +263,13 @@ class AdminService if (!isset($data['tenant_id'])) { throw new \Exception('tenant_id is required'); } - // static $counter = 1; - // $email = "dummy{$counter}@example.com"; - // $counter++; - + $randomNumber = rand(1000, 9999); + $email = "dummy{$randomNumber}@example.com"; // Prepare the payload with required fields $payload = [ - 'email' => $data['email'] ?? '', + 'email' => $email?? '', 'authority' => $data['authority'] ?? 'CUSTOMER_USER', 'firstName' => $data['first_name'] ?? '', 'lastName' => $data['last_name'] ?? '',