- 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 muchos con TypeORM en NestJS
Clase 18 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
Cuando buscamos crear proyectos sólidos en NestJS utilizando bases de datos relacionales como PostgreSQL, comprender las relaciones uno a muchos es esencial. Esta relación permite que una entidad (como User) tenga múltiples elementos relacionados (como Post), y asegura integridad y organización en los datos. Aquí veremos cómo puedes implementar relaciones uno a muchos utilizando TypeORM y algunos consejos prácticos.
¿Cómo se implementa una relación uno a muchos en bases de datos con TypeORM?
En el modelo presentado, un usuario puede tener varios posts, y cada post pertenece a un solo usuario. Es una de las convenciones más comunes en bases de datos transaccionales. - En TypeORM, se utiliza el decorador ManyToOne en la entidad hija (Post) para indicar la relación hacia la entidad principal (User). - Al mismo tiempo, el decorador OneToMany en la entidad principal permite consultar los posts desde el usuario. - La relación es bidireccional, lo que significa que puedes acceder a los posts desde el usuario (user.posts) y saber a qué usuario pertenece un post (post.user).
Ejemplo de código simplificado:
// En la entidad Post:
@ManyToOne(() => User, user => user.posts)
@JoinColumn({ name: 'user_id' })
user: User;
// En la entidad User:
@OneToMany(() => Post, post => post.user)
posts: Post[];
Además, el uso de JoinColumn en la entidad hija se considera una buena práctica para definir el nombre de la columna de la llave foránea, normalmente como "user_id".
¿Cuáles son las mejores prácticas para asegurar integridad en las relaciones uno a muchos?
- Definir la columna como no nula: El campo user_id debe tener la opción
nullable: falsepara obligar que cada artículo siempre pertenezca a un usuario. - Actualizar el DTO (Data Transfer Object): Al crear un post, el user_id se vuelve obligatorio en la API y debe validarse como tipo numérico y no puede estar vacío.
- Sincronización automática: Al activar la opción Synchronize en TypeORM, los cambios en las entidades se reflejan automáticamente en la base de datos durante el desarrollo. Sin embargo, se recomienda usar métodos más seguros en producción.
¿Cómo se consultan artículos junto con la información del usuario y su perfil?
Obtener datos anidados es común en aplicaciones modernas, donde se espera ver el artículo, su autor y el perfil del usuario. - Utilizando el método findOne con relaciones: Al crear un post, se recomienda utilizar el método findOne e incluir las relaciones user y user.profile para retornar detalles anidados del usuario y su perfil. - Listar artículos con autor: Al obtener todos los posts usando el método find, también deben incluirse las relaciones con user y profile, para que cada artículo incluya el nombre, avatar, y otros datos relevantes del autor, como ocurre en plataformas tipo dev.to. - Ejemplo de consulta:
const post = await postRepository.findOne({
where: { id: postId },
relations: ['user', 'user.profile']
});
const posts = await postRepository.find({
relations: ['user', 'user.profile']
});
Esto facilita renderizar la información completa en tu aplicación web o móvil, mostrando artículos junto al nombre y avatar de quien los creó.
¿Qué ajustes se deben realizar en la creación de publicaciones y validaciones?
- Asegurar consistencia en los nombres de los atributos: Aunque en la base de datos el campo se guarde como user_id, a nivel de TypeORM la propiedad es simplemente
user, así debes enviarla al crear registros. - Validar al crear artículos: Es obligatorio que el usuario esté especificado y exista, por lo que se debe verificar en la lógica del servicio y ajustar el DTO.
- Propuesta de endpoint extra: Se sugiere crear un Endpoint para retornar todos los posts de un usuario específico, usando su ID para filtrar los artículos relacionados.
La integración de estas relaciones y la consulta adecuada mejora la experiencia al mostrar, por ejemplo, listados de artículos acompañados de la información de sus autores. ¿Quieres ver más ejemplos prácticos de cómo gestionar relaciones en tus proyectos? Escribe tus preguntas y comparte tu experiencia.