Vibra API — Arquitectura
Vibra API es la aplicación backend del ecosistema Vibra, construida con NestJS y MongoDB. Gestiona los datos de la aplicación móvil y el panel de administración web.
Tecnologías
Visión General
El proyecto sigue una arquitectura modular (Modular Monolith) inspirada en principios de Domain-Driven Design (DDD) y Arquitectura Hexagonal. El código se organiza principalmente por "dominios" (funcionalidades) en lugar de capas técnicas.
Estructura del Proyecto
src/
├── common/ # DTOs, interfaces y utilidades compartidas
├── config/ # Variables de entorno y configuración de BD
├── domains/ # Módulos de negocio (Features)
│ ├── activities/ # Gestión de actividades y horarios
│ ├── auth/ # Autenticación y autorización (JWT)
│ ├── users/ # Gestión de usuarios
│ ├── ... # Otros dominios (company, client, reports, etc.)
├── infrastructure/ # Implementaciones técnicas
│ ├── emails/ # Servicio de envío de emails
│ ├── file-upload/ # Servicio de subida de archivos (GridFS)
│ ├── sockets/ # WebSocket Gateways
│ └── throttler/ # Rate limiting
├── helpers/ # Helpers transversales (Logger, etc.)
└── main.ts # Punto de entrada
Diagrama de Arquitectura
graph TD
Client[Web/Mobile Client] -->|HTTP/REST| API[Vibra API (NestJS)]
Client -->|WebSocket| SocketGW[Socket Gateway]
subgraph "Vibra API"
Auth[Auth Module]
Users[Users Module]
Activities[Activities Module]
Infra[Infrastructure Modules]
end
API --> Auth
API --> Users
API --> Activities
Auth --> DB[(MongoDB)]
Users --> DB
Activities --> DB
Infra -->|Email| SendGrid[SendGrid / SMTP]
Infra -->|Files| GridFS[MongoDB GridFS]
Infra -->|Cache| Redis[Redis]
Módulos Principales
Core
- Auth: Registro, login y validación de JWT. Usa Passport y estrategias JWT.
- Users: Perfiles de usuario, roles y permisos.
- Config: Gestión centralizada de configuración.
Negocio
- Activities: Lógica principal de actividades programadas.
- Companies: Gestión de empresas/organizaciones.
- Clients: Gestión de clientes de empresa.
- Emotions: Manejo de emociones y estado de ánimo.
- Notifications: Notificaciones internas.
- Rankings: Sistema de puntuación y clasificación (con Redis para rendimiento).
- Reports: Generación de reportes.
- Scheduling: Programación semanal y asignación de tareas.
Infraestructura
- AuditLog: Registro de auditoría de acciones importantes.
- Notification: Sistema de notificaciones internas y push.
- FileUpload: Abstracción para subir archivos a GridFS.
- Sockets:
AppGatewayyEventsGatewaypara presencia de usuarios y eventos en tiempo real.
Base de Datos
Usa MongoDB con Mongoose como ODM.
Colecciones Principales
users: Usuarios del sistemacompanies: Entidades corporativasactivities: Actividades asignablesauditLogs: TrazabilidaduserSessions: Historial de sesiones
Seguridad
- Autenticación: JWT (JSON Web Tokens)
- Rate Limiting: Implementado con
@nestjs/throttler - Validación: DTOs con
class-validator - Guards:
AuthGuardyPermissionsGuardprotegen endpoints
Configuraciones del Proyecto
| Herramienta | Propósito |
|---|---|
| TypeScript | Lenguaje principal |
| ESLint | Linting |
| Prettier | Formateo |
| Swagger | Documentación API |
| Jest | Testing |
| Docker | Contenedores |
| Cron | Tareas programadas |
Inicio Rápido
git clone https://github.com/Vibra-Maya/vibra-api.git
npm i
# Configurar .env
npm run start-env
# http://localhost:4000
# Swagger: http://localhost:4000/api
Despliegue
npm run compile
npm run start:prod
Autores
- Ermes Guarnizo Motta - Ingeniero de Sistemas - Guarnizo2023
- Yovany Suárez Silva - Full Stack Software Engineer - desobsesor