From b689b0e684e3a1c0e9ab7b8b34bccfd8d13c7c38 Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Mon, 22 Dec 2025 09:59:31 -0600 Subject: [PATCH] ADD: buscar vehiculos en especifico robado --- .../Controllers/Api/VehicleController.php | 99 +++++++++++++++++-- routes/api.php | 3 + 2 files changed, 95 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/Api/VehicleController.php b/app/Http/Controllers/Api/VehicleController.php index ea644d5..942981d 100644 --- a/app/Http/Controllers/Api/VehicleController.php +++ b/app/Http/Controllers/Api/VehicleController.php @@ -1,4 +1,6 @@ -vin; // Buscar vehículo en vehicle_fakes - $vehiculo = VehicleFake::when($vin, function($query) use ($vin) { - return $query->where('vin', $vin); - }) - ->when($placa, function($query) use ($placa) { + $vehiculo = VehicleFake::when($vin, function ($query) use ($vin) { + return $query->where('vin', $vin); + }) + ->when($placa, function ($query) use ($placa) { return $query->orWhere('placa', $placa); }) ->first(); @@ -218,7 +220,6 @@ public function recuperarVehiculo(Request $request): JsonResponse 'acta_robo' => $vehiculoRecuperado->acta_robo, ] ]); - } catch (\Exception $e) { Log::error('Error al recuperar vehículo', [ 'placa' => $request->placa, @@ -291,7 +292,6 @@ public function listarRobados(Request $request) 'total' => $collection->count(), 'vehiculos' => $paginatedVehiculos ]); - } catch (\Exception $e) { return ApiResponse::BAD_REQUEST->response([ 'success' => false, @@ -323,4 +323,89 @@ public function listarDetecciones() ]); } + public function vehicleDetections(Request $request) + { + $detector = Validator::make($request->all(), [ + 'placa' => 'required_without:vin|string|nullable', + 'vin' => 'required_without:placa|string|nullable', + ], [ + 'placa.required_without' => 'Debe proporcionar al menos placa o VIN', + 'vin.required_without' => 'Debe proporcionar al menos placa o VIN', + ]); + + if ($detector->fails()) { + return ApiResponse::BAD_REQUEST->response([ + 'success' => false, + 'message' => 'Datos inválidos', + 'errors' => $detector->errors() + ]); + } + + $placa = $request->placa; + $vin = $request->vin; + + $detecciones = Detection::when($vin, function ($query) use ($vin) { + return $query->where('vin', $vin); + }) + ->when($placa, function ($query) use ($placa) { + return $query->orWhere('placa', $placa); + }) + ->orderBy('fecha_deteccion', 'desc') + ->paginate(config('app.pagination')); + + if ($detecciones->isEmpty()) { + return ApiResponse::NOT_FOUND->response([ + 'success' => false, + 'message' => 'No se encontraron detecciones para el vehículo proporcionado' + ]); + } else { + return ApiResponse::OK->response([ + 'success' => true, + 'detecciones' => $detecciones + ]); + } + + return ApiResponse::OK->response([ + 'success' => true, + 'detecciones' => $detecciones + ]); + } + + public function buscarVehiculoRobado(Request $request) + { + $validator = Validator::make($request->all(), [ + 'placa' => 'required_without:vin|string|nullable', + 'vin' => 'required_without:placa|string|nullable', + ], [ + 'placa.required_without' => 'Debe proporcionar al menos placa o VIN', + 'vin.required_without' => 'Debe proporcionar al menos placa o VIN', + ]); + + if ($validator->fails()) { + return ApiResponse::BAD_REQUEST->response([ + 'success' => false, + 'message' => 'Datos inválidos', + 'errors' => $validator->errors() + ]); + } + + $placa = $request->placa; + $vin = $request->vin; + + // Buscar en Redis + $vehiculoEncontrado = $this->buscarEnRedis($vin, $placa); + + if (!$vehiculoEncontrado) { + return ApiResponse::NOT_FOUND->response([ + 'success' => false, + 'message' => 'El vehículo no está registrado como robado' + ]); + } + + return ApiResponse::OK->response([ + 'success' => true, + 'message' => 'Vehículo encontrado en lista de robados', + 'vehiculo' => $vehiculoEncontrado['datos'] + ]); + } } diff --git a/routes/api.php b/routes/api.php index 2553033..9449d71 100644 --- a/routes/api.php +++ b/routes/api.php @@ -22,9 +22,12 @@ Route::post('/vehicles/consultar', [VehicleController::class, 'consultarVehiculo']); Route::post('/vehicles/recuperar', [VehicleController::class, 'recuperarVehiculo']); + Route::get('/vehicles/detectar', [VehicleController::class, 'vehicleDetections']); Route::get('/vehicles/robados', [VehicleController::class, 'listarRobados']); Route::get('/vehicles', [VehicleController::class, 'listarRecuperados']); Route::get('/vehicles/detecciones', [VehicleController::class, 'listarDetecciones']); + Route::get('/vehicles/robado', [VehicleController::class, 'buscarVehiculoRobado']); + }); /** Rutas públicas */