Skip to content

Controller Output

Functionality

The BRAGE command takes the queries defined on the queries.sql file of the app folder and builds a javascript class for an Express controller that is gonna be used by the routers.

Example

Each query on the queries.sql can have a message metadata after the pattern -- !.

This optional comment will be added to the OK response on the controller

input

app / clients / queries.sql

sql
-- getAll
-- ! message: all data from client requested
    SELECT * FROM `clients`
    WHERE `id` = ?;

-- addNew
-- ! message: new client added
    INSERT INTO `clients` (`first_name`, `last_name`, `email`, `phone`, `address`)
    VALUES (?, ? ,?, ?, ?);

-- changeAddress
-- ! message: client address modified
    UPDATE `clients`
    SET `address` = ?,
    WHERE `id` = ?;

-- remove
-- ! message: client removed
    DELETE FROM `clients`
    WHERE `id` = ?;

output

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: 'all data from client requested',
            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: 'new client added',
            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: 'client address modified',
            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: 'client removed',
            data: [data]
        }));
    })

}

export default ClientsController;

Released under a Personal use License.