- 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 many-to-many con TypeORM y validación de arrays
Clase 20 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
Las relaciones many-to-many son esenciales para estructurar modelos de datos complejos, como la asociación entre publicaciones y categorías en plataformas digitales. Comprender la configuración desde la base de datos y su implementación usando TypeORM permite crear arquitecturas escalables y flexibles.
¿Cómo funcionan las relaciones many-to-many en bases de datos relacionales?
En bases de datos relacionales, las relaciones many-to-many requieren la creación de una tabla terciaria. Esta tabla únicamente almacena las referencias (identificadores) de ambos lados de la relación: por ejemplo, post_id y category_id. Así se mapearán todas las combinaciones posibles entre posts y categorías, asegurando que un post pertenezca a múltiples categorías y viceversa.
- Las relaciones uno a uno suelen resolverse agregando una referencia (llave foránea) en una de las entidades.
- En relaciones uno a muchos, la entidad "muchos" almacena la referencia hacia el lado "uno".
- El caso many-to-many requiere una tabla adicional entre ambas entidades.
¿Cómo crear relaciones many-to-many usando TypeORM?
TypeORM simplifica la gestión de tablas terciarias mediante el uso de decoradores:
- Se utiliza el decorador
@ManyToManypara definir la relación. - Para mapear la tabla terciaria, se aplica
@JoinTableen solo una de las entidades. - Es recomendable nombrar la tabla terciaria con los nombres de ambas entidades en singular, por ejemplo "post" y "category", pensando en la claridad del modelo.
- Se puede establecer la relación en cualquiera de las dos entidades, pero no en ambas a la vez.
- Creando estructuras bidireccionales, es posible consultar desde post a categories y desde category a posts.
- TypeORM gestiona internamente la creación de la tabla en la base de datos.
¿Qué ventajas ofrece la bidireccionalidad en las relaciones many-to-many?
Permite consultar todas las categorías de un post y, desde una categoría, acceder a los posts relacionados. Así, se puede mostrar la información necesaria según el contexto de la aplicación. Por ejemplo:
- Mostrar las categorías asignadas a un post (útil para interfaces que identifican temáticas).
- Obtener todos los artículos de una categoría específica (clave en sistemas de filtrado o búsqueda).
¿Cómo validar y procesar los IDs de categorías en la creación de un post?
Al crear un post, es útil permitir que el usuario especifique un array opcional de IDs de categorías. Esto se maneja con validaciones:
- Se verifica que el campo enviado sea un array (usando el decorador
isArray). - Cada elemento debe ser un número (
isNumber({ each: true })). - El atributo puede ser opcional para no forzar su inclusión al crear la publicación.
En el controlador, los IDs se mapean a objetos con la estructura { id: value }, facilitando la creación del vínculo many-to-many según lo espera TypeORM. Esta validación previene errores, como enviar strings u objetos en vez de números, y asegura la integridad de la relación.
¿Qué consideraciones existen sobre rendimiento y carga relacional?
Dependiendo del volumen de datos, puede no ser recomendable traer todos los posts asociados a una categoría, ya que podrían existir miles. En cambio, traer las categorías asociadas a un post suele ser más manejable, porque normalmente son pocas (2 o 3). Analizar estas diferencias ayuda a tomar decisiones informadas sobre cómo y cuándo resolver relaciones en las consultas.
- Traer categorías al cargar un post suele ser eficiente.
- Cargar posts de una categoría podría ser costoso; depende del negocio y de la lógica de la aplicación.
¿Cómo manejar errores y validaciones al asignar categorías inexistentes?
Si al crear o editar un post se incluyen IDs de categorías que no existen, la operación genera un error. Es recomendable gestionar estos escenarios devolviendo mensajes claros al usuario, explicando si ciertas relaciones no pudieron establecerse por referencias inexistentes. Prestar atención a este aspecto mejora la experiencia y confiabilidad del sistema.
¿Te gustaría expresar cómo has implementado tus relaciones many-to-many o tienes ejemplos de mejoras en la validación de datos? Comparte tu opinión abajo y fortalezcamos juntos nuestro aprendizaje.