Creación de entidades ORM con decoradores en TypeScript

Clase 13 de 35Curso de Backend con NestJS

Resumen

Desarrollar aplicaciones modernas requiere gestionar datos de manera eficiente y segura. Entender cómo crear entidades con un ORM en TypeScript permite estructurar la información siguiendo principios sólidos de la programación orientada a objetos, facilitando así la persistencia y adaptabilidad de proyectos en distintos motores de base de datos.

¿Qué ventajas ofrece usar un ORM en proyectos TypeScript?

Los ORMs permiten definir entidades y sus atributos directamente en el código usando clases y decoradores. Puedes especificar restricciones, tipos de datos como varchar, e incluso longitudes máximas de las columnas. Además, los ORMs ofrecen abstracción del motor: si decides cambiar de PostgreSQL a MySQL solo adaptas el driver de conexión, sin modificar la lógica de las entidades.

  • Mapeo directo entre clases y tablas.
  • Independencia del motor de base de datos.
  • Facilidad para definir restricciones y atributos.

¿Cómo crear la primera entidad de usuario en TypeScript?

El proceso inicia creando una carpeta llamada Entities dentro del módulo users. Allí, generas un archivo llamado user.entity.ts, siguiendo la convención de usar clases exportadas. Los decoradores permiten definir columnas, identificadores y restricción de unicidad.

  • Se define un ID autoincremental usando un decorador como @PrimaryGeneratedColumn, lo que evita colisiones incluso si se eliminan registros.
  • Para el campo email, se especifica tipo varchar, longitud máxima de 155 y la restricción unique: true para evitar duplicados.
  • Los campos createdAt y updatedAt aprovechan decoradores especiales para autocalcular fechas sin intervención manual.

El uso correcto del naming es crucial. Aunque en TypeScript se emplea el camelCase, en base de datos se recomienda seguir el estándar con guion bajo, explícitamente señalado mediante la propiedad name en los decoradores.

  • Se define el nombre de tabla en plural, como "users", por coherencia en la base de datos.

¿Qué estructura debe tener la entidad de perfil y cómo modificar la de usuario?

Se sugiere dividir la información personal en dos entidades:

  • User: Solo debe contener el email y el password, enfocado exclusivamente en datos de acceso.
  • Profile: Debe incluir ID, createdAt, updatedAt, nombre, apellido y avatar. Esta entidad queda separada y sin relación por ahora, siguiendo los mismos principios que la de usuario.

Se recomienda ubicar la nueva entidad profile.entity.ts dentro de la carpeta entities, permitiendo mantener una estructura organizada y coherente.

  • No es necesario modificar DTOs ni servicios todavía, solo crear y ajustar las entidades según lo aprendido.

¿Listo para crear tus entidades y mejorar la estructura de tu proyecto? Comparte tus avances, dudas o experiencias relacionadas con ORMs y TypeScript para enriquecer el aprendizaje.