Aplicación web full-stack para la consulta, almacenamiento y visualización de datos históricos de fútbol. Permite explorar competiciones, equipos, partidos y estadísticas a través de una interfaz interactiva.
- Inicio: Mapa mundial interactivo conLeaflet, visualización de goles por competencia, últimos partidos registrados
- Competiciones: Exploración de ligas europeas y sudamericanas con estadísticas detalladas
- Equipos: Información de equipos con gráficos de rendimiento histórico (goles y partidos por año)
- Enfrentamientos: Historial de partidos entre equipos, victorias, empates y mayores goleadas
- Comparaciones: Comparación de estadísticas entre equipos con gráficos temporales
- React 19 con Vite
- React Router - Navegación
- Axios - Cliente HTTP
- Chart.js + react-chartjs-2 - Gráficos
- Framer Motion - Animaciones
- Leaflet + react-leaflet - Mapas interactivos
- React Select - Selectores con estilos custom
- Typewriter Effect - Efecto de escritura
- Node.js + Express
- MongoDB con Mongoose - Base de datos
- Firebase Admin - Autenticación/Servicios Google
- Axios - Consumo de APIs externas
- Fast-CSV - Procesamiento de archivos CSV
- Dotenv - Variables de entorno
- MongoDB Atlas - Cluster en la nube
- Mongoose ODM - Modelado de datos
- Besoccer API - Datos de competiciones, partidos y equipos
ProyectoBaseDeDatos/
├── backend/
│ ├── controllers/
│ │ ├── api.js # Controlador para consumo de API Besoccer
│ │ ├── dataBase.js # Controlador para operaciones CRUD en MongoDB
│ │ └── validator.js # Validación y transformación de datos
│ ├── models/
│ │ ├── db_connection.js # Conexión a MongoDB
│ │ ├── matchModel.js # Schema de partidos (Mongoose)
│ │ ├── routes.js # Rutas de la API REST
│ │ └── dataset/
│ │ └── games.csv # Dataset histórico de partidos
│ ├── config.env # Variables de entorno (API keys, DB connection)
│ ├── package.json
│ └── server.js # Entry point del servidor Express
│
├── frontend/
│ ├── components/
│ │ ├── Inicio/ # Página principal con mapa y stats
│ │ ├── Competencias/ # Vista de competiciones
│ │ ├── Equipos/ # Información y stats de equipos
│ │ ├── Comparaciones/ # Comparación entre equipos
│ │ ├── App.jsx # Router principal
│ │ └── header.jsx # Navegación
│ ├── styles/ # Estilos CSS por componente
│ ├── functions/ # Funciones auxiliares
│ ├── package.json
│ └── vite.config.js
│
├── package.json # Workspace root (vacío)
└── README.md
{
date: Number, // Formato YYYYMMDD
teamHome: String,
teamAway: String,
goalsHome: Number,
goalsAway: Number,
competition: String, // "spain", "england", etc.
homeCountry: String,
awayCountry: String,
homeContinent: String,
awayContinent: String,
levelCompetition: String // "national", "international"
}| Método | Endpoint | Descripción |
|---|---|---|
| GET | /database |
Obtener todos los partidos |
| GET | /database/competitions |
Lista de competiciones |
| GET | /database/competitionsInfo |
Info de competiciones con goles totales |
| GET | /database/matchDetail/:league/:year |
Partidos por liga y año |
| GET | /database/team/:league/:year |
Equipos por liga |
| GET | /database/goals/:league/:year |
Total de goles por liga/año |
| GET | /database/goalsByTeam/:league/:team |
Goles de un equipo |
| GET | /database/enfrentamiento/:league/:eq1/:eq2 |
Historial entre equipos |
| GET | /database/compareGoals/:league/:y1/:y2/:team1/:team2 |
Comparar goles de equipos |
| DELETE | /database/delete/:league/:year |
Eliminar partidos |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/competitions |
Competiciones disponibles |
| GET | /api/match/:league/:year/:round |
Partidos por jornada |
| GET | /api/team/:league/:year |
Equipos de una liga |
| POST | /api/fill/:league/:year |
Guardar partidos de API a BD |
- Node.js >= 18
- MongoDB Atlas (cuenta gratuita)
- npm o yarn
- Clonar el repositorio
git clone <repo-url>
cd ProyectoBaseDeDatos- Configurar Backend
cd backend
npm install- Configurar variables de entorno
Crear
backend/config.env:
PORT=3000
DB_CONNECTION=mongodb+srv://<user>:<password>@cluster.mongodb.net/futbol-db
RTDB_KEY=your_besoccer_api_key- Configurar Frontend
cd frontend
npm installDesarrollo (ambos servicios)
# Terminal 1 - Backend
cd backend && npm start
# Terminal 2 - Frontend
cd frontend && npm run devEl frontend estará disponible en http://localhost:5173 y el backend en http://localhost:3000.
El proyecto incluye un dataset histórico (backend/models/dataset/games.csv) con partidos de las principales ligas mundiales. Los datos se pueden cargar mediante el endpoint POST /database/fill.
Los datos se actualizan automáticamente cada 10 minutos desde la API de Besoccer para las ligas de España e Inglaterra (2025).
Nota: Este proyecto fue desarrollado como parte de un trabajo académico para la gestión de bases de datos.