- 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
Relaciones uno a uno entre usuarios y perfiles en PostgreSQL
Clase 15 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
Trabajar correctamente las relaciones uno a uno en bases de datos PostgreSQL garantiza la integridad entre tablas, simplifica la organización de la información y mejora la calidad del modelo de datos. En este resumen verás cómo implementar una relación uno a uno entre usuarios y perfiles usando entidades en TypeORM, abordando tanto el diseño técnico como la validación y sincronización automática.
¿Qué es una relación uno a uno entre usuarios y perfiles en PostgreSQL?
Una relación uno a uno vincula registros de dos tablas para que cada elemento de una tabla solo esté asociado a un elemento de la otra. Por ejemplo, un usuario y su perfil personal. Mientras el usuario gestiona cuestiones de autenticación (como email y password), el perfil almacena datos como nombre, apellido y avatar.
- Ambos elementos deben estar siempre relacionados.
- No debe existir un usuario sin perfil, ni un perfil sin usuario.
- Esto se logra usando una llave foránea con una restricción not null.
¿Cómo definir relaciones uno a uno en entidades con TypeORM?
TypeORM utiliza decoradores para gestionar relaciones. Para una relación uno a uno, se usan los siguientes elementos:
- @OneToOne: indica hacia qué entidad se hace la relación.
- @JoinColumn: define la columna que almacenará la llave foránea, idealmente nombrada como _id para seguir buenas prácticas.
- nullable: false: asegura que siempre debe existir relación.
- cascade: true: permite guardar entidades relacionadas en una sola transacción.
¿Qué sucede con la sincronización automática (synchronize: true)?
- El parámetro synchronize: true en la configuración hace que TypeORM sincronice automáticamente los cambios en entidades con la base de datos.
- Este parámetro no respeta ciertas restricciones si existen datos previos; por ejemplo, puede dejar nulos los campos que deberían ser obligatorios.
- Para evitar problemas, se recomienda borrar y recrear las tablas al modificar restricciones. Sin embargo, hacerlo en producción es arriesgado y se deben usar migraciones.
¿Cómo crear y validar objetos anidados con DTOs?
Al crear un usuario, ahora se requiere adjuntar el perfil. Se utilizan DTOs (Data Transfer Objects) anidados, con validaciones en cascada:
- Se crea un createProfileDTO para definir los campos requeridos del perfil.
- La validación garantiza que el perfil no sea vacío y sus campos, como name y last name, sean obligatorios.
- Se utiliza class-validator para validar los tipos y restricciones, y class-transformer para transformar correctamente los datos anidados.
- El validator pipe en el archivo principal se configura con la opción transform: true para habilitar la transformación automática.
¿Qué beneficios aporta la validación en cascada y el uso de cascade?
- Permite enviar los datos de usuario y perfil en una sola petición, facilitando la gestión y validación integral.
- Al guardar, TypeORM crea tanto la fila en la tabla users como en profile, y establece la relación automáticamente.
- Se evita la necesidad de procesamiento extra en el servicio porque el DTO ya viene estructurado.
¿Cómo manejar la obtención y visualización de perfiles relacionados?
Por defecto, al obtener usuarios no se incluye el perfil relacionado para cada usuario. Dos alternativas para exponer esta relación desde el punto de vista de la API son:
- Modificar el endpoint para que devuelva el usuario junto a su perfil anidado.
- Crear un endpoint específico como /users/{id}/profile que devuelva solo el perfil del usuario solicitado.
Ambos enfoques promueven un diseño RESTful limpio y escalable. ¿Cómo lo resolverías tú? Comparte tu solución o dudas y sigamos profundizando en el manejo eficiente de relaciones en PostgreSQL con entidades y TypeORM.