Una API RESTful profesional para la gestión de gimnasios, construida con NestJS y estructurada bajo los principios de Clean Architecture y Domain-Driven Design (DDD).
Este proyecto está diseñado para ser escalable, testeable y mantenible, ideal para entornos productivos.
- Ofrecer una arquitectura limpia aplicando las mejores prácticas del desarrollo backend moderno.
- Proveer endpoints para gestionar clientes, entrenadores, productos y autenticación.
- Servir como base para futuros desarrollos como membresías, pagos o reservas de clases.
El sistema sigue una estructura hexagonal (puertos y adaptadores), separando responsabilidades en distintas capas:
| Capa | Responsabilidad principal |
|---|---|
| Domain | Entidades del negocio y contratos (interfaces de repos) |
| Application | Lógica de negocio / casos de uso (servicios de aplicación) |
| Infrastructure | Conexión a BD, implementaciones concretas de repositorios |
| Presentation | Controladores, DTOs, módulos, auth, decoradores |
Esto permite un sistema desacoplado, fácil de testear y con inversión de dependencias clara.
src/ ├── domain/ # Entidades y repositorios (interfaces) ├── application/ # Casos de uso (servicios de aplicación) ├── infrastructure/ # MongoDB schemas, repositorios, mappers ├── presentation/ # Controladores, DTOs, módulos, auth, guards ├── common/ # Pipes personalizados ├── api/ # Punto de entrada opcional para rutas └── main.ts # Punto de entrada de la app ⚙️ Instalación y Ejecución # 1. Clonar el repositorio git clone https://github.com/ArleysGatica/gym-api cd gym-api # 2. Instalar dependencias npm install # 3. Configurar variables de entorno cp .env.example .env # Edita .env con tu URI de MongoDB, secret de JWT, etc. # 4. Ejecutar en modo desarrollo npm run start:dev 🔐 Seguridad y Autenticación Autenticación con JWT (/auth/login) Protección de rutas con JwtAuthGuard y RolesGuard Decoradores personalizados @Public() y @Roles() Validación de IDs de Mongo con ParseObjectIdPipe 📦 Configuración de Swagger SwaggerModule.setup('api', app, document); ✨ Tecnologías Usadas NestJS (TypeScript) MongoDB + Mongoose JWT Auth JWT Auth + Swagger Arquitectura Hexagonal