Skip to content

CRUD: la base de la gestión de datos

El concepto CRUD está estrechamente vinculado a la gestión de datos digitales. CRUD hace referencia a un acrónimo en el que se reúnen las primeras letras de las cuatro operaciones fundamentales de aplicaciones persistentes en sistemas de bases de datos:

  • Create (Crear registros)

  • Read bzw. Retrieve (Leer registros)

  • Update (Actualizar registros)

  • Delete bzw. Destroy (Borrar registros)

En pocas palabras, CRUD resume las funciones requeridas por un usuario para crear y gestionar datos. Varios procesos de gestión de datos están basados en CRUD, en los que dichas operaciones están específicamente adaptadas a los requisitos del sistema y de usuario, ya sea para la gestión de bases de datos o para el uso de aplicaciones. Para los expertos, las operaciones son las herramientas de acceso típicas e indispensables para comprobar, por ejemplo, los problemas de la base de datos, mientras que para los usuarios, CRUD significa crear una cuenta (créate) y utilizarla (read), actualizarla (update) o borrarla (delete) en cualquier momento. Dependiendo de la configuración regional, las operaciones CRUD pueden implementarse de diferentes maneras, como lo muestra la siguiente tabla:

CRUD-Operation SQL RESTful HTTP XQuery
Create INSERT POST, PUT insert
Read SELECT GET, HEAD copy/modify/return
Update UPDATE PUT, PATCH replace, rename
Delete DELETE DELETE delete

CRUD - Modelo Cliente

Crear el archivo con el nombre del Modelo en src/controllers/cliente.controller.ts

Mostrar Registros - GET

El método getAllCliente muestra los registros de la tabla clientes

public async getAllCliente(req: Request, res:Response){
        try {
            // const cliente: ClienteI[] = await Cliente.findAll(
            //     {
            //         where: {activo: true}
            //     }
            const cliente: ClienteI[] = await Cliente.findAll() // select * from clientes;
            res.status(200).json({cliente})
        } catch (error) {

        }
    }

Para probar este método, instalamos la extensión Thunder Client en VS Code.

Para iniciar con la extensión, seleccionamos en el panel izquierdo de VS Code, la extensión Thunder Code.

Primero Seleccionamos la opcion Collections >> En el menu indicado con varias lineas en la parte derecha >> New Collection >> Ingresamos el Nombre: SiteAlmacenNodeJs

En el panel izquierdo aparece SiteAlmacen, seleccionarlo y al lado deercho muestra unos ..... Seguidos.

Presionar click en los puntos seguidos, seleccionar New Folder y digitamos el Modelo, es decir: Cliente

y hacer lo mismo con los demás modelos:

Producto

TipoProducto

Venta

Ahora nos ubicamos en la carpeta del Modelo que queremos realizar el Crud, que para este caso es la Carpeta Cliente.

Al lado derecho de la Carpeta Cliente, muestra unos ...... Seguidos. Seleccionar los puntos seguidos en New Request, y agregamos el método que deseamos vincular en esta petición.

En nuestro primer caso es el método MostrarClientes, Entonces New Request: MostrarClientes

Una vez creado el Request, en el lado derecho debo seleccionar el Verbo y la Ruta de la petición.

Verbo: Get

Ruta de la Petición: La podemos obtener observando el archivo src/routes/cliente.ts, en la linea

app.route("/clientes").get(this.clienteController.getAllCliente)

Esto quiere decir, que la ruta seria:

localhost:4000/clientes

y el Método asociado: getAllCliente que se encuentra en el controlador de Cliente.

Y para ejecutar la petición, presionamos el botón al lado derecho SEND.

Mostrar un Registros - GET

Para crear el Método, vamos al archivo src/controllers/cliente.controller.ts y agregamos el código para crear el registro de clientes.

public async getOneCliente(req: Request, res:Response){
        const { id: idParam } = req.params

        try {
            const cliente:ClienteI | null = await Cliente.findOne(
                {
                    where: { 
                        id: idParam,
                    }
                }
            )
            if (cliente){
                res.status(200).json(cliente)
            } else return  res.status(300).json({msg: "El Cliente no existe"})

        } catch (error) {
            res.status(500).json({msg: "Error Internal"})
        }
    }

Ahora vamos a la Extension Thunder Client y seleccionamos la carpeta Cliente y en los puntos seguidos al lado derecho seleccionar New Request: Mostrar un Cliente

Luego seleccionamos el Request Mostrar un Cliente y la Ruta URL aun no la hemos definida, por cuanto debemos ingresar antes la ruta y asociarla la método crear cliente que acabamos de realizar. Esto seria en el archivo src/routes/cliente.ts

import { Request, Response, Application, Router } from "express";

import { ClienteController } from '../controllers/cliente.controller';

export class ClienteRoutes {
    public clienteController: ClienteController =  new ClienteController();

    public routes(app: Application): void {
        app.route("/clientes/test").get(this.clienteController.test)
        app.route("/clientes").get(this.clienteController.getAllCliente)
        app.route("/cliente/:id").get(this.clienteController.getOneCliente)
    }
}

La linea app.route("/cliente/:id").get(this.clienteController.getOneCliente), indica que con esta ruta la asociamos con el método getOneCliente. y utilizamos un parametro dentro de la ruta.

Para ejecutarlo entonces, modificamos el Request Mostrar un Cliente,

Verbo: GET

Ruta URL: localhost:4000/cliente/1 y luego SEND

Crear Registros - POST

Para crear el Método, vamos al archivo src/controllers/cliente.controller.ts y agregamos el código para crear el registro de clientes.

public async createCliente(req: Request, res:Response){
        const {
            nombreCliente,
            direccionCliente,
            telefonoCliente,
            correoCliente,
            passwordCliente
        } = req.body;

        try {
            let body:ClienteI = {
                nombreCliente,
                direccionCliente,
                telefonoCliente,
                correoCliente,
                passwordCliente
            } 

            const cliente:ClienteI = await Cliente.create({...body});
            res.status(200).json({cliente});

        } catch (error) {

        }

    }

Ahora vamos a la Extension Thunder Client y seleccionamos la carpeta Cliente y en los puntos seguidos al lado derecho seleccionar New Request: CrearCliente

Luego seleccionamos el Request CrearCliente y cambiamos el verbo Get por POST

y la Ruta URL aun no la hemos definida, por cuanto debemos ingresar antes la ruta y asociarla la método crear cliente que acabamos de realizar. Esto seria en el archivo src/routes/cliente.ts

import { Request, Response, Application, Router } from "express";

import { ClienteController } from '../controllers/cliente.controller';

export class ClienteRoutes {
    public clienteController: ClienteController =  new ClienteController();

    public routes(app: Application): void {
        app.route("/clientes/test").get(this.clienteController.test)
        app.route("/clientes").get(this.clienteController.getAllCliente)
        app.route("/cliente").post(this.clienteController.createCliente)
    }
}

La linea app.route("/cliente").post(this.clienteController.createCliente), indica que con esta ruta la asociamos con el método de crear clientes.

Para ejecutarlo entonces, modificamos el Request CrearCliente,

Verbo: POST

Ruta URL: localhost:4000/cliente

Luego nos dirigimos en el Menu >> Body >> Form-Encode

En donde adicionamos todos los campos o atributos del Modelo Cliente de la siguiente manera:

Una vez adicionados todos los campos del modelo, podemos presionar el botón SEND.

En la parte inferior de la extensión, nos avisa que se ha creado el registro correspondiente a la base de datos.

Como ya tenemos creada la petición MostarClientes, podemos corroborar y probar esta petición.

Actualizar Registros - PUT

Para crear el Método, vamos al archivo src/controllers/cliente.controller.ts y agregamos el código para crear el registro de clientes.

public async updateCliente(req: Request, res:Response){
        const { id:pk } = req.params;

        const {
            id,
            nombreCliente,
            direccionCliente,
            telefonoCliente,
            correoCliente,
            passwordCliente
        }= req.body

        try {
            let body:ClienteI = {
                nombreCliente,
                direccionCliente,
                telefonoCliente,
                correoCliente,
                passwordCliente
            } 

            const clienteExist: ClienteI | null = await Cliente.findByPk(pk);
            // const userExist: UsuarioI | null = await Usuario.findOne(
            //     {
            //         where: { id: pk}
            //     }
            // );

            if(!clienteExist) return res.status(500).json({msg:"El Cliente No existe"})
            await Cliente.update(
                body,{
                    where: {id:pk}
                }
            );  // select update from usuarios where id=pk



        } catch (error) {

        }
        const cliente: ClienteI | null = await Cliente.findByPk(pk);
        if(cliente) return res.status(200).json({cliente})

    }

Ahora vamos a la Extension Thunder Client y seleccionamos la carpeta Cliente y en los puntos seguidos al lado derecho seleccionar New Request: Actualizar Cliente

Luego seleccionamos el Request Actualizar Cliente y cambiamos el verbo Get por PUT

y la Ruta URL aun no la hemos definida, por cuanto debemos ingresar antes la ruta y asociarla la método crear cliente que acabamos de realizar. Esto seria en el archivo src/routes/cliente.ts

import { Request, Response, Application, Router } from "express";

import { ClienteController } from '../controllers/cliente.controller';

export class ClienteRoutes {
    public clienteController: ClienteController =  new ClienteController();

    public routes(app: Application): void {
        app.route("/clientes/test").get(this.clienteController.test)
        app.route("/clientes").get(this.clienteController.getAllCliente)
        app.route("/cliente/:id").get(this.clienteController.getOneCliente)
        app.route("/cliente").post(this.clienteController.createCliente)
        app.route("/cliente/:id").put(this.clienteController.updateCliente)
    }
}

La linea app.route("/cliente/:id").put(this.clienteController.updateCliente), indica que con esta ruta la asociamos con el método updateCliente, utilizando un parámetro dentro de la ruta.

Para ejecutarlo entonces, modificamos el Request Actualizar Cliente,

Verbo: PUT

Ruta URL: localhost:4000/cliente/1

Luego nos dirigimos en el Menu >> Body >> Form-Encode

En donde adicionamos los campos o atributos del Modelo Cliente que queremos modificar su valor o contenido de la siguiente manera:

Una vez adicionados los campos del modelo a modificar o editar, podemos presionar el botón SEND.

En la parte derecha mostrará los nuevos valores de los campos modificados de la base de datos.

Eliminar Registro - DELETE

Para crear el Método, vamos al archivo src/controllers/cliente.controller.ts y agregamos el código para crear el registro de clientes.

public async deleteCliente(req: Request, res:Response){
        const { id:pk } = req.params;


        try {
            const clienteExist: ClienteI | null = await Cliente.findByPk(pk);
            if(!clienteExist) return res.status(500).json({msg:"El Cliente No existe"})
            await Cliente.destroy(
                {
                    where: {id: pk}
                }
            )
            res.status(200).json({msg:"Cliente Eliminado"})
        } catch (error) {

        }

    } 

Ahora vamos a la Extension Thunder Client y seleccionamos la carpeta Cliente y en los puntos seguidos al lado derecho seleccionar New Request: Eliminar Cliente

Luego seleccionamos el Request Eliminar Cliente y cambiamos el verbo Get por DELETE

y la Ruta URL aun no la hemos definida, por cuanto debemos ingresar antes la ruta y asociarla la método crear cliente que acabamos de realizar. Esto seria en el archivo src/routes/cliente.ts

import { Request, Response, Application, Router } from "express";

import { ClienteController } from '../controllers/cliente.controller';

export class ClienteRoutes {
    public clienteController: ClienteController =  new ClienteController();

    public routes(app: Application): void {
        app.route("/clientes/test").get(this.clienteController.test)
        app.route("/clientes").get(this.clienteController.getAllCliente)
        app.route("/cliente/:id").get(this.clienteController.getOneCliente)
        app.route("/cliente").post(this.clienteController.createCliente)
        app.route("/cliente/:id").put(this.clienteController.updateCliente)
        app.route("/cliente/:id").delete(this.clienteController.deleteCliente)
    }
}

La linea app.route("/cliente/:id").delete(this.clienteController.deleteCliente), indica que con esta ruta la asociamos con el método deleteCliente, utilizando un parámetro dentro de la ruta.

Para ejecutarlo entonces, modificamos el Request Eliminar Cliente,

Verbo: PUT

Ruta URL: localhost:4000/cliente/1

Luego, podemos presionar el botón SEND.