Saltar al contenido

Producción de Validaciones ​

Funcionalidad ​

El comando BRAGE toma tanto el archivo queries.sql como el table.sql en la carpeta app y construye una clase javascript para validaciones Zod que se usarán en los controladores.

Ejemplo ​

Cada campo en la tabla definirá un atributo en el esquema del objeto zod.

Cada solicitud en las consultas definirá un método de validación.

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.validations.js

INFO

Dos clases de validaciones serán creadas, una de acorde a los tipos del esquema de la tabla y otra solo para argumentos string para los parametros de consulta de las solicitudes get.

js
import { z } from 'zod';

export class ClientsValidation {

   schema = z.object({
      id: z.number(),
      user_id: z.number(),
      first_name: z.string(),
      last_name: z.string(),
      email: z.string(),
      phone: z.string(),
      address: z.string(),
      created_at: z.union([z.date(), z.null()]),
   })

   getAll = (data) => this.schema.pick({ id: true }).safeParse(data)
   addNew = (data) => this.schema.pick({ first_name: true, last_name: true, email: true, phone: true, address: true }).safeParse(data)
   changeAddress = (data) => this.schema.pick({ address: true, id: true }).safeParse(data)
   remove = (data) => this.schema.pick({ id: true }).safeParse(data)
}

export class ClientsStringValidation {

   schema = z.object({
      id: z.string(),
      user_id: z.string(),
      first_name: z.string(),
      last_name: z.string(),
      email: z.string(),
      phone: z.string(),
      address: z.string(),
      created_at: z.string(),
   })

   getAll = (data) => this.schema.pick({ id: true }).safeParse(data)
}

Publicado bajo una licencia de uso personal.