diff --git a/app/Http/Controllers/Repuve/RepuveController.php b/app/Http/Controllers/Repuve/RepuveController.php index f2d49ad..dc73e76 100644 --- a/app/Http/Controllers/Repuve/RepuveController.php +++ b/app/Http/Controllers/Repuve/RepuveController.php @@ -6,15 +6,65 @@ use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Notsoweb\ApiResponse\Enums\ApiResponse; +use App\Http\Requests\Repuve\VehicleRequest; +use App\Models\Vehicle; +use App\Models\Record; class RepuveController extends Controller { - /** - * Obtener información de vehículo (datos hardcodeados) - */ - public function information() + public function consultarVehiculo(VehicleRequest $request) { - $data = [ + // La validación por el Request + $folio = $request->input('folio'); + + // Simular consulta de robo + $isStolen = (bool) rand(0, 1); + $stolenMessage = $isStolen + ? 'El vehículo reporta robo' + : 'El vehículo no reporta robo'; + + // Obtener datos del vehículo + $vehicleData = $this->getVehicle(); + + $vehicle = Vehicle::updateOrCreate( + ['placa' => $vehicleData['PLACA']], + [ + 'modelo' => $vehicleData['MODELO'], + 'marca' => $vehicleData['MARCA'], + 'nrpv' => $vehicleData['NUMERO_SERIE'], + ] + ); + + // Crear registro con folio + vehicle_id + $record = Record::create([ + 'folio' => $folio, + 'vehicle_id' => $vehicle->id, + 'user_id' => auth()->id() ?? null, + ]); + + //Responder al cliente + return ApiResponse::OK->response([ + 'folio' => $folio, + 'stolen' => $isStolen, + 'message' => $stolenMessage, + 'vehicle' => [ + 'id' => $vehicle->id, + 'placa' => $vehicleData['PLACA'], + 'modelo' => $vehicleData['MODELO'], + 'marca' => $vehicleData['MARCA'], + 'numero_serie' => $vehicleData['NUMERO_SERIE'], + 'color' => $vehicleData['COLOR'], + 'tipo' => $vehicleData['TIPO'], + 'linea' => $vehicleData['LINEA'], + ], + 'record_id' => $record->id, + 'created_at' => $record->created_at->toDateTimeString(), + ]); + } + + private function getVehicle(): array + { + return [ "ANIO_PLACA" => "2020", "PLACA" => "WNU700B", "NO_SERIE" => "LSGHD52H0ND032457", @@ -45,59 +95,7 @@ public function information() "SERIE_FOLIO" => "D3962243", "SFOLIO" => "3962243" ]; - - return ApiResponse::OK->response($data); - } - - public function store(Request $request) - { - $data = $request->all(); - $data['id'] = rand(01, 1000); - $data['created_at'] = now()->toDateTimeString(); - - return ApiResponse::CREATED->response([ - 'message' => 'Información almacenada correctamente', 'Registro' => $data - ]); - } - - public function update(Request $request, $id) - { - $data = $this->information(); - $updata['id'] = $id; - $updata['updated_at'] = now()->toDateTimeString(); - - return ApiResponse::OK->response([ - 'message' => 'Información actualizada correctamente', - 'data' => $updata - ]); - } - - public function delete($id) - { - return ApiResponse::OK->response(); } - public function stolen(Request $request) - { - $vehicleId = $request->input('epc'); - - if (!$vehicleId) { - return ApiResponse::BAD_REQUEST->response([ - 'message' => 'El parámetro epc es requerido' - ]); - } - - $isStolen = (bool) rand(0, 1); - - $response = [ - 'stolen' => $isStolen, - 'message' => $isStolen - ? 'El vehículo reporta robo' - : 'El vehículo no reporta robo', - 'date' => now()->toDateTimeString() - ]; - - return ApiResponse::OK->response($response); - } } diff --git a/app/Http/Requests/Repuve/VehicleRequest.php b/app/Http/Requests/Repuve/VehicleRequest.php new file mode 100644 index 0000000..bb74f55 --- /dev/null +++ b/app/Http/Requests/Repuve/VehicleRequest.php @@ -0,0 +1,28 @@ + ['required', 'string', 'max:50'], + ]; + } + + public function messages(): array + { + return [ + 'folio.required' => 'El folio es requerido', + 'folio.string' => 'El folio debe ser una cadena de texto', + 'folio.max' => 'El folio no puede exceder 50 caracteres', + ]; + } +} diff --git a/app/Models/Record.php b/app/Models/Record.php index c85a742..bb90ec5 100644 --- a/app/Models/Record.php +++ b/app/Models/Record.php @@ -10,6 +10,7 @@ class Record extends Model use HasFactory; protected $fillable = [ + 'folio', 'vehicle_id', 'user_id', 'error_id', diff --git a/database/migrations/2025_10_18_140100_create_devices_table.php b/database/migrations/2025_10_18_140100_create_devices_table.php index 7ec2729..def4e42 100644 --- a/database/migrations/2025_10_18_140100_create_devices_table.php +++ b/database/migrations/2025_10_18_140100_create_devices_table.php @@ -13,7 +13,6 @@ public function up(): void { Schema::create('devices', function (Blueprint $table) { $table->id(); - $table->foreignId('type_id')->nullable()->constrained('device_types')->nullOnDelete(); $table->string('brand'); $table->string('serie')->unique(); $table->boolean('status')->default(true); diff --git a/database/migrations/2025_10_18_140600_create_vehicle_table.php b/database/migrations/2025_10_18_140600_create_vehicle_table.php index 596fed9..f721f1d 100644 --- a/database/migrations/2025_10_18_140600_create_vehicle_table.php +++ b/database/migrations/2025_10_18_140600_create_vehicle_table.php @@ -13,10 +13,34 @@ public function up(): void { Schema::create('vehicle', function (Blueprint $table) { $table->id(); - $table->string('placa')->unique(); - $table->string('modelo'); - $table->string('marca'); - $table->string('nrpv')->unique()->nullable(); // Número REPUVE + $table->string('anio_placa')->nullable(); + $table->string('placa')->unique()->nullable(); + $table->string('numero_serie')->unique()->nullable(); + $table->string('rfc')->nullable(); + $table->string('vigencia')->nullable(); + $table->string('fecha_impresion')->nullable(); + $table->string('qr_hash')->nullable(); + $table->boolean('valido')->nullable(); + $table->boolean('foliotemp')->nullable(); + $table->string('nombre')->nullable(); + $table->string('nombre2')->nullable(); + $table->string('municipio')->nullable(); + $table->string('localidad')->nullable(); + $table->string('calle')->nullable(); + $table->string('calle2')->nullable(); + $table->string('tipo')->nullable(); + $table->string('tipo_servicio')->nullable(); + $table->string('marca')->nullable(); + $table->string('linea')->nullable(); + $table->string('sublinea')->nullable(); + $table->string('modelo')->nullable(); + $table->string('numero_motor')->nullable(); + $table->string('descripcion_origen')->nullable(); + $table->string('color')->nullable(); + $table->string('codigo_postal')->nullable(); + $table->string('serie_folio')->unique()->nullable(); + $table->string('sfolio')->unique()->nullable(); + $table->string('nrpv')->unique()->nullable(); $table->foreignId('owner_id')->nullable()->constrained('owners')->nullOnDelete(); $table->timestamps(); }); diff --git a/database/migrations/2025_10_18_140900_create_records_table.php b/database/migrations/2025_10_18_140900_create_records_table.php index 6c83467..4883806 100644 --- a/database/migrations/2025_10_18_140900_create_records_table.php +++ b/database/migrations/2025_10_18_140900_create_records_table.php @@ -13,6 +13,7 @@ public function up(): void { Schema::create('records', function (Blueprint $table) { $table->id(); + $table->string('folio'); $table->foreignId('vehicle_id')->constrained('vehicle')->cascadeOnDelete(); $table->foreignId('user_id')->constrained('users')->cascadeOnDelete(); $table->foreignId('error_id')->nullable()->constrained('errors')->nullOnDelete(); diff --git a/routes/api.php b/routes/api.php index 06b466d..89d1579 100644 --- a/routes/api.php +++ b/routes/api.php @@ -19,14 +19,10 @@ /** Rutas protegidas (requieren autenticación) */ Route::middleware('auth:api')->group(function() { // Tus rutas protegidas - Route::post('stolen', [RepuveController::class, 'stolen']); + Route::post('consultar', [RepuveController::class, 'consultarVehiculo']); }); /** Rutas públicas */ // Tus rutas públicas -Route::get('information', [RepuveController::class, 'information']); -Route::post('information', [RepuveController::class, 'store']); -Route::put('information/{id}', [RepuveController::class, 'update']); -Route::delete('information/{id}', [RepuveController::class, 'delete']);