- 1

Instalación y configuración inicial de NestJS para APIs
06:28 - 2

Instalación del CLI de NestJS y primer proyecto con API
11:29 - 3

Creación de endpoints dinámicos para consultar usuarios en NestJS
20:23 - 4

Operaciones CRUD en APIs REST con Postman
23:37 - 5

Método PUT para actualizar usuarios con ID automático
19:42 - 6

Códigos de estado HTTP y manejo de errores en APIs con NestJS
16:07 - 7

DTOs y validación automática de datos en APIs con NestJS
19:31 - 8

Patrón de servicios e inyección de dependencias en NestJS
25:09 - 9

Configuración de variables de entorno en NestJS
20:44 - 10

Creación y organización de módulos en NestJS para aplicaciones escalables
12:26 quiz de Fundamentos y Primer CRUD
Actualización de DTOs con mapped types en NestJS para perfil y usuario
Clase 16 de 35 • Curso de Backend con NestJS
Contenido del curso
- 11

Configuración de PostgreSQL con Docker y Docker Compose
16:08 - 12

Configuración de PostgreSQL con TypeORM en aplicaciones NestJS
12:17 - 13

Creación de entidades ORM con decoradores en TypeScript
09:17 - 14

Implementación del Repository Pattern con TypeORM en NestJS
29:55 - 15

Relaciones uno a uno entre usuarios y perfiles en PostgreSQL
17:00 - 16

Actualización de DTOs con mapped types en NestJS para perfil y usuario
38:56 - 17

Generación automática de módulos CRUD con NestJS y AI
25:34 - 18

Relaciones uno a muchos con TypeORM en NestJS
17:56 - 19

Creación de entidad Category con relaciones many-to-many en NestJS
15:28 - 20

Relaciones many-to-many con TypeORM y validación de arrays
17:40 - 21

Reutilización de servicios entre módulos en NestJS
09:04 - 22

Configuración de migraciones de base de datos con TypeORM
23:01 - 23

Migraciones de base de datos sin pérdida de información
20:46 quiz de Base de Datos y Persistencia con TypeORM
- 24

Cómo proteger contraseñas con hashing usando Bcrypt en NestJS
10:15 - 25

Serialización de datos para excluir campos sensibles en APIs
04:13 - 26

Configuración de autenticación con Passport en NestJS
19:16 - 27

Implementación de endpoint de login con Node.js y NestJS
09:09 - 28

Implementación de JSON Web Token para autenticación en NestJS
16:15 - 29

Protección de endpoints con JWT guards en NestJS
11:34 - 30

Automatización de user ID en APIs con JWT
11:48 quiz de Autenticación y Autorización
- 31

Integración del SDK de OpenAI en Node.js para automatizar contenido
28:26 - 32

Documentación automática de APIs con Swagger en NestJS
15:59 - 33

Preparar una API Node.js para producción: seguridad y despliegue
10:46 - 34

Desplegar aplicación Node.js a producción con Railway y PostgreSQL
21:11 - 35

Desarrollo de API REST escalable con NestJS en producción
02:36
Optimizar el proceso de actualización en NestJS es fundamental para mantener el código limpio y eficiente, especialmente cuando gestionamos relaciones uno a uno entre entidades como usuario y perfil. Esta técnica evita la repetición, facilita la validación y mejora la escalabilidad del proyecto.
¿Qué problema resuelve mapped types en la actualización de usuarios y perfiles?
Al trabajar con perfiles conectados a usuarios, surge la necesidad de actualizar datos sin replicar estructuras ni validaciones. Usar mapped types permite convertir campos obligatorios en opcionales sin perder las validaciones originales, ahorrando tiempo y esfuerzo. Así, tanto el create como el update de DTO se logran a partir de una sola definición base, reduciendo el riesgo de inconsistencias.
¿Cómo se implementa partial type para actualizar datos en DTOs?
La función partial type tomada del paquete @nestjs/mapped-types convierte todos los campos requeridos en opcionales. De esta forma:
- El DTO de actualización hereda todas las reglas y decoradores del de creación.
- Los campos se vuelven opcionales automáticamente con una simple extensión.
- Permite agregar validaciones extra o sobrescribir campos si algún dato debe seguir siendo requerido al actualizar.
Por ejemplo:
import { PartialType } from '@nestjs/mapped-types';
export class UpdateProfileDto extends PartialType(CreateProfileDto) {}
Esto mantiene el código consistente y fácil de mantener incluso cuando los DTO crecen en complejidad.
¿Qué ventajas hay al separar y organizar DTOs por entidad?
Separar los DTO en diferentes carpetas y archivos según entidad (usuario, perfil, etc.) ayuda a:
- Mantener la claridad en el proyecto.
- Facilitar la importación y reutilización en distintos endpoints.
- Hacer más fácil el rastreo de validaciones específicas y anidadas.
¿Cómo evitar errores típicos al heredar DTOs en cascada?
Si el DTO de actualización de usuario sigue heredando el create profile DTO al momento de actualizar perfiles, podría requerir campos no opcionales por error. La clave es asegurarse de heredar el DTO correcto:
- Utilizar el update profile DTO para actualizar únicamente los campos elegidos.
- Usar utilidades como OmitType si es necesario definir excepciones o eliminar campos al extender.
Código ejemplo utilizando ambos:
import { OmitType, PartialType } from '@nestjs/mapped-types';
export class UpdateUserDto extends PartialType(OmitType(CreateUserDto, ['profile'] as const)) {
profile?: UpdateProfileDto;
}
Así se logran extensiones precisas y flexibles.
¿Cómo manejar validación estricta y parámetros adicionales en DTOs?
NestJS permite personalizar cuánto aceptar del objeto enviado por la petición. Puedes dejar pasar atributos no definidos o lanzar un error explícito. Activando la validación estricta, solo se aceptan los parámetros definidos en el DTO, alertando si el cliente envía datos extras o erróneos.
¿Qué impacto tiene la carga de relaciones en consultas y rendimiento?
Traer relaciones anidadas con findOne resulta útil para retornar datos completos en endpoints como get por usuario, o lista de usuarios. Sin embargo, - Si la consulta es para eliminar, lo más eficiente es evitar cargar relaciones innecesarias. - Para actualizar, traer la relación solo si realmente se necesita. - Considerar el tamaño y tráfico de la base de datos antes de optimizar por rendimiento excesivo.
¿Cómo crear endpoints flexibles para obtener el profile de un usuario?
Puedes optar por: - Un endpoint general que incluya los perfiles anidados en la respuesta de usuario. - Un endpoint específico que devuelva exclusivamente el profile asociado a un user ID, solo cuando sea necesario.
Así, el sistema se adapta tanto a vistas agregadas (tablas, listados) como a necesidades específicas de front-end o apps.
¿Te gustaría compartir tu experiencia creando DTOs flexibles en tus proyectos o tienes alguna duda puntual sobre la estructura de validaciones en NestJS? ¡Comparte tu opinión y retroalimentación en los comentarios!