diff --git a/app/Http/Controllers/Repuve/DeviceController.php b/app/Http/Controllers/Repuve/DeviceController.php index 09fa66d..39a72c5 100644 --- a/app/Http/Controllers/Repuve/DeviceController.php +++ b/app/Http/Controllers/Repuve/DeviceController.php @@ -10,6 +10,8 @@ use App\Models\Device; use App\Models\DeviceModule; use Illuminate\Support\Facades\DB; +use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Support\Facades\Log; class DeviceController extends Controller { @@ -175,4 +177,54 @@ public function destroy($id) ]); } } + + /** + * Cambiar solo el status de un dispositivo + */ + public function toggleStatus(int $id) + { + try { + $device = Device::findOrFail($id); + + DB::beginTransaction(); + + $newStatus = !$device->status; + $device->update([ + 'status' => $newStatus, + ]); + + DB::commit(); + + $device->refresh(); + + return ApiResponse::OK->response([ + 'message' => $device->status + ? 'Dispositivo activado exitosamente' + : 'Dispositivo desactivado exitosamente', + 'device' => [ + 'id' => $device->id, + 'brand' => $device->brand, + 'serie' => $device->serie, + 'mac_address' => $device->mac_address, + 'status' => $device->status ? 'Activo' : 'Inactivo', + 'updated_at' => $device->updated_at->format('Y-m-d H:i:s'), + ], + ]); + } catch (ModelNotFoundException $e) { + return ApiResponse::NOT_FOUND->response([ + 'message' => 'Dispositivo no encontrado', + ]); + } catch (\Exception $e) { + DB::rollBack(); + Log::error('Error al cambiar status del módulo: ' . $e->getMessage(), [ + 'module_id' => $id, + 'trace' => $e->getTraceAsString() + ]); + + return ApiResponse::INTERNAL_ERROR->response([ + 'message' => 'Error al cambiar status del módulo', + 'error' => $e->getMessage(), + ]); + } + } } diff --git a/routes/api.php b/routes/api.php index 6f5419f..fb9ad8c 100644 --- a/routes/api.php +++ b/routes/api.php @@ -55,6 +55,7 @@ Route::resource('municipality', MunicipalityController::class); //Rutas de dispositivos + Route::patch('device/{id}/toggle-status', [DeviceController::class, 'toggleStatus']); Route::resource('devices', DeviceController::class); //Ruta de paquetes