Operaciones CRUD en ProductService usando TypeORM y Postgres
Clase 12 de 36 • Curso de NestJS: Persistencia de Datos con TypeORM
Contenido del curso
- 3
Instalación de Docker en Windows, macOS y Ubuntu
01:35 - 4

Configuración de Postgres en Docker Compose
09:18 - 5

Conexión a Postgres en Docker: Terminal y PgAdmin
15:16 - 6

Conexión de NestJS a Postgres con Node Postgres
07:28 - 7

Inyección de Dependencias en NETJS: Conexión a PostgreSQL
10:49 - 8

Conexión a Bases de Datos con Variables de Entorno en Node.js
13:49
- 9

Implementación de TypeORM con NestJS en Proyectos Node.js
09:14 - 10

Creación de Entidades en ORM para Tiendas Virtuales
07:46 - 11

Implementación del Patrón Repository en NestJS con TypeORM
13:31 - 12

Operaciones CRUD en ProductService usando TypeORM y Postgres
13:35 - 13

Cambio de Postgres a MySQL en Docker para CRUD de Productos
17:28
- 18

Relaciones 1 a 1 en Bases de Datos con TimeORM
18:58 - 19

Manipulación de Relaciones Uno a Uno en Controladores y Servicios
10:28 - 20

Relaciones Uno a Muchos en Bases de Datos con TypeORM
10:36 - 21

Gestión de Relaciones Uno a Muchos en Controladores de API
10:27 - 22

Relaciones Muchos a Muchos en Time1M: Creación y Manejo Práctico
08:38 - 23

Manipulación de Relaciones Muchos a Muchos en Controladores
15:08 - 24

Manipulación de Relaciones Muchos a Muchos con TimeORM en JavaScript
19:09 - 25

Relaciones Muchos a Muchos con Campos Agregados en TimeWareM
16:41 - 26

CRUD de órdenes de compra y gestión de ítems en NestJS
30:07
- 27

Paginación de Productos con Limit y Offset en Controladores API
10:37 - 28

Filtrado de Precios con Rango Usando Between en Time Wareham
10:17 - 29

Indexación de Parámetros en Bases de Datos: Uso y Precauciones
02:56 - 30

Buenas prácticas de nombramiento en JavaScript y bases de datos
17:52 - 31

Serialización y Transformación de Datos en APIs con ClassTransformer
16:55
¿Cómo crear, actualizar y eliminar productos en una base de datos utilizando TypeORM?
Al trabajar con bases de datos, uno de los aspectos fundamentales es poder realizar operaciones CRUD (crear, leer, actualizar, eliminar). En este artículo te guiaré a través del proceso de implementación de estas operaciones utilizando TypeORM, un ORM popular para Node.js y TypeScript.
¿Cómo crear un nuevo producto?
La creación de un producto en la base de datos implica generar una nueva instancia de la entidad Product y asignar atributos apropiadamente antes de guardarla. Actualmente, algunos métodos en ProductService necesitan ajustes para trabajar con persistencia de datos en PostgreSQL en lugar de un arreglo en memoria.
Primero, eliminamos el contador innecesario ya que el ID es autoincremental. Usamos el método save del repositorio para guardar la instancia del producto en la base de datos. Aquí un ejemplo del código utilizado:
let newProduct = new Product();
newProduct.image = dto.image;
newProduct.name = dto.name;
newProduct.description = dto.description;
newProduct.price = dto.price;
newProduct.stock = dto.stock;
// Guardar el nuevo producto en el repositorio
await this.productRepository.save(newProduct);
TypeORM ofrece un método más eficiente utilizando create junto con save para manejar múltiples atributos sin necesidad de asignarlos uno por uno:
const newProduct = this.productRepository.create(dto);
await this.productRepository.save(newProduct);
¿Cómo actualizar un producto existente?
Para actualizar un producto existente, primero se busca el producto en la base de datos para modificar sus atributos según el DTO recibido. El método merge de TypeORM es útil para fusionar los cambios y luego guardarlos con save:
const productToUpdate = await this.productRepository.findOne(id);
if (productToUpdate) {
this.productRepository.merge(productToUpdate, dto);
await this.productRepository.save(productToUpdate);
}
¿Cómo eliminar un producto de la base de datos?
Eliminar un producto es sencillo gracias al método delete proporcionado por el repositorio. Es aconsejable verificar que el producto existe antes de intentar eliminarlo para evitar errores:
const productToDelete = await this.productRepository.findOne(id);
if (productToDelete) {
await this.productRepository.delete(id);
}
¿Cómo manejar errores en las operaciones CRUD?
Al implementar las operaciones CRUD, un aspecto importante es el manejo de errores y la validación de datos. Por ejemplo, al intentar obtener un producto que no existe, podemos lanzar una excepción adecuada:
const product = await this.productRepository.findOne(id);
if (!product) {
throw new NotFoundException('Product not found');
}
Para resolver promesas de manera eficiente se recomienda siempre usar async y await en las funciones asincrónicas para manejar las respuestas adecuadamente antes de que el controlador procese las solicitudes.
¿Cómo probar las operaciones usando Insomnia?
Una vez implementadas las operaciones CRUD, podemos utilizar herramientas como Insomnia para probarlas. En Insomnia, podemos enviar solicitudes (requests) a endpoints específicos y verificar que las respuestas sean las esperadas. Por ejemplo, al crear un nuevo producto, deberíamos ver reflejados todos sus atributos en la base de datos, y al actualizar el precio de un producto, confirmar que los cambios se han guardado correctamente.
¿Cuáles son los siguientes pasos?
¡El reto ahora es tuyo! Intenta replicar estos procedimientos en las demás entidades de tu proyecto, como marcas, categorías, usuarios y clientes. Este ejercicio te permitirá afianzar tus habilidades y avanzar en el desarrollo de aplicaciones robustas utilizando TypeORM. La práctica y la experimentación constante son el camino hacia el dominio de cualquier herramienta. ¡Adelante!