🚀 Melhorias Futuras¶
Este documento lista as possíveis melhorias no projeto, organizadas por componente e priorizadas para facilitar a implementação futura.
📊 Priorização¶
- Prioridade Alta: Melhorias que impactam a segurança, a estabilidade ou o desempenho do projeto.
- Prioridade Média: Melhorias que aprimoram a legibilidade, a manutenibilidade ou a testabilidade do código.
- Prioridade Baixa: Melhorias que adicionam funcionalidades extras ou que aprimoram a experiência do desenvolvedor.
⚙️ Configurações (settings.py)¶
Prioridade Média
- [ ] Configuração de DEBUG: Simplificar usando
DEBUG = bool(strtobool(os.getenv("DJANGO_DEBUG", "True"))). - [ ] ALLOWED_HOSTS: Simplificar a definição com uma list comprehension mais direta.
- [ ] Configuração de banco de dados: Adicionar suporte para diferentes tipos de bancos de dados através de variáveis de ambiente.
- [ ] OAuth Configuration: Adicionar mais opções de configuração, como tempo de vida dos tokens através de variáveis de ambiente.
👤 Modelos (core/models/user.py)¶
Prioridade Média
- [ ] Validação de campos: Adicionar validadores para garantir que os campos
first_nameelast_namenão excedam os limites definidos. - [ ] Métodos de conveniência: Adicionar métodos
get_full_name()eget_short_name().
🌐 Views da API¶
auth.py¶
Prioridade Média
- [ ] Tratamento de exceções: Adicionar tratamento para outras exceções como
AuthenticationErrorouPermissionDenied. - [ ] Logging: Adicionar logging para registrar tentativas de login (sucesso e falha).
user.py¶
Prioridade Média
- [ ] Tratamento de exceções: Adicionar tratamento para
ObjectDoesNotExistouValidationError. - [ ] Logging: Adicionar logging para registrar ações nas views (criação, listagem, recuperação, alteração de senha).
- [ ] Paginação: Considerar o uso de
PageNumberPaginationdo Django REST Framework.
🎯 Camada de Domínio¶
data_access.py¶
Prioridade Média
- [ ] Duplicação de métodos: Remover métodos duplicados da interface
UserRepository. - [ ] Type Hints: Usar
Optional[str]parasearch_queryemget_all_paginated_filtered.
entities/user.py¶
Prioridade Média
- [ ] Congruência com modelo Django: Criar testes de integração que validem a correspondência entre a entidade de domínio e o modelo Django.
- [ ] Métodos de conveniência: Adicionar métodos
get_full_name()eget_short_name().
use_cases/generic_use_cases.py¶
Prioridade Média
- [ ] Consistência nos Requests: Criar um
GenericGetByIdRequestpara manter a semântica correta. - [ ] Lógica de atualização: Implementar uma lógica de merge mais sofisticada para atualizar apenas os campos modificados.
- [ ] Tratamento de erros: Criar exceções customizadas para representar erros específicos do domínio, como
EntityNotFoundException. - [ ] GenericListRequest: Adicionar campos
offset,limitesearch_querypara habilitar filtros e paginação.
use_cases/user_use_cases.py¶
Prioridade Média
- [ ] CreateUserUseCase: Adicionar lógica para definir a senha do usuário, possivelmente delegando para o
AuthGateway. - [ ] GetUserByIdUseCase: Usar
GenericGetByIdRequestem vez deGenericDeleteRequest. - [ ] Duplicação de informações: Reutilizar a entidade
Userou criar uma classe base para evitar duplicação nas classes de resposta. - [ ] Logging: Adicionar logging em pontos estratégicos dos casos de uso.
- [ ] ListUsersUseCase: Evitar a conversão de
userparaCreateUserResponsedentro doListUsersUseCase. - [ ] Type Hints: Usar
Optional[str]parasearch_queryemListUsersRequest.
🔄 Repositórios¶
auth_gateway_impl.py¶
Prioridade Alta
- [ ] Busca da aplicação cliente: Buscar a aplicação cliente com base em informações da requisição. A criação da aplicação cliente deve ser feita em um processo separado.
- [ ] Tratamento de erros: Lançar exceções customizadas para representar erros específicos do domínio.
- [ ] Hardcoded Scopes: Permitir a configuração dos scopes.
user_repository_impl.py¶
Prioridade Média
- [ ] Tratamento de erros: Lançar exceções customizadas para representar erros específicos do domínio.
- [ ] Criação de usuários: A definição da senha deve ser feita em um caso de uso específico e delegada para o
AuthGateway. - [ ] Mapeamento de objetos: Garantir que o mapeamento entre o modelo Django e a entidade de domínio seja consistente.
- [ ] Exclusão de superusuários: Adicionar uma opção para incluir ou excluir superusuários na listagem.
- [ ] Paginação: Usar a paginação do Django (
Paginator) para garantir um comportamento consistente e evitar problemas de desempenho.
🧪 Testes¶
unit/test_user_use_cases.py¶
Prioridade Média
- [ ] Verificação de argumentos: Usar
assert_called_withpara verificar os argumentos passados para o métodocreatedo repositório. - [ ] Testes de erro: Adicionar asserções para verificar se a mensagem de erro está correta.
- [ ] Testes de limites: Adicionar testes de limites para os casos de uso.
- [ ] Fixtures: Simplificar a criação de fixtures usando o decorator
@pytest.fixture(spec=...). - [ ] Uso de UUIDs: Deixar o mock gerar o UUID para maior isolamento.
integration/test_user_api.py¶
Prioridade Média
- [ ] Setup: Simplificar o setup usando fixtures do pytest.
- [ ] Autenticação: Usar a biblioteca
oauth2_provider.test.utilspara criar tokens de acesso. - [ ] Verificação de erros: Adicionar asserções para verificar se a mensagem de erro está correta.
- [ ] Testes de limites: Adicionar testes de limites para as APIs.
- [ ] DRY (Don't Repeat Yourself): Refatorar os testes para evitar duplicação de código.
- [ ] Cobertura: Adicionar testes para cobrir todos os cenários possíveis.
🐳 Docker¶
Prioridade Média
- [ ] Versões explícitas: Fixar as versões de pacotes como
wkhtmltopdf. - [ ] Cache de dependências: Dividir a instalação de dependências do sistema em várias camadas.
- [ ] Segurança: Avaliar a necessidade de criar um diretório home para o usuário
appusere garantir que ele tenha as permissões corretas. - [ ] Limpeza: Usar ferramentas específicas, como
apt-get cleanepip cache purge, para remover arquivos desnecessários. - [ ] Multi-stage build: Garantir que apenas os arquivos necessários sejam copiados do builder para a imagem final.
- [ ] Healthcheck: Adicionar um healthcheck para verificar se a aplicação está saudável.
📝 Makefile¶
Prioridade Baixa
- [ ] Variáveis de ambiente: Definir as variáveis de ambiente no início do
Makefile. - [ ] Cores: Usar uma biblioteca como
tputpara garantir que as cores sejam exibidas corretamente em todos os terminais. - [ ] Comandos Docker: Usar variáveis para definir os nomes das imagens e dos arquivos de configuração do Docker.
- [ ] Comandos Git: Adicionar uma verificação se o repositório Git foi configurado.
- [ ] Linters: Usar um arquivo de configuração para personalizar o comportamento do
flake8.
📚 Documentação¶
Prioridade Média
- [ ] Exemplos práticos: Adicionar mais exemplos de uso da API
- [ ] Tutoriais passo-a-passo: Criar tutoriais para cenários comuns
- [ ] Diagramas: Adicionar diagramas de arquitetura e fluxo de dados
- [ ] Traduções: Considerar tradução da documentação para outros idiomas
🔒 Segurança¶
Prioridade Alta
- [ ] Rate limiting: Implementar rate limiting para endpoints da API
- [ ] CORS: Configurar CORS adequadamente para produção
- [ ] HTTPS: Forçar HTTPS em produção
- [ ] Headers de segurança: Adicionar headers de segurança (HSTS, CSP, etc.)
- [ ] Auditoria de segurança: Implementar auditoria regular de dependências
⚡ Performance¶
Prioridade Média
- [ ] Cache: Implementar cache para queries frequentes
- [ ] Otimização de queries: Adicionar
select_relatedeprefetch_relatedonde necessário - [ ] Índices de banco: Adicionar índices para campos frequentemente consultados
- [ ] Compressão: Habilitar compressão de respostas HTTP
- [ ] CDN: Configurar CDN para arquivos estáticos
🎨 Organização de Arquivos¶
Prioridade Baixa
- [ ] Estrutura de pastas: Revisar e otimizar estrutura de pastas
- [ ] Nomenclatura: Padronizar nomenclatura de arquivos e diretórios
- [ ] Separação de ambientes: Melhorar separação de configurações por ambiente
- [ ] Assets: Organizar melhor assets e arquivos estáticos
Nota: Este documento é atualizado regularmente conforme melhorias são implementadas ou novas necessidades são identificadas.