Actualización y Eliminación de Productos con GraphQL

Clase 15 de 24Curso de GraphQL con Node.js

Resumen

¿Cómo implementar las operaciones Update y Delete en GraphQL?

La gestión eficaz de productos en aplicaciones requiere implementar adecuadamente las operaciones CRUD (Create, Read, Update, Delete). Hoy nos enfocaremos en los pasos necesarios para llevar a cabo las operaciones de actualización y eliminación en una entidad de productos utilizando GraphQL. Esto implica la creación de mutaciones específicas y su integración con resolvers para garantizar que los datos se manipulen de manera precisa y segura. Entender estas mutaciones no solo amplía tu conocimiento de GraphQL, sino que también fortalece tu habilidad para gestionar datos de manera eficiente en tu aplicación.

¿Cómo se desarrollan las mutaciones para actualizar y eliminar productos?

Cuando hablamos de mutaciones en GraphQL, nos referimos a operaciones que cambian el estado de los datos en nuestro sistema. En este caso, vamos a concentrarnos en cómo crear mutaciones para actualizar y eliminar productos.

  • Mutación para actualizar un producto (Update Product): Esta mutación requiere un identificador (ID) del producto específico a actualizar y un DTO (Data Transfer Object) que contiene los campos a modificar. No todos los campos son obligatorios, pero al menos uno debe ser proporcionado.

  • Mutación para eliminar un producto (Delete Product): Esta sencilla mutación requiere únicamente el ID del producto que se desea eliminar. Al completarse, retorna el ID del producto eliminado.

Ejemplo de definición de mutaciones en GraphQL

type Mutation {
  updateProduct(id: ID!, changes: UpdateProductDTO!): Product!
  deleteProduct(id: ID!): ID!
}

En este ejemplo, updateProduct requiere el ID del producto y un objeto de cambios, mientras que deleteProduct solo necesita el ID.

¿Cómo implementar los resolvers para las mutaciones?

Ya definidas las mutaciones, el siguiente paso es implementar los resolvers. Estos son encargados de procesar las solicitudes y devolver los resultados adecuados. Al conectar con la capa de servicios, los resolvers ejecutan las operaciones de actualización y eliminación.

Ejemplo de resolver para actualizar un producto

async updateProduct(parent, { id, changes }, context) {
  return await context.services.productService.updateProduct(id, changes);
}

Este resolver llama a un servicio que maneja la lógica de negocio necesaria para actualizar el producto especificado.

Ejemplo de resolver para eliminar un producto

async deleteProduct(parent, { id }, context) {
  const deletedId = await context.services.productService.deleteProduct(id);
  return deletedId;
}

El resolver para eliminar un producto devuelve el ID del producto eliminado después de llamar al servicio correspondiente.

¿Cómo manejar las dependencias y asegurar la integridad de datos?

Uno de los retos al eliminar elementos de una base de datos es asegurarse de que no estén siendo utilizados en otro contexto, por ejemplo, en ordenes de compra. En el caso de GraphQL, la arquitectura relacional del sistema verifica si un producto puede ser eliminado.

  • Protección de datos: Si un producto está vinculado a una orden, la eliminación fallará, protegiendo así la integridad de las relaciones en la base de datos.

  • Eliminar con cascada: Una opción avanzada es configurar la base de datos para realizar eliminaciones en cascada; sin embargo, se debe hacer con precaución debido a la naturaleza irreversible de estos cambios.

Ejecución y pruebas de las mutaciones

Finalmente, probemos las mutaciones desde una interfaz de cliente de GraphQL como Apollo Studio o Postman. Puedes pasar las variables de entrada para actualizar un producto y verificar los cambios posteriores.

mutation updateAndDelete($idUpdate: ID!, $changes: UpdateProductDTO!, $idDelete: ID!) {
  updateProduct(id: $idUpdate, changes: $changes) {
    id
    name
  }
  deleteProduct(id: $idDelete)
}

Variables de entrada

{
  "idUpdate": 1,
  "changes": {"name": "Updated Name"},
  "idDelete": 2
}

Con estas mutaciones, puedes llevar a cabo actualizaciones y eliminaciones efectivas en tu aplicación. Así que, manos a la obra, ¡explora, prueba y sigue aprendiendo! Te espera mucho más por descubrir en el mundo de GraphQL.