Se implementó la queue a UpdateController

This commit is contained in:
Juan Felipe Zapata Moreno 2025-12-01 12:17:11 -06:00
parent b25db1a0d4
commit 48eaf28151
2 changed files with 56 additions and 70 deletions

View File

@ -12,13 +12,13 @@
use App\Models\Record;
use App\Models\File;
use App\Models\Owner;
use App\Models\Error;
use App\Models\CatalogNameImg;
use App\Models\VehicleTagLog;
use App\Services\RepuveService;
use App\Services\PadronEstatalService;
use Exception;
use Illuminate\Support\Facades\Auth;
use App\Jobs\ProcessRepuveResponse;
class UpdateController extends Controller
{
@ -375,71 +375,68 @@ public function vehicleUpdate(VehicleUpdateRequest $request)
// Solo enviar a REPUVE Nacional si hay cambios
if ($hasVehicleChanges || $hasOwnerChanges || count($uploadedFiles) > 0) {
//Envio de datos
$apiResponse = $this->sendToRepuveNacional($niv);
$apiResponse["repuve_response"]["folio_ci"] = $record->folio;
$apiResponse["repuve_response"]["identificador_ci"] = $tag->tag_number;
// Preparar datos completos para REPUVE
$datosCompletos = $this->prepararDatosParaInscripcion($niv);
if (isset($apiResponse['has_error']) && $apiResponse['has_error']) {
$error = Error::where('code', $apiResponse['error_code'])->first();
if (!$error) {
// Usar error genérico si no se encuentra el código
logger()->warning('Código de error REPUVE no catalogado', [
'error_code' => $apiResponse['error_code'],
'error_message' => $apiResponse['error_message'],
'niv' => $niv,
]);
// Buscar error
$error = Error::where('code', '-1')->first();
if (!$error) {
// Si ni siquiera existe el error genérico
$error = Error::create([
'code' => '-1',
'name' => 'Error Interno',
'description' => 'Error interno del web service. Problemas con la base de datos o en la red.',
'type' => 'Error de Conexión',
]);
}
}
$record->update([
'error_id' => $error->id,
'api_response' => $apiResponse,
'error_occurred_at' => now(),
]);
DB::commit();
return ApiResponse::NOT_ACCEPTABLE->response([
'message' => 'Datos guardados con error. Corrija y vuelva a enviar.',
'has_error' => true,
'can_retry' => true,
'error' => [
'code' => $error->code,
'description' => $error->description,
'occurred_at' => $record->error_occurred_at->toDateTimeString(),
],
'record' => [
'id' => $record->id,
'folio' => $record->folio,
],
]);
}
$record->update([
'error_id' => null,
'api_response' => $apiResponse,
'error_occurred_at' => null,
]);
// Enviar job
ProcessRepuveResponse::dispatch($record->id, $datosCompletos);
}
DB::commit();
$sentToRepuve = $hasVehicleChanges || $hasOwnerChanges || count($uploadedFiles) > 0;
$message = 'Vehículo actualizado exitosamente';
if (!$hasVehicleChanges && !$hasOwnerChanges && empty($uploadedFiles)) {
$message = 'No se detectaron cambios. Los datos ya estaban actualizados.';
} elseif (($hasVehicleChanges || $hasOwnerChanges) && !empty($uploadedFiles)) {
$message = 'Datos del vehículo/propietario y archivos actualizados exitosamente.';
} elseif (($hasVehicleChanges || $hasOwnerChanges) && empty($uploadedFiles)) {
$message = 'Datos del vehículo/propietario actualizados exitosamente. No se subieron archivos.';
} elseif (!$hasVehicleChanges && !$hasOwnerChanges && !empty($uploadedFiles)) {
$message = 'Archivos subidos exitosamente. No hubo cambios en los datos del vehículo/propietario.';
}
return ApiResponse::OK->response([
'message' => $message,
'has_error' => false,
'changes_made' => [
'vehicle_updated' => $hasVehicleChanges,
'owner_updated' => $hasOwnerChanges,
'files_uploaded' => count($uploadedFiles) > 0,
],
'record' => [
'id' => $record->id,
'folio' => $record->folio,
'updated_at' => $record->updated_at->toDateTimeString(),
],
'vehicle' => [
'id' => $vehicle->id,
'placa' => $vehicle->placa,
'niv' => $vehicle->niv,
'marca' => $vehicle->marca,
'modelo' => $vehicle->modelo,
'color' => $vehicle->color,
],
'owner' => [
'id' => $owner->id,
'full_name' => $owner->full_name,
'rfc' => $owner->rfc,
],
'tag' => [
'id' => $tag->id,
'tag_number' => $tag->tag_number,
'status' => $tag->status->name,
],
'uploaded_files' => $uploadedFiles,
'replaced_count' => count($replacedFiles),
'total_files' => File::where('record_id', $record->id)->count(),
]);
DB::commit();
$sentToRepuve = $hasVehicleChanges || $hasOwnerChanges || count($uploadedFiles) > 0;
$message = 'Vehículo actualizado exitosamente';
if (!$hasVehicleChanges && !$hasOwnerChanges && empty($uploadedFiles)) {
$message = 'No se detectaron cambios. Los datos ya estaban actualizados.';
@ -543,12 +540,6 @@ private function prepararDatosParaInscripcion(string $niv): array
];
}
private function sendToRepuveNacional(string $niv): array
{
$datosCompletos = $this->prepararDatosParaInscripcion($niv);
return $this->repuveService->inscribirVehiculo($datosCompletos);
}
private function detectVehicleChanges($vehicle, array $vehicleDataEstatal): bool
{
$fieldsToCompare = [

View File

@ -46,11 +46,6 @@ public function handle(RepuveService $repuveService): void
'timestamp' => $apiResponse['timestamp'] ?? null,
]);
if(isset($apiResponse['repuve_response']) && is_array($apiResponse['repuve_response'])){
$apiResponse['repuve_response']['folio_ci'] = $record->folio;
$apiResponse['repuve_response']['identificador_ci'] = $record->vehicle->tag->tag_number;
}
if($apiResponse['has_error']){
$error = Error::where('code', $apiResponse['error_code'])->first();