CRUD con ORM: Crear, Leer, Actualizar y Eliminar Datos

Clase 11 de 27Curso de Backend con Node.js: Base de Datos con PostgreSQL

Resumen

¿Cómo implementar un CRUD con un ORM?

Usar un ORM (Object-Relational Mapping) para gestionar un CRUD (Crear, Leer, Actualizar y Eliminar) transforma la manera de manipular bases de datos. El uso de un ORM facilita las operaciones sin tener que escribir SQL directamente, acercándonos mucho más a la programación orientada a objetos. Aquí te explicaré cómo se realiza cada una de estas operaciones utilizando un ORM.

¿Cómo crear un registro?

Para empezar a crear un registro, primero verificamos nuestro esquema de datos. Debemos asegurarnos de que los campos esenciales, como email y password, estén presentes. Luego, utilizando el método create del ORM, enviamos la información al servicio, donde se valida la integridad de los datos antes de insertarlos en la base de datos.

const newUser = await Model.create({
  email: 'example@example.com',
  password: 'securePassword123'
});

¿Cómo actualizar un registro?

La actualización es un poco más compleja, ya que debemos buscar primero el registro por su ID. Una vez encontrado, aplicamos los cambios deseados utilizando el método update.

const user = await User.findByPk(userId);
if (user) {
  await user.update({ email: 'newemail@example.com' });
} else {
  throw new Error('User not found');
}

¿Cómo eliminar un registro?

La eliminación también requiere que primero busquemos el registro. Una vez confirmado que existe, utilizamos el método destroy para eliminarlo.

const user = await User.findByPk(userId);
if (user) {
  await user.destroy();
} else {
  throw new Error('User not found');
}

¿Qué considerar en operaciones de búsqueda?

Uso de findOne y manejo de errores

Podemos usar findOne para buscar un registro específico. Sin embargo, es crucial manejar el caso donde el registro no se encuentre, devolviendo un error correspondiente.

const user = await User.findOne({ where: { email: 'example@example.com' } });
if (!user) {
  throw new Error('User not found');
}

¿Cómo realizar pruebas y validaciones en un CRUD?

Para garantizar el funcionamiento correcto de nuestro CRUD, es esencial realizar pruebas en cada endpoint. Pruebas básicas como intentar crear un usuario con un password inválido o buscar un usuario que no existe son necesarias para validar la robustez de nuestras soluciones.

Validación de datos con middlewares

Es importante tener middleware de validación que asegure la integridad de los datos entrantes, como el uso de Joi para validar tipos de datos y longitud.

const schema = Joi.object({
  email: Joi.string().email().required(),
  password: Joi.string().min(8).required()
});

Problemas comunes y manejo eficiente de errores

Una buena práctica es tener una capa de middleware para manejar errores, especialmente los derivados de violar restricciones en nuestra base de datos, como intentos de crear registros con emails duplicados.

Sugerencias para el manejo de errores

Crear funciones centralizadas para manejar los errores puede ayudar a una mejor gestión de errores a nivel de aplicación, capturando excepciones como las violaciones de restricciones de unicidad.

¿Cómo seguir avanzando?

Si bien el ORM abstracta muchas de las complejidades del SQL, no debe ser una razón para dejar de aprender SQL. El conocimiento fundamental del SQL sigue siendo crucial para entender cómo funcionan realmente las cosas tras bambalinas. No olvides explorar y practicar cómo estructurar un mejor manejo de errores utilizando middlewares. Esto te permitirá construir aplicaciones más robustas y mantener un código organizado.

Sigue practicando y mejorando tus habilidades con ORMs, ¡tienes un gran camino por delante!