Console README with usage instructions, keybindings reference, architecture overview, and test commands. Updated root README with console section, updated architecture diagram, and installation instructions. Includes approved design doc and implementation plan. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
343 lines
11 KiB
Markdown
343 lines
11 KiB
Markdown
# Autoparts DB
|
|
|
|
Sistema completo de gestión de base de datos de vehículos y autopartes con dashboard web, herramientas de web scraping y múltiples interfaces de consulta.
|
|
|
|
## Descripción
|
|
|
|
**Autoparts DB** es una solución integral para la gestión de información de vehículos que incluye:
|
|
|
|
- Base de datos SQLite normalizada con información de marcas, modelos, motores y años
|
|
- Dashboard web moderno y responsivo para consultar y explorar datos
|
|
- Herramientas de web scraping para recopilar datos de RockAuto.com
|
|
- Interfaces de línea de comandos (CLI) y programática
|
|
- Scripts de utilidad para gestión y mantenimiento de datos
|
|
|
|
## Estadísticas de la Base de Datos
|
|
|
|
| Elemento | Cantidad |
|
|
|----------|----------|
|
|
| Marcas | 12 |
|
|
| Modelos | 10,923 |
|
|
| Motores | 10,919 |
|
|
| Combinaciones modelo-año-motor | 12,075 |
|
|
|
|
## Tecnologías Utilizadas
|
|
|
|
### Backend
|
|
- **Python 3** - Lenguaje principal
|
|
- **SQLite 3** - Base de datos
|
|
- **Flask 2.3.3** - Framework web
|
|
- **BeautifulSoup4** - Web scraping
|
|
- **requests** - HTTP client
|
|
- **lxml** - Parser XML/HTML
|
|
|
|
### Frontend
|
|
- **HTML5** - Estructura
|
|
- **Bootstrap 5.3.0** - Framework CSS
|
|
- **JavaScript (ES6+)** - Lógica cliente
|
|
- **Font Awesome 6.0.0** - Iconos
|
|
|
|
## Estructura del Proyecto
|
|
|
|
```
|
|
Autopartes/
|
|
├── vehicle_database/ # Sistema principal de base de datos
|
|
│ ├── sql/
|
|
│ │ └── schema.sql # Esquema de la base de datos
|
|
│ ├── scripts/
|
|
│ │ ├── database_manager.py # Gestión de la BD
|
|
│ │ ├── query_interface.py # Interfaz CLI
|
|
│ │ └── csv_importer.py # Importador CSV
|
|
│ ├── data/
|
|
│ │ ├── brands.csv # Datos de marcas
|
|
│ │ ├── engines.csv # Datos de motores
|
|
│ │ └── models.csv # Datos de modelos
|
|
│ ├── vehicle_database.db # Base de datos SQLite
|
|
│ └── setup.sh # Script de inicialización
|
|
│
|
|
├── dashboard/ # Interfaz web
|
|
│ ├── server.py # Backend Flask
|
|
│ ├── index.html # Frontend HTML
|
|
│ ├── dashboard.js # Lógica JavaScript
|
|
│ └── start_dashboard.sh # Script de inicio
|
|
│
|
|
├── console/ # Consola Pick/VT220
|
|
│ ├── main.py # Punto de entrada
|
|
│ ├── db.py # Capa de datos abstracta
|
|
│ ├── core/ # Framework (app, screens, nav, keys)
|
|
│ ├── screens/ # 14 pantallas (menú, CRUD, búsqueda)
|
|
│ ├── renderers/ # VT220 (curses) y moderno (Rich)
|
|
│ ├── utils/ # Formato y API VIN
|
|
│ └── tests/ # 116 tests
|
|
│
|
|
├── vehicle_scraper/ # Herramientas de web scraping
|
|
│ ├── rockauto_scraper.py # Scraper RockAuto
|
|
│ ├── rockauto_scraper_v2.py # Scraper mejorado
|
|
│ ├── scrape_toyota.py # Scraper Toyota
|
|
│ ├── scrape_nissan_ford_chevrolet.py
|
|
│ └── manual_input.py # Ingreso manual
|
|
│
|
|
├── add_*.py # Scripts para agregar datos
|
|
├── remove_*.py # Scripts de limpieza
|
|
└── QUICK_START.sh # Guía rápida de inicio
|
|
```
|
|
|
|
## Consola Pick/VT220
|
|
|
|
Interfaz de terminal inspirada en los sistemas Pick/D3, 100% operada con teclado. Incluye dos modos de visualización:
|
|
|
|
- **VT220** (curses): Terminal clásica verde sobre negro con caracteres de caja
|
|
- **Modern** (Rich): Interfaz moderna con colores y estilos TUI
|
|
|
|
```bash
|
|
# Modo clásico VT220
|
|
python -m console
|
|
|
|
# Modo moderno
|
|
python -m console --mode modern
|
|
```
|
|
|
|
Funcionalidades: navegación por vehículo (marca→modelo→año→motor), búsqueda por número de parte, búsqueda full-text, decodificador VIN (NHTSA), catálogo por categorías, comparador OEM vs aftermarket, y administración CRUD completa.
|
|
|
|
116 tests automatizados. Ver [`console/README.md`](console/README.md) para documentación completa.
|
|
|
|
## Instalación
|
|
|
|
### Requisitos Previos
|
|
|
|
- Python 3.8 o superior
|
|
- pip (gestor de paquetes de Python)
|
|
|
|
### Pasos de Instalación
|
|
|
|
1. **Clonar el repositorio**
|
|
```bash
|
|
git clone https://git.consultoria-as.com/[usuario]/Autoparts-DB.git
|
|
cd Autoparts-DB
|
|
```
|
|
|
|
2. **Instalar dependencias**
|
|
```bash
|
|
pip install flask requests beautifulsoup4 lxml
|
|
pip install rich # Opcional: para modo moderno de consola
|
|
```
|
|
|
|
3. **Inicializar la base de datos (opcional - ya incluye datos)**
|
|
```bash
|
|
cd vehicle_database
|
|
./setup.sh
|
|
```
|
|
|
|
## Uso
|
|
|
|
### Iniciar el Dashboard Web
|
|
|
|
```bash
|
|
cd dashboard
|
|
python3 server.py
|
|
```
|
|
|
|
El dashboard estará disponible en: `http://localhost:5000`
|
|
|
|
### Iniciar la Consola Pick/VT220
|
|
|
|
```bash
|
|
python -m console # Modo VT220 (clásico)
|
|
python -m console --mode modern # Modo moderno (Rich)
|
|
```
|
|
|
|
### Usar la Interfaz CLI Legacy
|
|
|
|
```bash
|
|
cd vehicle_database/scripts
|
|
python3 query_interface.py
|
|
```
|
|
|
|
### Ejecutar Web Scraping
|
|
|
|
```bash
|
|
cd vehicle_scraper
|
|
python3 rockauto_scraper_v2.py
|
|
```
|
|
|
|
### Agregar Datos Manualmente
|
|
|
|
```bash
|
|
cd vehicle_scraper
|
|
python3 manual_input.py
|
|
```
|
|
|
|
## API REST
|
|
|
|
El dashboard expone los siguientes endpoints:
|
|
|
|
| Endpoint | Método | Descripción |
|
|
|----------|--------|-------------|
|
|
| `/api/brands` | GET | Obtiene todas las marcas |
|
|
| `/api/models?brand=X` | GET | Obtiene modelos por marca |
|
|
| `/api/years` | GET | Obtiene años disponibles |
|
|
| `/api/engines` | GET | Obtiene motores disponibles |
|
|
| `/api/vehicles` | GET | Búsqueda con filtros |
|
|
|
|
### Ejemplo de Uso
|
|
|
|
```bash
|
|
# Obtener todas las marcas
|
|
curl http://localhost:5000/api/brands
|
|
|
|
# Buscar vehículos por marca y año
|
|
curl "http://localhost:5000/api/vehicles?brand=Toyota&year=2020"
|
|
```
|
|
|
|
## Esquema de Base de Datos
|
|
|
|
### Tablas
|
|
|
|
#### brands
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | INTEGER | Clave primaria |
|
|
| name | TEXT | Nombre de la marca |
|
|
| country | TEXT | País de origen |
|
|
| founded_year | INTEGER | Año de fundación |
|
|
|
|
#### models
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | INTEGER | Clave primaria |
|
|
| brand_id | INTEGER | FK a brands |
|
|
| name | TEXT | Nombre del modelo |
|
|
| body_type | TEXT | Tipo de carrocería |
|
|
| generation | TEXT | Generación |
|
|
| production_start_year | INTEGER | Año inicio producción |
|
|
| production_end_year | INTEGER | Año fin producción |
|
|
|
|
#### engines
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | INTEGER | Clave primaria |
|
|
| name | TEXT | Nombre del motor |
|
|
| displacement_cc | INTEGER | Cilindrada en cc |
|
|
| cylinders | INTEGER | Número de cilindros |
|
|
| fuel_type | TEXT | Tipo de combustible |
|
|
| power_hp | INTEGER | Potencia en HP |
|
|
| torque_nm | INTEGER | Torque en Nm |
|
|
| engine_code | TEXT | Código del motor |
|
|
|
|
#### years
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | INTEGER | Clave primaria |
|
|
| year | INTEGER | Año |
|
|
|
|
#### model_year_engine
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | INTEGER | Clave primaria |
|
|
| model_id | INTEGER | FK a models |
|
|
| year_id | INTEGER | FK a years |
|
|
| engine_id | INTEGER | FK a engines |
|
|
| trim_level | TEXT | Nivel de equipamiento |
|
|
| drivetrain | TEXT | Tracción |
|
|
| transmission | TEXT | Transmisión |
|
|
|
|
### Diagrama de Relaciones
|
|
|
|
```
|
|
brands ──┐
|
|
│
|
|
├──< models ──┐
|
|
│ │
|
|
years ───┼─────────────┼──< model_year_engine
|
|
│ │
|
|
engines ─┴─────────────┘
|
|
```
|
|
|
|
## Scripts Disponibles
|
|
|
|
### Scripts de Datos
|
|
|
|
| Script | Descripción |
|
|
|--------|-------------|
|
|
| `add_toyota_data.py` | Agrega datos de Toyota |
|
|
| `add_honda_data.py` | Agrega datos de Honda |
|
|
| `add_nissan_data.py` | Agrega datos de Nissan |
|
|
| `add_ford_data.py` | Agrega datos de Ford |
|
|
| `add_chevrolet_data.py` | Agrega datos de Chevrolet |
|
|
| `add_audi_data.py` | Agrega datos de Audi |
|
|
| `add_acura_data.py` | Agrega datos de Acura |
|
|
| ... | Y más marcas |
|
|
|
|
### Scripts de Mantenimiento
|
|
|
|
| Script | Descripción |
|
|
|--------|-------------|
|
|
| `remove_brands_and_cleanup.py` | Limpia marcas innecesarias |
|
|
| `check_and_remove_brands.py` | Verifica y elimina marcas |
|
|
|
|
## Funcionalidades del Dashboard
|
|
|
|
### Panel de Filtros
|
|
- Selección de marca
|
|
- Selección de modelo (dinámico según marca)
|
|
- Filtro por año
|
|
- Filtro por motor
|
|
|
|
### Panel de Resultados
|
|
- Visualización en tarjetas
|
|
- Información detallada del vehículo
|
|
- Especificaciones del motor
|
|
- Datos de transmisión y tracción
|
|
|
|
### Características
|
|
- Diseño responsivo
|
|
- Actualización en tiempo real
|
|
- Animaciones y transiciones suaves
|
|
- Soporte para múltiples idiomas
|
|
|
|
## Arquitectura del Sistema
|
|
|
|
```
|
|
┌─────────────────┐ ┌──────────────────┐
|
|
│ RockAuto.com │────>│ Web Scraper │
|
|
└─────────────────┘ └────────┬─────────┘
|
|
│
|
|
v
|
|
┌─────────────────┐ ┌──────────────────┐
|
|
│ Manual Input │────>│ SQLite Database │
|
|
└─────────────────┘ └────────┬─────────┘
|
|
│
|
|
┌───────────────────────┼───────────────────────┐
|
|
│ │ │
|
|
v v v
|
|
┌─────────────────┐ ┌──────────────────┐ ┌──────────────────┐
|
|
│ Flask API │ │ Pick Console │ │ CSV Importer │
|
|
└────────┬────────┘ │ (VT220/Rich) │ └──────────────────┘
|
|
│ └──────────────────┘
|
|
v
|
|
┌─────────────────┐
|
|
│ Web Dashboard │
|
|
│ (Browser) │
|
|
└─────────────────┘
|
|
```
|
|
|
|
## Contribuir
|
|
|
|
1. Fork el repositorio
|
|
2. Crea una rama para tu feature (`git checkout -b feature/nueva-funcionalidad`)
|
|
3. Commit tus cambios (`git commit -am 'Agrega nueva funcionalidad'`)
|
|
4. Push a la rama (`git push origin feature/nueva-funcionalidad`)
|
|
5. Crea un Pull Request
|
|
|
|
## Licencia
|
|
|
|
Este proyecto es de uso interno.
|
|
|
|
## Contacto
|
|
|
|
Para más información, contactar al equipo de desarrollo.
|
|
|
|
---
|
|
|
|
**Autoparts DB** - Sistema de Gestión de Base de Datos de Vehículos
|