Refatorar o backend para melhorar legibilidade, reduzir linhas de código, organizar melhor as pastas e aplicar princípios de Clean Architecture. Além disso, identificar pontos de melhoria e propor soluções que aumentem a eficiência do projeto, garantindo uma estrutura escalável e sustentável.
Definições
Contexto Atual:
O projeto apresenta boas práticas básicas, mas a estrutura das pastas e a organização dos arquivos não refletem adequadamente os princípios de Clean Architecture.
As responsabilidades estão misturadas entre camadas (Application, Domain, Infrastructure, WebAPI), e alguns controllers têm lógicas que deveriam ser transferidas para serviços ou use cases.
Há repetição de código em validações e tratamento de erros.
A lógica de autenticação e middleware pode ser simplificada para maior reuso.
Definições de Melhoria:
Transformar Application em UseCases para melhor clareza e granularidade de casos de uso.
Separar melhor as responsabilidades das camadas:
API: Rotas, middlewares e controllers.
UseCases: Lógica específica de cada caso de uso (um método/endpoint por arquivo, seguindo princípios de Single Responsibility).
Domain: Entidades, enums e interfaces.
Infrastructure: Implementações de repositórios, serviços de banco de dados, autenticação, envio de email, etc.
Criar DTOs (Data Transfer Objects) para padronizar entradas e saídas:
Input DTOs: Representam os dados de entrada esperados pelos UseCases.
Output DTOs: Representam os dados de saída formatados para resposta.
Os DTOs serão organizados por entidade, em uma pasta Domain/DTOs/{Entidade}.
Implementar tratamento de erros centralizado com códigos de status consistentes.
Organizar arquivos grandes, como ViaService, separando funções em casos de uso específicos (por exemplo, CriarVia, AtualizarVia).
Padronizar o idioma dos arquivos e métodos para português.
Backend - Refatoração
Objetivo
Refatorar o backend para melhorar legibilidade, reduzir linhas de código, organizar melhor as pastas e aplicar princípios de Clean Architecture. Além disso, identificar pontos de melhoria e propor soluções que aumentem a eficiência do projeto, garantindo uma estrutura escalável e sustentável.
Definições
Contexto Atual:
Application
,Domain
,Infrastructure
,WebAPI
), e alguns controllers têm lógicas que deveriam ser transferidas para serviços ou use cases.Definições de Melhoria:
Application
emUseCases
para melhor clareza e granularidade de casos de uso.Domain/DTOs/{Entidade}
.ViaService
, separando funções em casos de uso específicos (por exemplo,CriarVia
,AtualizarVia
).Wireframe (Modelo a seguir por enquanto)
A estrutura proposta para pastas será:
src/ ├── Application/ │ └── UseCases/ │ ├── Via/ │ │ ├── CriarVia.ts │ │ ├── AtualizarVia.ts │ │ ├── ExcluirVia.ts │ │ └── ... │ ├── Croqui/ │ │ ├── CriarCroqui.ts │ │ ├── AtualizarCroqui.ts │ │ └── ... │ └── ... ├── Domain/ │ ├── Entities/ │ │ ├── Via.ts │ │ ├── Montanha.ts │ │ └── ... │ ├── DTOs/ │ │ ├── Via/ │ │ │ ├── ViaInput.ts │ │ │ └── ViaOutput.ts │ │ ├── Croqui/ │ │ │ ├── CroquiInput.ts │ │ │ └── CroquiOutput.ts │ │ └── ... │ ├── Interfaces/ │ ├── Enums/ │ └── Errors/ ├── Infrastructure/ │ ├── Repositories/ │ │ ├── ViaRepository.ts │ │ ├── CroquiRepository.ts │ │ └── ... │ ├── Services/ │ │ ├── AuthService.ts │ │ ├── EmailService.ts │ │ └── ... │ └── Config/ │ ├── db.ts │ └── environment.ts
Passos
Reorganizar a Estrutura de Pastas:
Application
para o novo diretórioUseCases
, criando subpastas organizadas por entidade.CreateVia
→CriarVia
).WebAPI
paraAPI
.Implementar DTOs:
Domain/DTOs
para armazenar os DTOs.Input
eOutput DTOs
para cada entidade (e.g.,ViaInput
,ViaOutput
).Refatorar os Controllers:
Criar Validações Reutilizáveis:
Joi
ouZod
para centralizar a lógica de validação.Centralizar Tratamento de Erros:
HandleErrors
para ser utilizada em toda a aplicação.try-catch
repetidos nos controllers pelo middleware de erros centralizado.Simplificar Middlewares:
AuthenticateMiddleware
.Reduzir Tamanho de Serviços:
ViaService
em casos de uso menores e isolados.Refatorar Repositórios:
ViaRepository
.Adicionar Testes Automatizados:
Links de Referência