Saltar al contenido

Producción de Controladores

Funcionalidad

El comando BRAGE tomará las consultas definidas en el archivo queries.sql y construye una clase javascript para un controlador de Express que se usarán en las rutas.

Ejemplo

Cada consulta en el queries.sql puede tener un mensaje de metadato con el patrón -- !.

Este comentario opcional será agregado en la respuesta OK del controlador

entrada

app / clients / queries.sql

sql
-- getAll
-- ! message: todos los datos del cliente solicitados
    SELECT * FROM `clients`
    WHERE `id` = ?;

-- addNew
-- ! message: nuevo cliente agregado
    INSERT INTO `clients` (`first_name`, `last_name`, `email`, `phone`, `address`)
    VALUES (?, ? ,?, ?, ?);

-- changeAddress
-- ! message: dirección del cliente modificada
    UPDATE `clients`
    SET `address` = ?,
    WHERE `id` = ?;

-- remove
-- ! message: cliente eliminado
    DELETE FROM `clients`
    WHERE `id` = ?;

salida

server / routes / clients / clients.controllers.js

js
import { ClientsValidation } from './clients.validations.js';
import { asyncErrorHandler } from './../../global/handlers/asyncError.js';
import { createOkResponse, createErrorResponse } from './../../global/utils/responses.js';

class ClientsController {

    constructor({ clientsModel }) {
        this.clientsModel = clientsModel;
        this.validateClients = new ClientsValidation();
    }

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

    getAll = asyncErrorHandler(async (req, res) => {
        const validation = this.validateClients.getAll(req.sanitizedData);

        if (!validation.success) return this.validationErr(res, validation.error);

        const data = await this.clientsModel.getAll(validation.data);

        return res.status(200).json(createOkResponse({
            message: 'todos los datos del cliente solicitados',
            data
        }));
    })

    addNew = asyncErrorHandler(async (req, res) => {
        const validation = this.validateClients.addNew(req.body);

        if (!validation.success) return this.validationErr(res, validation.error);

        const data = await this.clientsModel.addNew(validation.data);

        return res.status(200).json(createOkResponse({
            message: 'nuevo cliente agregado',
            data: [data]
        }));
    })

    changeAddress = asyncErrorHandler(async (req, res) => {
        const validation = this.validateClients.changeAddress(req.body);

        if (!validation.success) return this.validationErr(res, validation.error);

        const data = await this.clientsModel.changeAddress(validation.data);

        return res.status(200).json(createOkResponse({
            message: 'dirección del cliente modificada',
            data: [data]
        }));
    })

    remove = asyncErrorHandler(async (req, res) => {
        const validation = this.validateClients.remove(req.body);

        if (!validation.success) return this.validationErr(res, validation.error);

        const data = await this.clientsModel.remove(validation.data);

        return res.status(200).json(createOkResponse({
            message: 'cliente eliminado',
            data: [data]
        }));
    })

}

export default ClientsController;

Publicado bajo una licencia de uso personal.