rafael-ventura / cumes-brasil

Climbing Routes Catalog App
http://cumesbrasil.com.br
4 stars 3 forks source link

Backend - Refatoracao #208

Open rafael-ventura opened 2 days ago

rafael-ventura commented 2 days ago

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:

Definições de Melhoria:


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

  1. Reorganizar a Estrutura de Pastas:

    • [ ] Mover arquivos do diretório Application para o novo diretório UseCases, criando subpastas organizadas por entidade.
    • [ ] Padronizar o idioma de arquivos e métodos para português (e.g., CreateViaCriarVia).
    • [ ] Alterar o nome da pasta WebAPI para API.
  2. Implementar DTOs:

    • [ ] Criar uma pasta Domain/DTOs para armazenar os DTOs.
    • [ ] Criar Input e Output DTOs para cada entidade (e.g., ViaInput, ViaOutput).
    • [ ] Atualizar os UseCases para usar os DTOs em vez de objetos genéricos.
  3. Refatorar os Controllers:

    • [ ] Transferir toda lógica de negócio dos controllers para os UseCases correspondentes.
    • [ ] Utilizar os serviços como intermediários para delegar responsabilidade de acesso a dados.
  4. Criar Validações Reutilizáveis:

    • [ ] Implementar bibliotecas como Joi ou Zod para centralizar a lógica de validação.
    • [ ] Substituir validações manuais no código por chamadas à camada de validação.
  5. Centralizar Tratamento de Erros:

    • [ ] Refatorar a classe HandleErrors para ser utilizada em toda a aplicação.
    • [ ] Substituir os blocos try-catch repetidos nos controllers pelo middleware de erros centralizado.
  6. Simplificar Middlewares:

    • [ ] Refatorar o middleware de autenticação para ser mais modular e reutilizável.
    • [ ] Consolidar a lógica de verificação de token no AuthenticateMiddleware.
  7. Reduzir Tamanho de Serviços:

    • [ ] Quebrar serviços grandes como ViaService em casos de uso menores e isolados.
    • [ ] Garantir que cada serviço respeite o princípio da responsabilidade única.
  8. Refatorar Repositórios:

    • [ ] Garantir que os repositórios tenham métodos genéricos reutilizáveis onde aplicável.
    • [ ] Simplificar consultas SQL no ViaRepository.
  9. Adicionar Testes Automatizados:

    • [ ] Garantir cobertura mínima para todas as novas funções.
    • [ ] Implementar testes para os casos de uso recém-criados.

Links de Referência

rafael-ventura commented 2 days ago

Podemos revisar se faz sentido