DEV Community

Dev Doido
Dev Doido

Posted on • Updated on

Criando o AddCategoryController no CrazyStack Node.js

Bem-vindo à aula de Criando o AddCategoryController! Neste curso, você aprenderá como construir uma funcionalidade importante para aplicações web: adicionar categorias a um sistema. Aprenderá a trabalhar com rotas, controllers, validações e interações com o banco de dados. Ao final desta aula, você terá desenvolvido habilidades fundamentais para criar aplicações web dinâmicas e escaláveis. Vamos começar!

Este é um material auxiliar do bootcamp CrazyStack Node.js do DevDoido. Ele servirá como uma espécie de documentação de alguns códigos vistos durante as aulas apenas como material complementar, garanta já sua vaga no bootcamp clicando AQUI!.

import {
  HttpRequest,
  HttpResponse,
  Validation,
  badRequest,
  ok,
} from "@/application/helpers";
import { Controller } from "@/application/infra/contracts";
import { AddCategory } from "@/slices/category/useCases";

export class AddCategoryController extends Controller {
  constructor(
    private readonly validation: Validation,
    private readonly addCategory: AddCategory
  ) {
    super();
  }
  async execute(httpRequest: HttpRequest<any>): Promise<HttpResponse<any>> {
    const errors = this.validation.validate(httpRequest?.body);
    if (errors?.length > 0) {
      return badRequest(errors);
    }
    const categoryCreated = await this.addCategory({
      ...httpRequest?.body,
      createdById: httpRequest?.userId,
    });
    return ok(categoryCreated);
  }
}
Enter fullscreen mode Exit fullscreen mode

Este é o código do AddCategoryController, responsável por adicionar uma categoria. Ele é uma classe que implementa a interface Controller. O construtor recebe duas dependências: a validação e o caso de uso AddCategory. O método execute recebe como entrada uma requisição HTTP, e retorna uma resposta HTTP.

Antes de prosseguir com a execução do caso de uso, é feita uma validação dos dados da requisição, caso existam erros de validação, é retornado um bad request. Caso contrário, o caso de uso é invocado com os dados da requisição e o ID do usuário que fez a requisição. A resposta é um objeto com a categoria criada.

import { makeLogController } from "@/application/decorators/logControllerFactory";
import { makeValidationComposite } from "@/application/factories";
import { Controller } from "@/application/infra/contracts";
import { makeAddCategoryFactory } from "@/slices/category/useCases";
import { AddCategoryController } from "@/slices/category/controllers";

export const makeAddCategoryController = (): Controller => {
  const requiredFields = ["name"];
  return makeLogController(
    "addCategory",
    new AddCategoryController(
      makeValidationComposite(requiredFields),
      makeAddCategoryFactory()
    )
  );
};
Enter fullscreen mode Exit fullscreen mode

Este é um código de factory que é responsável por criar uma instância do controlador AddCategoryController. A factory usa as factories makeValidationComposite e makeAddCategoryFactory para criar uma instância da camada de validação e da camada de caso de uso, respectivamente. Além disso, a factory também usa o makeLogController para adicionar a capacidade de log ao controlador antes de retorná-lo.

A factory makeValidationComposite é chamada com o array de campos obrigatórios "name" e retorna uma instância da camada de validação. A factory makeAddCategoryFactory não precisa de nenhum parâmetro e retorna uma instância da camada de caso de uso.

Finalmente, a factory makeLogController é chamada com os nomes "addCategory" e a instância do controlador AddCategoryController criada com as factories anteriores como parâmetros. Isso adiciona a capacidade de log ao controlador e retorna a instância modificada.

https://github.com/gumiranda/CrazyStackNodeJs/commit/4dd1d8657acd8e91e27e23e669c38285ebc36f89

LINK DO REPOSITÓRIO

Top comments (0)