API para tracking de entrenamientos con Python, FastAPI, MongoDB, InfluxDB y Grafana.
- Registro de usuarios y autenticación JWT
- CRUD de ejercicios y rutinas
- Registro de entrenamientos (sets, reps, peso)
- Mediciones corporales (peso, medidas) con historial
- Métricas en tiempo real con InfluxDB
- Visualización de progreso con Grafana
- MongoDB: Datos estructurados (usuarios, ejercicios, rutinas)
- InfluxDB: Series temporales (peso, mediciones, volumen levantado, calorías)
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
pip install -r requirements.txtcp .env.example .env
# Edita .env con tus valoresdocker-compose up -dEsto levantará:
- MongoDB en
localhost:27017 - InfluxDB en
localhost:8086 - Grafana en
localhost:3001
- Abre http://localhost:8086
- Usuario:
admin/ Contraseña:adminpassword - El token ya está configurado:
my-super-secret-auth-token - Verifica que esté en tu
.envcomoINFLUXDB_TOKEN
# Opción 1: Directamente con Python
python main.py
# Opción 2: Con Uvicorn (recomendado para desarrollo)
uvicorn main:app --reload --host 0.0.0.0 --port 8000El servidor estará en http://localhost:8000
- API Completa: Ver API_DOCUMENTATION.md para guía detallada
- Swagger UI: http://localhost:8000/docs (documentación interactiva)
- ReDoc: http://localhost:8000/redoc (documentación alternativa)
- Tests: Ver tests/README.md para ejecutar tests
Documentación interactiva en
http://localhost:8000/docs
app/
├── api/
│ └── routes/ # Definición de endpoints
├── core/
│ ├── config.py # Configuración y settings
│ ├── database.py # Conexión MongoDB
│ └── influxdb.py # Conexión InfluxDB
├── models/ # Modelos de datos (MongoDB)
├── schemas/ # Pydantic schemas (validación)
├── services/ # Lógica de negocio
└── utils/ # Funciones auxiliares
main.py # Punto de entrada FastAPI
- email, password_hash, nombre, fecha_registro
- peso_inicial, altura
- nombre, descripción, categoría (pecho, espalda, piernas, etc.)
- tipo (fuerza, cardio, flexibilidad)
- user_id (ejercicios personalizados)
- user_id, fecha, duración
- ejercicios: [{ exercise_id, sets: [{ reps, peso, fecha }] }]
- notas
- UserCreate, UserLogin, UserResponse
- ExerciseCreate, ExerciseUpdate, ExerciseResponse
- WorkoutCreate, WorkoutResponse
- MetricCreate, MetricResponse
Datos que se guardarán como time-series:
- Peso corporal diario
- Volumen total levantado por día/semana
- Calorías quemadas
- Mediciones corporales (cintura, pecho, brazos, piernas)
- Progreso por ejercicio (peso máximo, 1RM estimado)
POST /api/users/register- Registrar usuarioPOST /api/users/login- Login (retorna JWT token)GET /api/users/me- Obtener usuario actual (requiere auth)
GET /api/exercises- Listar todosPOST /api/exercises- Crear nuevoGET /api/exercises/{id}- DetallePUT /api/exercises/{id}- ActualizarDELETE /api/exercises/{id}- Eliminar
POST /api/workouts- Registrar entrenamientoGET /api/workouts- Listar entrenamientos del usuarioGET /api/workouts/{id}- Detalle de entrenamientoPUT /api/workouts/{id}- ActualizarDELETE /api/workouts/{id}- Eliminar
POST /api/metrics/weight- Registrar peso en InfluxDBGET /api/metrics/weight- Obtener historial de pesoPOST /api/metrics/body-measurements- Registrar medicionesGET /api/metrics/volume- Volumen levantado por periodoGET /api/metrics/progress/{exercise_id}- Progreso en ejercicio específico
- API: http://localhost:8000
- Documentación interactiva (Swagger): http://localhost:8000/docs
- Documentación alternativa (ReDoc): http://localhost:8000/redoc
- Grafana: http://localhost:3001 (admin/admin)
- InfluxDB: http://localhost:8086 (admin/adminpassword)
- Estructura de carpetas
- Configuración de package.json
- Variables de entorno (.env.example)
- Docker Compose (MongoDB, InfluxDB, Grafana)
- Conexión a MongoDB
- Conexión a InfluxDB
- Servidor Express básico
- Schema User (Pydantic)
- Modelo User (operaciones MongoDB)
- Utilidades (hash password, create/verify JWT)
- Rutas de autenticación (register, login)
- Dependency para obtener usuario actual
- Schema Exercise (Pydantic)
- Modelo Exercise (CRUD MongoDB)
- Rutas de ejercicios
- Validaciones y permisos
- Schema Workout (Pydantic)
- Modelo Workout (MongoDB)
- Rutas de workouts
- Guardar métricas en InfluxDB automáticamente
- Service para InfluxDB (escribir/leer datos)
- Registro de peso corporal
- Registro de mediciones corporales
- Cálculo de volumen total levantado
- Endpoint de progreso por ejercicio
- Rutas de métricas
- Configurar datasource de InfluxDB en Grafana
- Dashboard de peso corporal
- Dashboard de volumen levantado
- Dashboard de progreso por ejercicio
- Dashboard de frecuencia de entrenamientos
- Manejo de errores centralizado
- Logging (loguru o logging estándar)
- Paginación en endpoints
- Filtros y búsqueda
- Tests unitarios (pytest)
- Documentación API mejorada
Adrián Félix
Software Engineering
Passionate about Android Developer, Full Stack and iOS development and clean architecture.
GitHub: @Elmamis69 Email: guerofelix234@gmail.com
License This project is licensed under the MIT License.