### **Curso de NestJS: Desarrollo Backend Modular y Escalable**
#### **Módulo 1: Introducción a NestJS y Fundamentos**
- **1.1. ¿Qué es NestJS?**
- Historia y evolución de NestJS.
- Arquitectura modular de NestJS.
- Comparativa con otros frameworks (Express, Fastify).
- **1.2. Instalación y configuración del entorno**
- Requisitos previos (Node.js, npm/yarn).
- Creación de un proyecto NestJS desde cero.
- Estructura del proyecto.
#### **Módulo 2: Controladores y Rutas**
- **2.1. Introducción a los controladores (Controllers)**
- Creación de controladores.
- Definición de rutas con decoradores (@Get, @Post, @Put, @Delete).
- **2.2. Parámetros en las rutas**
- Parámetros de ruta, consulta y cuerpo.
- Validación de entradas con Pipes.
#### **Módulo 3: Servicios y Dependencias**
- **3.1. Servicios en NestJS (Providers)**
- Creación de servicios.
- Inyección de dependencias en NestJS.
- Uso del patrón de diseño Singleton.
- **3.2. Ciclo de vida de los servicios**
- Iniciación y destrucción de servicios.
#### **Módulo 4: Módulos en NestJS**
- **4.1. Concepto de módulos en NestJS**
- Modularización del código.
- Creación y gestión de módulos.
- Importar y exportar módulos.
- **4.2. Organización de un proyecto grande**
- División del proyecto en módulos.
- Creación de módulos compartidos (Shared Modules).
#### **Módulo 5: Bases de Datos y ORM**
- **5.1. Conexión a bases de datos con TypeORM**
- Configuración de TypeORM en NestJS.
- Definición de entidades y migraciones.
- **5.2. Servicios de repositorio**
- Creación de servicios CRUD.
- Query Builder y consultas avanzadas.
- **5.3. Uso de Mongoose para bases de datos NoSQL**
- Integración con MongoDB y Mongoose.
#### **Módulo 6: Autenticación y Autorización**
- **6.1. Autenticación con JWT (JSON Web Tokens)**
- Implementación de autenticación con JWT.
- Estrategias de autenticación.
- **6.2. Autorización basada en roles (Role-based Access Control - RBAC)**
- Protección de rutas.
- Uso de guards y decoradores personalizados.
#### **Módulo 7: Validación, Interceptores y Guards**
- **7.1. Validación de datos**
- Uso de `class-validator` y `class-transformer`.
- Pipes y validaciones personalizadas.
- **7.2. Interceptores y filtros**
- Manejo de excepciones y respuestas personalizadas.
- Creación de interceptores.
- **7.3. Guards y manejo de permisos**
- Implementación de guards para la seguridad de rutas.
#### **Módulo 8: Arquitectura de Microservicios en NestJS**
- **8.1. Fundamentos de microservicios**
- Introducción a la arquitectura de microservicios.
- Comparativa con monolitos.
- Ventajas y desafíos de los microservicios.
- **8.2. Comunicación entre microservicios**
- Protocolo HTTP, gRPC, y WebSockets.
- Comunicación asíncrona con colas de mensajes (RabbitMQ, Kafka).
- Protocolos de transporte soportados por NestJS (TCP, Redis, NATS, MQTT).
- **8.3. Implementación de un microservicio en NestJS**
- Creación de un microservicio independiente.
- Definición de eventos y handlers para microservicios.
- **8.4. Gateway API para microservicios**
- Uso de un API Gateway para orquestación.
- Patrón de API Gateway en NestJS.
- **8.5. Gestión de fallos y resiliencia**
- Implementación de patrones de resiliencia (circuit breakers, retries).
- Mecanismos de recuperación y manejo de errores en microservicios.
- **8.6. Balanceo de carga y descubrimiento de servicios**
- Descubrimiento de servicios en entornos distribuidos.
- Balanceo de carga para microservicios.
#### **Módulo 9: GraphQL en NestJS**
- **9.1. Introducción a GraphQL**
- Fundamentos de GraphQL.
- Diferencias con REST.
- **9.2. Configuración de GraphQL en NestJS**
- Instalación y configuración de Apollo Server.
- Creación de queries y mutaciones.
#### **Módulo 10: WebSockets y Real-time Applications**
- **10.1. Introducción a WebSockets en NestJS**
- Configuración de WebSockets.
- Creación de eventos y escuchas.
- **10.2. Gateway y manejo de eventos**
- Uso del módulo `@WebSocketGateway`.
- Comunicación bidireccional en tiempo real.
#### **Módulo 11: Testing en NestJS**
- **11.1. Pruebas unitarias**
- Configuración del entorno de pruebas con Jest.
- Pruebas de controladores y servicios.
- **11.2. Pruebas de integración y End-to-End**
- Pruebas e2e con Supertest.
- Pruebas con bases de datos en memoria.
#### **Módulo 12: Deploy y Optimización**
- **12.1. Preparación para producción**
- Configuración de variables de entorno.
- Gestión de errores y seguridad en producción.
- **12.2. Despliegue en plataformas Cloud**
- Deploy en Heroku, AWS, y Azure.
- Dockerización de aplicaciones NestJS.
#### **Módulo 13: Buenas Prácticas y Patrones de Diseño**
- **13.1. Arquitectura limpia y DDD (Domain Driven Design)**
- Estructuración de proyectos grandes.
- Implementación de principios SOLID.
- **13.2. Patrones de diseño aplicados a NestJS**
- Factory, Repository, y Singleton.
#### **Módulo 14: Integraciones Avanzadas**
- **14.1. Integración con RabbitMQ y Microservicios**
- Configuración de microservicios en NestJS.
- Uso de RabbitMQ para la mensajería.
- **14.2. Integración con Redis**
- Caché y cola de mensajes con Redis.