diff --git a/app/Exceptions/PadronEstatalException.php b/app/Exceptions/PadronEstatalException.php new file mode 100644 index 0000000..2801075 --- /dev/null +++ b/app/Exceptions/PadronEstatalException.php @@ -0,0 +1,5 @@ +response([ + 'message' => 'El padrón estatal no retornó un NIV válido para la placa proporcionada.', + 'placa' => $placa, + ]); + } + // Consultar REPUVE Nacional para obtener datos oficiales del vehículo $repuveNacionalData = $this->repuveService->consultarVehiculo($niv, $placa); @@ -284,6 +293,13 @@ public function vehicleInscription(VehicleStoreRequest $request) 'files' => $uploadedFiles, 'total_files' => count($uploadedFiles), ]); + } catch (PadronEstatalException $e) { + DB::rollBack(); + + return ApiResponse::INTERNAL_ERROR->response([ + 'message' => 'Error al consultar el padrón estatal.', + 'error' => $e->getMessage(), + ]); } catch (\Exception $e) { DB::rollBack(); diff --git a/app/Http/Controllers/Repuve/UpdateController.php b/app/Http/Controllers/Repuve/UpdateController.php index 5b66016..a5bdbca 100644 --- a/app/Http/Controllers/Repuve/UpdateController.php +++ b/app/Http/Controllers/Repuve/UpdateController.php @@ -15,6 +15,7 @@ use App\Models\CatalogNameImg; use App\Models\VehicleTagLog; use App\Models\Tag; +use App\Exceptions\PadronEstatalException; use App\Services\RepuveService; use App\Services\PadronEstatalService; use Exception; @@ -205,6 +206,13 @@ public function tagSubstitution(Request $request) ], 'record' => $record, ]); + } catch (PadronEstatalException $e) { + DB::rollBack(); + + return ApiResponse::INTERNAL_ERROR->response([ + 'message' => 'Error al consultar el padrón estatal.', + 'error' => $e->getMessage(), + ]); } catch (Exception $e) { DB::rollBack(); diff --git a/app/Services/PadronEstatalService.php b/app/Services/PadronEstatalService.php index fd6b8cf..08d9a39 100644 --- a/app/Services/PadronEstatalService.php +++ b/app/Services/PadronEstatalService.php @@ -2,7 +2,7 @@ namespace App\Services; -use Exception; +use App\Exceptions\PadronEstatalException; class PadronEstatalService { @@ -71,11 +71,11 @@ private function consultarPadron(string $tipo, string $valor): array $error = curl_error($ch); if ($error) { - throw new Exception("Error en la petición al padrón estatal: {$error}"); + throw new PadronEstatalException("Error en la petición al padrón estatal: {$error}"); } if ($httpCode !== 200) { - throw new Exception("Error HTTP {$httpCode} al consultar padrón estatal"); + throw new PadronEstatalException("Error HTTP {$httpCode} al consultar padrón estatal"); } // Parsear la respuesta @@ -94,7 +94,7 @@ private function parsearRespuesta(string $soapResponse): array preg_match('/(.*?)<\/result>/s', $soapResponse, $matches); if (!isset($matches[1])) { - throw new Exception("No se pudo extraer el resultado del padrón estatal"); + throw new PadronEstatalException("No se pudo extraer el resultado del padrón estatal"); } $jsonContent = trim($matches[1]); @@ -103,24 +103,24 @@ private function parsearRespuesta(string $soapResponse): array $result = json_decode($jsonContent, true); if (json_last_error() !== JSON_ERROR_NONE) { - throw new Exception("Error al decodificar JSON del padrón estatal: " . json_last_error_msg()); + throw new PadronEstatalException("Error al decodificar JSON del padrón estatal: " . json_last_error_msg()); } // La respuesta es un array con un objeto que tiene error y datos if (!isset($result[0])) { - throw new Exception("Formato de respuesta inesperado del padrón estatal"); + throw new PadronEstatalException("Formato de respuesta inesperado del padrón estatal"); } $data = $result[0]; // Verificar si hay error if ($data['error'] !== 0) { - throw new Exception("Error en consulta al padrón estatal: código {$data['error']}"); + throw new PadronEstatalException("Error en consulta al padrón estatal: código {$data['error']}"); } // Verificar si hay datos if (!isset($data['datos'][0])) { - throw new Exception("No se encontraron datos del vehículo en el padrón estatal"); + throw new PadronEstatalException("No se encontraron datos del vehículo en el padrón estatal"); } return $data['datos'][0];