From fae8979532f1809a121066d892700f297a053c2b Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Mon, 3 Nov 2025 11:19:12 -0600 Subject: [PATCH] Ultimos cambios - endpoint stolen --- .../Repuve/InscriptionController.php | 59 ++++++++++++++++++- .../Requests/Repuve/VehicleStoreRequest.php | 2 +- routes/api.php | 3 +- 3 files changed, 61 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Repuve/InscriptionController.php b/app/Http/Controllers/Repuve/InscriptionController.php index be1fc12..ae0f2a6 100644 --- a/app/Http/Controllers/Repuve/InscriptionController.php +++ b/app/Http/Controllers/Repuve/InscriptionController.php @@ -136,7 +136,7 @@ public function vehicleInscription(VehicleStoreRequest $request) $catalogName = CatalogNameImg::firstOrCreate(['name' => $customName]); $extension = $file->getClientOriginalExtension(); $fileName = $customName . '_' . date('dmY_His') . '.' . $extension; - $path = $file->storeAs('records', $fileName, 'public'); + $path = $file->storeAs("records/{$record->folio}", $fileName, 'public'); $md5 = md5_file($file->getRealPath()); $fileRecord = File::create([ @@ -265,6 +265,63 @@ private function checkIfStolen(string $folio): bool return (bool) rand(0, 1); } + public function stolen(Request $request) + { + $request->validate([ + 'folio' => ['sometimes', 'string', 'max:50'], + 'tag_number' => ['sometimes', 'string', 'exists:tags,tag_number'], + 'vin' => ['sometimes', 'string', 'max:30'], + ]); + + $folio = $request->input('folio'); + $tagNumber = $request->input('tag_number'); + $vin = $request->input('vin'); + + // Validar que se proporcione al menos un criterio de búsqueda + if (!$folio && !$tagNumber && !$vin) { + return ApiResponse::BAD_REQUEST->response([ + 'message' => 'Debe proporcionar al menos un criterio de búsqueda: folio y tag_number, o vin', + ]); + } + $query = Record::with(['vehicle.owner', 'vehicle.tag']); + + // Búsqueda por folio ó tag_number + if ($folio && !$tagNumber) { + $query->where('folio', $folio); + }elseif (!$folio && $tagNumber) { + $query->whereHas('vehicle.tag', function ($q) use ($tagNumber) { + $q->where('tag_number', $tagNumber); + }); + }// Búsqueda solo por VIN + elseif ($vin) { + $query->whereHas('vehicle', function ($q) use ($vin) { + $q->where('niv', $vin); + }); + } + + $record = $query->first(); + + if (!$record) { + return ApiResponse::NOT_FOUND->response([ + 'stolen' => false, + 'message' => 'No se encontró ningún registro con los criterios proporcionados', + ]); + } + + return ApiResponse::OK->response([ + 'stolen' => true, + 'vehicle' => [ + 'folio' => $record->folio, + 'placa' => $record->vehicle->placa, + 'tag_number' => $record->vehicle->tag?->tag_number, + 'vin' => $record->vehicle->niv, + 'marca' => $record->vehicle->marca, + 'modelo' => $record->vehicle->linea, + 'año' => $record->vehicle->modelo, + ], + ]); + } + private function sendToRepuveNacional(string $vin): array { // Enviar datos a API Repuve Nacional diff --git a/app/Http/Requests/Repuve/VehicleStoreRequest.php b/app/Http/Requests/Repuve/VehicleStoreRequest.php index b29de7a..9631dfc 100644 --- a/app/Http/Requests/Repuve/VehicleStoreRequest.php +++ b/app/Http/Requests/Repuve/VehicleStoreRequest.php @@ -15,7 +15,7 @@ public function rules(): array return [ 'folio' => ['required', 'string', 'max:50'], 'tag_number' => ['required', 'string', 'exists:tags,tag_number'], - 'vin' => ['required', 'string', 'max:30'], + 'vin' => ['sometimes', 'string', 'max:30'], 'files' => ['nullable', 'array', 'min:1'], 'files.*' => ['file', 'mimes:jpeg,png,jpg', 'max:10240'], 'names' => ['nullable', 'array'], diff --git a/routes/api.php b/routes/api.php index d43172d..d644ffd 100644 --- a/routes/api.php +++ b/routes/api.php @@ -29,13 +29,14 @@ // Rutas de inscripción de vehículos Route::post('inscripcion', [InscriptionController::class, 'vehicleInscription']); Route::get('consultaV', [InscriptionController::class, 'searchRecord']); - Route::get('RecordErrors', [RecordController::class, 'errors']); + Route::post('stolen', [InscriptionController::class, 'stolen']); // Rutas de expedientes y documentos Route::get('expediente/{id}/pdf', [RecordController::class, 'generatePdf']); Route::get('expediente/{id}/pdfVerificacion', [RecordController::class, 'generatePdfVerification']); Route::get('expediente/{id}/pdfConstancia', [RecordController::class, 'generatePdfConstancia']); Route::get('expediente/{id}/pdfImagenes', [RecordController::class, 'generatePdfImages']); + Route::get('RecordErrors', [RecordController::class, 'errors']); //Rutas de Actualización Route::get('consulta', [UpdateController::class, 'vehicleData']);