⚙ Backend
Stacks definidas:
A decisão de utilizar o TypeScript se deve ao fato da busca por maior controle das variáveis e a familiaridade da equipe com o JavaScript.
Utilizar Node.js com TypeScript proporciona um ambiente de desenvolvimento consistente tanto no lado do servidor quanto no cliente (se usar também o TypeScript no frontend). Isso pode simplificar o desenvolvimento full-stack.
Nest (NestJS) é um framework para construção de aplicações eficientes e escaláveis no lado do servidor com Node.js. Ele utiliza JavaScript progressivo, é construído com suporte total a TypeScript (embora ainda permita que desenvolvedores programem em JavaScript puro) e combina elementos de OOP (Programação Orientada a Objetos), FP (Programação Funcional) e FRP (Programação Reativa Funcional).
Além disso seguimos uma arquitetura baseada no modelo de Controller-Service, utilizando o framework NestJS. Essa abordagem permite organizar as responsabilidades de forma clara e eficiente, separando a lógica de negócio da lógica de controle e roteamento.
Controller: A camada de controle, localizada na pasta controller, é responsável por receber as requisições HTTP, validar os dados recebidos e delegar as tarefas apropriadas para a camada de serviço. Por exemplo, o arquivo user.controller.ts gerencia todas as operações relacionadas aos usuários, como criação, atualização e obtenção de dados. Para garantir a qualidade do código, também utilizamos arquivos de teste, como o user.controller.spec.ts, para validar o comportamento esperado dos controladores.
Service: A camada de serviço, na pasta service, concentra toda a lógica de negócio. É aqui que ocorrem operações como manipulação de dados, chamadas ao banco de dados ou interações com APIs externas. O arquivo user.service.ts contém a lógica específica para gerenciar usuários, enquanto o arquivo user.service.spec.ts testa as funcionalidades implementadas, garantindo que os serviços funcionem corretamente.
DTOs: Na pasta dtos, são definidos os Data Transfer Objects, que padronizam os dados que transitam entre o cliente e o servidor. Por exemplo, o arquivo user.dto.ts define a estrutura esperada para as operações relacionadas aos usuários, garantindo que os dados estejam sempre consistentes e válidos.
Módulo: O arquivo user.module.ts registra o módulo de usuários, organizando todas as dependências, como controladores e serviços. Essa abordagem modular do NestJS facilita o isolamento de funcionalidades e torna a aplicação mais escalável e fácil de manter.
Essa estrutura modular, combinada com o modelo Controller-Service, promove uma separação clara de responsabilidades, garantindo que o código seja organizado, testável e fácil de escalar. O uso de testes unitários em arquivos .spec.ts demonstra um compromisso com a qualidade e a confiabilidade da aplicação. Essa arquitetura, aliada à organização do frontend, torna o sistema robusto e eficiente para desenvolvimento e manutenção contínuos.