Skip to main content

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

NestJSTypeScriptMongoDBSocket.ioSwaggerJestDocker

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: AppGateway y EventsGateway para presencia de usuarios y eventos en tiempo real.

Base de Datos

Usa MongoDB con Mongoose como ODM.

Colecciones Principales

  • users: Usuarios del sistema
  • companies: Entidades corporativas
  • activities: Actividades asignables
  • auditLogs: Trazabilidad
  • userSessions: Historial de sesiones

Seguridad

  • Autenticación: JWT (JSON Web Tokens)
  • Rate Limiting: Implementado con @nestjs/throttler
  • Validación: DTOs con class-validator
  • Guards: AuthGuard y PermissionsGuard protegen endpoints

Configuraciones del Proyecto

HerramientaPropósito
TypeScriptLenguaje principal
ESLintLinting
PrettierFormateo
SwaggerDocumentación API
JestTesting
DockerContenedores
CronTareas 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