GitHub - MYSGYMN/Backend_MYSGYM · GitHub
Skip to content

MYSGYMN/Backend_MYSGYM

Repository files navigation

MYSGYM — Backend API

Sistema de gestión integral para gimnasios desarrollado con Python Flask, SQLAlchemy y MySQL.

Estructura del Proyecto

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

Tecnologías utilizadas

  • Framework: Flask
  • Base de Datos: MySQL 8.0 (Dockerizado)
  • ORM: SQLAlchemy + Flask-Migrate
  • Seguridad: Flask-JWT-Extended (Roles: Cliente, Monitor, Admin)

Requisitos previos

Antes de instalar el proyecto, asegúrate de tener:

  • Python 3.12+
  • Docker
  • Docker Compose
  • Git

Instalación paso a paso

Sigue estos pasos para configurar el proyecto en un ordenador nuevo desde cero:

1. Clonar el repositorio

Abre una terminal y descarga el código:

git clone <URL_DEL_REPO>
cd Backend_MYSGYM

2. Levantar la Base de Datos (local)

Si trabajas en tu equipo, puedes usar MySQL con Docker como hasta ahora:

docker-compose up -d

La 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.

3. Configurar Variables de Entorno

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-key

Si despliegas en Render, no necesitas definir DB_HOST, DB_PORT, DB_USER, DB_PASSWORD ni DB_NAME si DATABASE_URL ya está presente.

4. Crear y activar el entorno virtual

En Windows:

python -m venv .venv
.\.venv\Scripts\activate

En macOS/Linux:

python3 -m venv .venv
source .venv/bin/activate

5. Instalar dependencias

pip install -r requirements.txt

6. Cargar datos de prueba (Opcional)

Para insertar datos iniciales (salas, empleados, actividades) en la base de datos:

python seed_db.py

7. Ejecutar el backend

python app.py

El servidor estará disponible en http://localhost:8000.


Scripts de Utilidad

  • 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).

Despliegue en Render

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 /api y en los blueprints existentes (/auth, /usuarios, /gym, etc.).
  • DATABASE_URL se configura manualmente en el Web Service y apunta a una PostgreSQL externa.

Resumen del flujo:

  1. Conecta el repositorio en Render como Web Service.
  2. Deja que Render lea render.yaml.
  3. Añade la variable de entorno DATABASE_URL con la cadena de conexión de tu PostgreSQL externa.
  4. Abre la URL pública del Web Service: ese será el único enlace del proyecto.

Tests

El proyecto incluye pruebas automatizadas con pytest para validar el estado de la base de datos y el flujo de integración.

Qué cubren

  • 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.

Cómo ejecutarlos

.venv/bin/python -m pytest -q

Para generar un reporte HTML detallado:

.venv/bin/python -m pytest -q --html=reporte.html

Para medir cobertura de código:

.venv/bin/python -m pytest -q --cov=app --cov-report=html --cov-report=term

Para análisis estático de código:

.venv/bin/python -m pylint app/ --output-format=parseable
.venv/bin/python -m pylint app/ --disable=missing-docstring

Generación de reportes

El 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 pruebas
  • htmlcov/ — 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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors