GYMPRO es un sistema de backend robusto y escalable diseñado para centralizar y automatizar las operaciones diarias de un gimnasio. La plataforma permite una administración integral de personal y clientes, facilitando el control de altas, bajas y la organización de actividades deportivas en tiempo real.
API REST profesional para la gestión integral de entrenamientos y usuarios
Características • Instalación • Análisis de Datos • API • Despliegue
Proporcionar una herramienta administrativa eficiente que permita gestionar el ciclo de vida de usuarios (alumnos, entrenadores y administradores) y la programación de clases, garantizando la integridad de los datos mediante una arquitectura moderna y segura.
¿Qué representa este diagrama? Este esquema define la arquitectura relacional de la base de datos de GYMPRO.
Se basa en una estructura de cuatro entidades clave interconectadas que permiten el flujo
de información entre el personal administrativo, los instructores y los alumnos.
users Es la tabla maestra. Almacena la identidad de cada persona (nombre, email, hash de contraseña)
y define su permiso mediante un campo role (Admin/User/Entrenador).
trainers Una extensión de la tabla de usuarios. Aquí se guarda la información específica de los
profesionales, como su specialty, vinculándolos directamente a su perfil de usuario.
classes El catálogo de actividades disponibles. Define el nombre y la descripción de
cada entrenamiento ofrecido por el gimnasio.
user_class La tabla de unión (Many-to-Many). Es el motor del sistema, ya que conecta a un
usuario (alumno) con una clase específica y le asigna un entrenador responsable.
1. Integridad Referencial La base de datos evita la duplicidad de información. Si un entrenador cambia su especialidad,
se actualiza en un solo lugar y se refleja en todo el sistema automáticamente.
2. Escalabilidad de Roles El diseño permite separar la lógica de un usuario común de la de un entrenador,
facilitando la adición de nuevos perfiles profesionales en el futuro.
3. Trazabilidad Total Permite saber exactamente qué alumnos están inscritos en cada clase y quién es el
instructor a cargo, facilitando reportes de asistencia y desempeño.
4. Seguridad de Datos La separación de credenciales permite implementar políticas de seguridad (JWT)
de manera centralizada, protegiendo la información sensible del gimnasio.
👥 Gestión de Usuarios y Roles
- ✅ CRUD Completo: Registro, consulta, edición y eliminación de Alumnos, Entrenadores y Administradores.
- ✅ Control de Estado: Visualización y gestión de usuarios activos e inactivos (altas/bajas).
- ✅ Sistema de Roles: Permisos diferenciados según el tipo de perfil dentro del sistema.
📅 Control de Actividades
- ✅ Gestión de Clases: Registro de clases, modificación, desactivación
- ✅ Asignaciones: Vinculación directa de entrenadores a clases específicas y alumnos
🛡️ Persistencia y Seguridad
- ✅ Sincronización Real-Time: Integración con Supabase para actualización instantánea de datos.
- ✅ Validación Estricta: Uso de Pydantic para asegurar que los datos de entrada cumplan con los requisitos del negocio.
- ✅ Seguridad JWT: Infraestructura preparada para la validación de tokens y protección de rutas.
| Categoría | Tecnologías |
|---|---|
| Runtime | Python 3.10+ |
| Framework | FastAPI |
| Base de Datos | Supabase (PostgreSQL) |
| ORM | SQLAlchemy |
| Validación | Pydantic |
| Contenerización | Docker, Docker Compose |
| Servidor ASGI | Uvicorn |
1️⃣ Clonar el repositorio bash git clone Server GymPro
Configurar variables de entorno Crea un archivo .env en la raíz del proyecto con tus credenciales de Supabase:
- SUPABASE_URL=tu_url_de_supabase
- SUPABASE_KEY=tu_anon_key
- DATABASE_URL=postgresql://postgres:password@db.supabase.co:5432/postgres
3️⃣ Instalar dependencias Bash pip install -r requirements.txt
4️⃣ Ejecutar la aplicación
Bash uvicorn app:app --reload 💡 La documentación automática estará disponible en: http://localhost:8000/docs
El proyecto está completamente preparado para entornos de contenedores, lo que garantiza que funcione de manera idéntica en cualquier máquina.
Dockerfile: Configura la imagen base de Python, instala dependencias y optimiza el entorno de ejecución.
Docker Compose: Orquesta el backend, mapea los puertos (8000:8000) y carga automáticamente las variables de entorno.
Bash
docker-compose build
docker-compose up -d
📁 Estructura del Proyecto/ Server GymPro
GYMPRO-BACKEND/
├── src/
│ ├── routes/ # Endpoints de la API (usuarios, clases, entrenadores)
│ ├── controllers/ # Lógica de negocio (Cerebro que une rutas y modelos)
│ ├── models/ # Modelos de base de datos (SQLAlchemy)
│ ├── schemas/ # Validación de datos entrada/salida (Pydantic)
│ ├── database/ # Conexión a Supabase y configuración de DB
│ ├── core/ # Seguridad (Validación de JWT, Roles y permisos)
│ ├── config/ # Ajustes globales (Variables de entorno, CORS)
│ ├── utils/ # Funciones de apoyo (Exportación CSV, Helpers)
├── tests/ # Pruebas unitarias y de integración
├── docs/ # Especificaciones técnicas adicionales
├── .github/workflows/ # Automatización y CI/CD
├── Dockerfile # Configuración de imagen Docker
├── docker-compose.yml # Orquestación de contenedores
└── requirements.txt # Dependencias del proyecto
npm run dev (o el comando equivalente en Python):
uvicorn app:app --reload: Inicia el servidor de desarrollo.
pytest: Ejecuta la suite de pruebas.
docker-compose up: Levanta la infraestructura completa.
###👩💻 Equipo de Desarrollo Juan Manuel - Iris - Gema -Naiza
http://localhost:8000
| Método | Endpoint | Descripción | Auth |
|---|---|---|---|
| POST | /auth/login |
Iniciar sesión y obtener token | ❌ |
| GET | /users |
Listar todos los usuarios (Alumnos/Entrenadores) | ✅ Admin |
| POST | /users |
Crear un nuevo usuario | ✅ Admin |
| GET | /users/:id |
Obtener detalle de un usuario específico | ✅ Admin |
| DELETE | /users/:id |
Dar de baja a un usuario | ✅ Admin |
Ejemplo: Crear Usuario (Alumno/Entrenador)
POST /users
json { "username": "jdoe_gym", "email": "jdoe@example.com", "full_name": "John Doe", "role": "alumno", "status": "activo", "password": "SecurePassword123" }
todas las clases programadas
✅ AdminPUT/classes/:id Actualizar horario o entrenador de una clase ✅ AdminDELETE/classes/:id Cancelar/Eliminar una clase ✅ AdminEjemplo: Crear ClasePOST /classesJSON{
"name": "Crossfit Avanzado", "schedule": "2024-05-20T10:00:00", "trainer_id": 5, "capacity": 20, "room": "Sala A" }
- ✅ Validación de Datos: Cada entrada es filtrada por modelos de Pydantic para evitar datos corruptos.
- ✅ Haseo de Contraseñas: Las claves nunca se guardan en texto plano, usamos algoritmos de encriptación fuerte.
- ✅ Protección de Rutas: Middleware especializado que verifica el rol del usuario antes de permitir acciones CRUD.
- ✅ CORS: Configurado para permitir peticiones únicamente desde el dominio de tu Frontend oficial``
- Gema
- Juan Manuel
- Iris
- Naiza
Entender cómo funciona un CRUD (Create, Read, Update, Delete), que representa las cuatro funciones básicas de la gestión de datos en cualquier aplicación profesional.
