Sistema de gestión integral para gimnasios desarrollado con Python Flask, SQLAlchemy y MySQL.
El proyecto sigue un patrón modular utilizando Blueprints para facilitar la escalabilidad:
Backend_MYSGYM/
├── app/ # Lógica principal de la aplicación
│ ├── routes/ # Blueprints (Auth, Gym, Usuarios, etc.)
│ ├── models.py # Modelos de SQLAlchemy
│ ├── utils.py # Decoradores y utilidades de seguridad
│ └── __init__.py # Factory de la aplicación
├── database/ # Volumen de persistencia de MySQL (Docker)
├── docs/ # Documentación detallada (Épicas, Diagramas, E/R)
├── migrations/ # Migraciones de la base de datos
├── scripts/ # Scripts de utilidad (Carga de datos/Seed)
├── tests/ # Pruebas unitarias y de integración
├── database_schema.sql # Script SQL completo de la DB
├── docker-compose.yml # Orquestación de contenedores
├── app.py # Punto de entrada de la aplicación
└── requirements.txt # Dependencias del proyecto
- Framework: Flask
- Base de Datos: MySQL 8.0 (Dockerizado)
- ORM: SQLAlchemy + Flask-Migrate
- Seguridad: Flask-JWT-Extended (Roles: Cliente, Monitor, Admin)
Antes de instalar el proyecto, asegúrate de tener:
- Python 3.12+
- Docker
- Docker Compose
- Git
Sigue estos pasos para configurar el proyecto en un ordenador nuevo desde cero:
Abre una terminal y descarga el código:
git clone <URL_DEL_REPO>
cd Backend_MYSGYMSi trabajas en tu equipo, puedes usar MySQL con Docker como hasta ahora:
docker-compose up -dLa base de datos estará disponible en localhost:3307.
En Render, el backend puede usar una base externa de PostgreSQL y recibe su conexión desde DATABASE_URL.
Crea un archivo llamado .env en la raíz del proyecto con el siguiente contenido base:
DB_HOST=localhost
DB_PORT=3307
DB_USER=root
DB_PASSWORD=root_password
DB_NAME=gimnasio
JWT_SECRET_KEY=super-secret-keySi despliegas en Render, no necesitas definir DB_HOST, DB_PORT, DB_USER, DB_PASSWORD ni DB_NAME si DATABASE_URL ya está presente.
En Windows:
python -m venv .venv
.\.venv\Scripts\activateEn macOS/Linux:
python3 -m venv .venv
source .venv/bin/activatepip install -r requirements.txtPara insertar datos iniciales (salas, empleados, actividades) en la base de datos:
python seed_db.pypython app.pyEl servidor estará disponible en http://localhost:8000.
- seed_db.py: Script principal para poblar la base de datos con información didáctica inicial.
- database_schema.sql: Esquema completo de la base de datos (se ejecuta automáticamente en el primer
docker-compose up).
Este repositorio incluye un blueprint en render.yaml para publicar una sola app web en Render sin crear una base gestionada de pago:
- La raíz
/sirve la interfaz web unificada. - La API sigue disponible en
/apiy en los blueprints existentes (/auth,/usuarios,/gym, etc.). DATABASE_URLse configura manualmente en el Web Service y apunta a una PostgreSQL externa.
Resumen del flujo:
- Conecta el repositorio en Render como Web Service.
- Deja que Render lea render.yaml.
- Añade la variable de entorno
DATABASE_URLcon la cadena de conexión de tu PostgreSQL externa. - Abre la URL pública del Web Service: ese será el único enlace del proyecto.
El proyecto incluye pruebas automatizadas con pytest para validar el estado de la base de datos y el flujo de integración.
- La prueba principal de integración en tests/test_db.py usa una base SQLite temporal, crea las tablas desde los modelos y verifica tablas, columnas y claves foráneas importantes.
- La configuración de pytest.ini ignora
database/durante la recolección, evitando errores por archivos internos de MySQL.
.venv/bin/python -m pytest -qPara generar un reporte HTML detallado:
.venv/bin/python -m pytest -q --html=reporte.htmlPara medir cobertura de código:
.venv/bin/python -m pytest -q --cov=app --cov-report=html --cov-report=termPara análisis estático de código:
.venv/bin/python -m pylint app/ --output-format=parseable
.venv/bin/python -m pylint app/ --disable=missing-docstringEl progreso de cada prueba se guarda automáticamente en test_progress.log con fecha y hora (hook configurado en tests/conftest.py).
Los reportes HTML se generan en:
reporte.html— Detalles de ejecución de pruebashtmlcov/— Cobertura de código por línea y módulo
Pylint evalúa la calidad del código en pylint_report.txt con puntuación y recomendaciones.
Desarrollado para el proyecto final de MYSGYM.
