Gym App - FastAPI + React
Go to file
Andrés Eduardo García Márquez 16a347ce4c
CI Pipeline / E2E Tests (Playwright) (push) Blocked by required conditions Details
CI Pipeline / Build Docker Images (push) Blocked by required conditions Details
CI Pipeline / Quality Gate (push) Blocked by required conditions Details
CI Pipeline / Backend Tests + Coverage (push) Failing after 15m11s Details
CI Pipeline / Frontend Tests (push) Failing after 12m54s Details
feat: agregar ingress para devops.ingeniumcodex.com
- Certificado SSL automático con Let's Encrypt
- Redirección HTTP → HTTPS (308 Permanent)
- Middleware de redirección para Traefik

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 20:26:49 -05:00
.gitea chore: eliminar workflow antiguo ci-cd.yaml 2025-12-29 18:01:42 -05:00
docs feat: configurar CI/CD completo con cobertura 90% y deploy automático 2025-12-29 18:00:38 -05:00
k8s feat: agregar infraestructura k8s y CI/CD 2025-12-29 13:38:17 -05:00
scripts docs: agregar README principal y smoke test script 2025-12-29 15:10:09 -05:00
src feat: agregar ingress para devops.ingeniumcodex.com 2025-12-29 20:26:49 -05:00
tests test: agregar suite completa de tests 2025-12-29 13:40:47 -05:00
.env.example chore: agregar configuración del proyecto 2025-12-29 13:37:52 -05:00
.gitignore chore: agregar configuración del proyecto 2025-12-29 13:37:52 -05:00
.mcp.json chore: agregar configuración del proyecto 2025-12-29 13:37:52 -05:00
CLAUDE.md chore: agregar configuración del proyecto 2025-12-29 13:37:52 -05:00
DEPLOYMENT.md chore: agregar configuración del proyecto 2025-12-29 13:37:52 -05:00
Dockerfile.backend chore: agregar configuración del proyecto 2025-12-29 13:37:52 -05:00
Dockerfile.frontend chore: actualizar configuración y agregar documentación 2025-12-29 14:33:44 -05:00
README.md docs: agregar README principal y smoke test script 2025-12-29 15:10:09 -05:00
build.sh chore: agregar configuración del proyecto 2025-12-29 13:37:52 -05:00
coverage.json Versión inicial para estabilizar 2025-12-20 21:55:19 -05:00
deploy.sh chore: agregar configuración del proyecto 2025-12-29 13:37:52 -05:00
logs.sh chore: agregar configuración del proyecto 2025-12-29 13:37:52 -05:00
pyproject.toml Versión inicial para estabilizar 2025-12-20 21:55:19 -05:00
start.mini.sh chore: agregar configuración del proyecto 2025-12-29 13:37:52 -05:00
start.sh feat: Enhance admin training plans management 2025-12-23 18:28:58 -05:00
status.sh chore: agregar configuración del proyecto 2025-12-29 13:37:52 -05:00

README.md

💪 Gym App - Plataforma de Gestión de Entrenamientos

Plataforma web/móvil para conectar entrenadores con clientes y gestionar rutinas personalizadas de entrenamiento.

Tests Coverage Python TypeScript


📋 Descripción

Sistema completo para gestión de entrenamientos que permite:

  • Entrenadores: Crear rutinas personalizadas, gestionar clientes, ofrecer servicios
  • Clientes: Seguir rutinas, registrar progreso, contratar entrenadores, ver estadísticas
  • Administradores: Gestión completa de usuarios, configuración de pagos y notificaciones

🚀 Características Principales

👤 Gestión de Usuarios

  • Autenticación JWT con refresh tokens
  • 3 roles: Entrenado, Entrenador, Administrador
  • Perfiles públicos y privados de entrenadores
  • Sistema de verificación de entrenadores

🏋️ Rutinas y Entrenamientos

  • Creación de rutinas personalizadas
  • Asignación de rutinas a clientes
  • Registro de workouts con notas
  • Biblioteca de máquinas y ejercicios

📊 Seguimiento de Progreso

  • Registro de medidas corporales y peso
  • Upload de fotos de progreso
  • Estadísticas avanzadas y gráficos
  • Sistema de logros y badges

🎯 Marketplace

  • Búsqueda y filtrado de entrenadores
  • Sistema de reseñas y calificaciones (1-5 estrellas)
  • Publicación de servicios con precios
  • Contratación directa de entrenadores

💳 Pagos y Suscripciones

  • Múltiples gateways: Wompi, PayPal, ePayco, MercadoPago
  • Webhooks para confirmación automática
  • Fee de 10% en servicios de entrenadores
  • Suscripciones anuales

📱 Notificaciones

  • Push notifications web/móvil
  • Sistema de recordatorios personalizables
  • Chat WebSocket entre trainer-cliente
  • Email multi-cuenta con balanceo

🎮 Gamificación

  • 12 logros desbloqueables
  • Badges por objetivos cumplidos
  • Niveles de usuario
  • Estadísticas competitivas

🏗️ Arquitectura

Stack Tecnológico

Backend:

  • FastAPI (Python 3.11)
  • SQLAlchemy ORM
  • PostgreSQL / SQLite
  • Pydantic para validación
  • APScheduler para tareas programadas

Frontend:

  • React 18 + TypeScript
  • Vite para build
  • TailwindCSS (futuro)
  • Capacitor para móvil (Android/iOS)

Infraestructura:

  • k3s (Kubernetes lightweight)
  • Gitea para CI/CD
  • Docker para imágenes
  • Stalwart Mail Server

Arquitectura Limpia

src/
├── domain/              # Modelos SQLAlchemy + Pydantic
├── application/         # Lógica de negocio (services)
├── infrastructure/      # Repositorios + Gateways externos
│   ├── *_repository.py
│   ├── *_gateway.py     # email, payment, whatsapp
│   ├── docker/
│   ├── k8s/
│   └── cicd/
├── interface/
│   ├── api/            # Routers FastAPI
│   ├── web/            # Frontend React
│   └── movil/          # App Capacitor
├── config/             # Configuración
└── main.py            # Entry point

🚦 Inicio Rápido

Prerrequisitos

  • Python 3.11+ instalado en /opt/python-envs/py
  • Node.js 18+ y npm
  • PostgreSQL 17 (opcional, usa SQLite por defecto)

Instalación

# Clonar repositorio
git clone <repo-url>
cd gym

# Instalar dependencias Python
/opt/python-envs/py/bin/pip install -r src/requirements.txt

# Instalar dependencias frontend
cd src/interface/web
npm install
cd ../../..

# Configurar variables de entorno
cp .env.example .env
# Editar .env con tus credenciales

Ejecución en Desarrollo

# Opción 1: Full stack (backend + frontend)
./start.sh
# Backend: http://localhost:8000
# Frontend: http://localhost:5173

# Opción 2: Solo backend
/opt/python-envs/py/bin/python -m uvicorn src.main:app --reload --port 8000

# Opción 3: Solo frontend
cd src/interface/web && npm run dev

Ejecución en Producción

./start.mini.sh

🧪 Testing

Tests Backend (pytest)

# Todos los tests
TESTING=1 /opt/python-envs/py/bin/python -m pytest tests/ -v

# Con coverage
TESTING=1 /opt/python-envs/py/bin/python -m pytest tests/ --cov=src --cov-report=term

# Solo API tests
TESTING=1 /opt/python-envs/py/bin/python -m pytest tests/interface/api/ -v

Estado: 618 tests, 89% coverage (Ver reporte)

Tests E2E (Playwright)

cd src/interface/web

# Todos los E2E
npm run test:e2e

# Con UI interactiva
npx playwright test --ui

# Ver reporte
npx playwright show-report

Estado: 12 archivos, 35 test cases (Ver cobertura)


📦 Deployment

Docker Compose (Desarrollo)

# Build imágenes
./build.sh

# Levantar servicios
docker-compose -f src/infrastructure/docker/docker-compose.yml up -d

Kubernetes (k3s - Producción)

# Deploy en k3s
kubectl apply -f src/infrastructure/k8s/

# Verificar pods
kubectl get pods -n gym

CI/CD (Gitea)

URL: http://192.168.1.16:30300

# Ver estado CI/CD
./src/infrastructure/cicd/scripts/status.sh

# Push para trigger pipeline
git push gitea main

Ver Guía de Deployment


📚 Documentación

Documentación de Usuario

Documentación Técnica

API Docs


🔐 Variables de Entorno

Crear archivo .env en la raíz (ver .env.example):

# Base de datos
DATABASE_URL=postgresql://gym:gym123@localhost:5432/gym

# Admin inicial
ADMIN_EMAIL=admin@gymapp.com
ADMIN_PASSWORD=Admin123!

# JWT
JWT_SECRET_KEY=<secret_key>
JWT_REFRESH_SECRET_KEY=<refresh_secret_key>

# Email (encriptación obligatoria)
EMAIL_ENCRYPTION_KEY=<fernet_key>

# Pagos
WOMPI_PUBLIC_KEY=pub_...
WOMPI_PRIVATE_KEY=prv_...
PAYPAL_CLIENT_ID=...
PAYPAL_CLIENT_SECRET=...

# Notificaciones
VAPID_PUBLIC_KEY=...
VAPID_PRIVATE_KEY=...

👥 Usuarios de Prueba

Después del primer inicio, se crean usuarios por defecto:

Email Password Rol
admin@gymapp.com Admin123! Administrador
entrenador@test.com Test123! Entrenador
cliente@test.com Test123! Entrenado

🛠️ Scripts Útiles

# Testing
./scripts/testing/test_email.py           # Test email gateway

# Database
python scripts/database/reset_database.py  # Reset DB completo

# Development
python scripts/development/analyze_coverage.py  # Análisis coverage

# Infrastructure
./src/infrastructure/cicd/scripts/deploy.sh    # Deploy Gitea
./src/infrastructure/mailserver/deploy.sh      # Deploy mail server

📊 Estado del Proyecto

Completado

  • 27 Historias de Usuario implementadas
  • 30+ Módulos funcionando
  • 89% Coverage backend
  • 618 Tests pasando (98.7%)
  • 12 Tests E2E críticos
  • CI/CD en k3s funcionando
  • Aplicación móvil con Capacitor

En Desarrollo 🚧

  • Optimización de performance
  • Tests adicionales para 90% coverage
  • Deployment automatizado
  • Monitoreo y observabilidad

🤝 Contribución

  1. Fork el proyecto
  2. Crea una rama: git checkout -b feature/nueva-funcionalidad
  3. Commit cambios: git commit -m 'feat: agregar nueva funcionalidad'
  4. Push: git push origin feature/nueva-funcionalidad
  5. Abre un Pull Request

Convenciones:

  • Tests antes de merge
  • Mantener arquitectura limpia
  • Código sin comentarios (usar nombres descriptivos)
  • Respetar patrones existentes

📄 Licencia

Proyecto privado - Todos los derechos reservados


📞 Soporte

Para reportar bugs o solicitar features:


Última actualización: 2025-12-29 Versión: 1.0.0 Estado: Listo para Producción (89% coverage)


🤖 Generated with Claude Code