API REST para la gestión de entrenamientos de CrossFit y entrenamiento híbrido, con integración de Machine Learning para predicción de rendimiento.
- Backend: Python 3.13, Django, Django REST Framework
- Base de datos: PostgreSQL 15
- Autenticación: JWT (djangorestframework-simplejwt)
- IA/ML: Scikit-Learn, Pandas, NumPy, Joblib
- DevOps: Docker, Docker Compose
- Testing: Pytest, pytest-django — 22 tests
- Frontend: React, Tailwind CSS
- Documentación: drf-spectacular (Swagger/OpenAPI)
- Docker Desktop instalado y corriendo
- Node.js v18+ instalado
- Clona el repositorio:
git clone https://github.com/Alejandro-Iglesias/WODanalytics.git
cd WODanalytics- Crea el archivo
.enven la raíz:
SECRET_KEY=tu_secret_key
DEBUG=1
DB_NAME=wodanalytics
DB_USER=woduser
DB_PASSWORD=wodpass
DB_HOST=db
DB_PORT=5432
- Levanta los contenedores:
docker-compose up --build- Aplica las migraciones:
docker-compose exec api python manage.py migrate- Genera los datos de entrenamiento y entrena el modelo ML:
docker-compose exec api python ml_model/dataset_simulation.py
docker-compose exec api python ml_model/train.py- La API estará disponible en
http://localhost:8000
1. Entra en la carpeta del frontend:
cd frontend2. Instala las dependencias:
npm install3. Arranca el servidor de desarrollo:
npm run dev4. El dashboard estará disponible en http://localhost:5173
| Método | Endpoint | Descripción | Token |
|---|---|---|---|
| POST | /api/v1/auth/register/ |
Registro de nuevos atletas | No |
| POST | /api/v1/auth/token/ |
Login — devuelve Access y Refresh Token | No |
| POST | /api/v1/auth/token/refresh/ |
Refresca el Access Token | No |
| GET | /api/v1/auth/profile/ |
Perfil del atleta autenticado | Sí |
| Método | Endpoint | Descripción | Token |
|---|---|---|---|
| GET | /api/v1/wods/ |
Historial + racha + alerta de fatiga | Sí |
| POST | /api/v1/wods/ |
Registrar un nuevo WOD | Sí |
| GET | /api/v1/wods/{id}/ |
Detalle de un WOD | Sí |
| PUT | /api/v1/wods/{id}/ |
Editar un WOD | Sí |
| DELETE | /api/v1/wods/{id}/ |
Eliminar un WOD | Sí |
| GET | /api/v1/wods/metricas/ |
Métricas de recuperación | Sí |
| POST | /api/v1/wods/metricas/ |
Registrar métricas de recuperación | Sí |
| Método | Endpoint | Descripción | Token |
|---|---|---|---|
| POST | /api/v1/predict/ |
Predicción de rendimiento con ML | Sí |
| POST | /api/v1/predict/retrain/ |
Reentrenamiento del modelo (Admin) | Sí |
- Algoritmo de Rachas: calcula días consecutivos de entrenamiento
- Media Semanal: promedio de entrenamientos en los últimos 7 días
- Alerta de Fatiga: detecta riesgo de sobreentrenamiento analizando volumen de las últimas 48h y métricas de recuperación
- Predicción ML: Random Forest Regressor con R²=0.7469
- Autenticación stateless con JWT
- Aislamiento de datos por usuario
- Validación de contraseñas con expresiones regulares
- Variables de entorno para datos sensibles
docker-compose exec api pytest tests/ -v22 tests cubriendo users, wods y predictions.
wodanalytics/
├── config/ # Configuración Django
├── users/ # App de autenticación y usuarios
├── wods/ # App de entrenamientos y métricas
├── predictions/ # App de predicción ML
├── tests/ # Tests con Pytest
├── docs/ # Documentación
├── ml_model/ # Scripts y modelos de ML
├── frontend/ # Dashboard React + Tailwind CSS
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
- Swagger UI:
http://localhost:8000/api/docs/ - Schema OpenAPI:
http://localhost:8000/api/schema/ - Colección Postman:
docs/WODAnalytics.postman_collection.json - Casos de prueba:
docs/testing.md - Schema OpenAPI:
docs/WODAnalyticsAPI_openapi.yaml
Alejandro Iglesias Estévez — Python Backend Developer LinkedIn · GitHub