1
resposta

[Sugestão] Uso do middleware de validação sem uso de constantes

Como sugestão, durante os estudos, verifiquei que é possível usarmos diretamente o "middleware body de validação" de Adotantes e Pets diretamente na RequestBody.ts. Por exemplo...

Em vez de usarmos dessa maneira:

import express, { RequestHandler } from 'express';
import AdotanteRepository from '../repositories/AdotanteRepository';
import { AppDataSource } from '../db/data-source';
import AdotanteController from '../controller/AdotanteController';
import { middlewareValidadorBodyAdotante } from '../middleware/validators/adotanteRequestBody';
import { middlewareValidadorBodyEndereco } from '../middleware/validators/enderecoRequestBody';

const router = express.Router();

const adotanteRepository = new AdotanteRepository(AppDataSource.getRepository("Adotante"));
const adotanteController = new AdotanteController(adotanteRepository);
const validateBodyAdotante: RequestHandler = (req, res, next) => middlewareValidadorBodyAdotante(req, res, next);
const validateBodyEndereco: RequestHandler = (req, res, next) => middlewareValidadorBodyEndereco(req, res, next);

router.post("/", validateBodyAdotante, (req, res) => adotanteController.criaAdotante(req, res));
router.get("/", (req, res) => adotanteController.listaAdotantes(req, res));
router.put("/:id", (req, res) => adotanteController.atualizaAdotante(req, res));
router.delete("/:id", (req, res) => adotanteController.deletaAdotante(req, res));
router.patch("/:id", validateBodyEndereco, (req, res) => adotanteController.atualizaEnderecoAdotante(req, res));

export default router;

Podemos usar diretamente os middlewares importados, já que o next utilizados neles estão no contexto dos métodos REST do router:

import express from 'express';
import AdotanteRepository from '../repositories/AdotanteRepository';
import { AppDataSource } from '../db/data-source';
import AdotanteController from '../controller/AdotanteController';
import { middlewareValidadorBodyAdotante } from '../middleware/validators/adotanteRequestBody';
import { middlewareValidadorBodyEndereco } from '../middleware/validators/enderecoRequestBody';

const router = express.Router();

const adotanteRepository = new AdotanteRepository(AppDataSource.getRepository("Adotante"));
const adotanteController = new AdotanteController(adotanteRepository);

router.post("/", middlewareValidadorBodyAdotante, (req, res) => adotanteController.criaAdotante(req, res));
router.get("/", (req, res) => adotanteController.listaAdotantes(req, res));
router.put("/:id", (req, res) => adotanteController.atualizaAdotante(req, res));
router.delete("/:id", (req, res) => adotanteController.deletaAdotante(req, res));
router.patch("/:id", middlewareValidadorBodyEndereco, (req, res) => adotanteController.atualizaEnderecoAdotante(req, res));

export default router;

Dessa forma, na minha opinião deixamos o código um pouco mais direto e simplificado, sem importação do RequestHandle do express.

No caso dos Pets, fica desse modo:


import express from 'express';
import PetController from '../controller/PetController';
import PetRepository from '../repositories/PetRepository';
import { AppDataSource } from '../db/data-source';
import { middlewareValidadorBodyPet } from '../middleware/validators/petRequestBody';

const router = express.Router();

const petRepository = new PetRepository(
  AppDataSource.getRepository("Pet"),
  AppDataSource.getRepository("Adotante")
);
const petController = new PetController(petRepository);

router.post("/", middlewareValidadorBodyPet, (req, res) => petController.criaPet(req, res))
  .put("/:id", (req, res) => petController.atualizaPet(req, res))
  .delete("/:id", (req, res) => petController.deletaPet(req, res))
  .get("/", (req, res) => petController.listaPets(req, res))
  .put("/:pet_id/:id_adotante", (req, res) => petController.adotaPet(req, res))
  .get("/filtroPorte", (req, res) => petController.buscaPetPeloPorte(req, res))
  .get("/filtro", (req, res) => petController.buscaPetPorCampoGenerico(req, res));

export default router;

Bom, achei interessante essa abordagem/opção e fica a observação :)

1 resposta

Olá, Rodrigo!

Sua sugestão é realmente muito interessante e pode tornar o código mais direto e simplificado, essa abordagem é totalmente válida e pode ser preferível dependendo do estilo de codificação da equipe. Obrigado por compartilhar essa dica! É sempre bom ver diferentes maneiras de abordar um problema, e essa é uma das belezas da programação.

Um forte abraço e bons estudos!