API REST de alto rendimiento diseñada para la gestión y análisis estadístico en tiempo real de partidos de balonmano. Construida con FastAPI, MongoDB Atlas y siguiendo una Arquitectura Hexagonal (Puertos y Adaptadores) para máxima escalabilidad y testabilidad.
- Gestión de Partidos: Control total sobre el estado del partido (Setup, In Progress, Paused, Finished).
- Registro de Eventos: Captura de acciones detalladas (Goles, Paradas, Pérdidas, Exclusiones, etc.).
- Actualización Automática: El marcador se actualiza en tiempo real basándose en los eventos registrados.
- Estadísticas Avanzadas: Cálculos de eficiencia, efectividad de porteros y control de posesión.
- Exportación de Datos: Generación dinámica de reportes en formato CSV.
- Arquitectura Hexagonal: Desacoplamiento total entre la lógica de negocio y la infraestructura.
- Framework: FastAPI (Python 3.13+)
- Base de Datos: MongoDB Atlas
- ODM: Beanie (basado en Motor y Pydantic v2)
- Testing: Pytest con
pytest-asyncio - Contenedores: Docker Ready
git clone https://github.com/josuord33/7metrics_api.git
cd 7metrics_apipython3 -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activatepip install -r requirements.txtCrea un archivo .env en la raíz del proyecto basándote en el archivo .env.example:
MONGODB_URL=mongodb+srv://<usuario>:<password>@<cluster>.mongodb.net/?retryWrites=true&w=majority
DATABASE_NAME=handball_statistics
API_TITLE=7metrics Handball Statistics API
API_VERSION=1.0.0
DEBUG=trueArranca el servidor de desarrollo con recarga automática:
./venv/bin/uvicorn src.main:app --reloadEl servidor estará disponible en: http://localhost:8000
FastAPI genera automáticamente documentación detallada:
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
El proyecto sigue un diseño de Arquitectura Hexagonal:
src/
├── core/ # Capa de Dominio (Pura, sin dependencias externas)
│ ├── domain/ # Entidades (Match, Player, Event) y Enums
│ └── ports/ # Interfaces de repositorios (Protocolos)
├── application/ # Capa de Aplicación (Lógica de Negocio)
│ └── use_cases/ # Casos de uso (Orquestación de la lógica)
├── infrastructure/ # Capa de Infraestructura (Implementaciones externas)
│ ├── persistence/ # MongoDB Repositories y Modelos Beanie
│ ├── api/ # Routers de FastAPI y Controladores
│ └── config/ # Configuración de Settings/Pydantic
└── main.py # Punto de entrada (Composición de la app)
Para ejecutar la suite de pruebas (Unitarias e Integración):
python3 -m pytest tests -vLas pruebas de integración utilizan una base de datos de prueba independiente (test_handball_statistics) para garantizar la integridad de los datos de producción.
- Partidos:
GET /matches,POST /matches,POST /matches/{id}/start - Jugadores:
POST /matches/{id}/players/bulk,GET /matches/{match_id}/players - Eventos:
POST /events,GET /events/{match_id},DELETE /events/last/{match_id} - Estadísticas:
GET /matches/{id}/statistics,GET /matches/{id}/statistics/export/csv
Desarrollado para 7metrics. Todos los derechos reservados.