Saltar al contenido

Producción de Intermediarios

Funcionalidad

El comando BRAGE toma tanto el archivo queries.sql como el table.sql en la carpeta app y construye una clase javascript para un intermediario de Express que sanitice los datos en las rutas get.

Ejemplo

En las solicitudes get que reciben datos no-string de acuerdo a las definiciones en la tabla, los intermediarios se crearán para convertir los tipos de datos antes del controlador.

entrada

app / clients / table.sql

sql
CREATE TABLE `clients` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `user_id` INT NOT NULL,
  `first_name` VARCHAR(200) NOT NULL,
  `last_name` VARCHAR(200) NOT NULL,
  `email` VARCHAR(250) NOT NULL UNIQUE,
  `phone` VARCHAR(250) NOT NULL UNIQUE,
  `address` VARCHAR(250) NOT NULL UNIQUE,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

app / clients / queries.sql

sql
-- getAll
    SELECT * FROM `clients`
    WHERE `id` = ?;

-- addNew
    INSERT INTO `clients` (`first_name`, `last_name`, `email`, `phone`, `address`)
    VALUES (?, ? ,?, ?, ?);

-- changeAddress
    UPDATE `clients`
    SET `address` = ?,
    WHERE `id` = ?;

-- remove
    DELETE FROM `clients`
    WHERE `id` = ?;

salida

server / routes / clients / clients.middlewares.js

INFO

Acá el dato id se convierte a un número ya que el controlador y el modelo esperan un número en el valor del id en la solicitud get (necesario porque los parámetros de consulta son strings).

js
import { createErrorResponse } from './../../global/utils/responses.js';
import { ClientsStringValidation } from './clients.validations.js';

class SanitizeGetRequests {

    constructor() {
        this.validateStringClients = new ClientsStringValidation();
    }

    validationErr(res, validationError) {
        return res.status(400).json(createErrorResponse({
            message: 'Validation data error',
            error: validationError.format()
        }));
    }

    getAll = (req, res, next) => {
        const validation = this.validateStringClients.getAll(req.query);
        if (!validation.success) return this.validationErr(res, validation.error);

        // Inicializar req.sanitizedData
        req.sanitizedData = {};

        //id va de "string" a "number"
        req.sanitizedData.id = parseInt(validation.data.id, 10);

        next();
    }

}

export default SanitizeGetRequests;

Publicado bajo una licencia de uso personal.