Módulo 15: Projeto Final
Objetivo do Projeto
Desenvolva uma aplicação completa que demonstre seu domínio do Spring Boot integrando os conceitos aprendidos ao longo do curso.
Duração estimada: 20-30 horas
Opções de Projeto
Escolha um dos cinco projetos a seguir:
Opção A: Plataforma de E-Commerce
Uma plataforma de comércio eletrônico completa com:
- Catálogo de produtos
- Gerenciamento de carrinho
- Sistema de pedidos
- Pagamento (simulação)
- Notificações
Opção B: Sistema de Gerenciamento de Tarefas
Um sistema de gerenciamento de tarefas/projetos com:
- Gerenciamento de projetos e tarefas
- Atribuição de tarefas
- Controle de tempo
- Relatórios e estatísticas
- Notificações em tempo real
Opção C: API de Reserva
Um sistema de reservas (hotéis, restaurantes, eventos) com:
- Catálogo de recursos
- Disponibilidade e calendário
- Processo de reserva
- Confirmação e lembretes
- Dashboard administrativo
Opção D: Autenticação com Email (Recomendado)
Um sistema de autenticação completo com:
- Cadastro com validação por email
- Login JWT
- Recuperação de senha por email
- Gerenciamento de papéis (USER/ADMIN)
- Administração de usuários
Opção E: Formulário de Contato e Gestão de Leads
Um sistema de formulário de contato com gestão de leads (CRM simplificado):
- Formulário de contato público → cria automaticamente um Lead
- Pipeline de conversão (NEW → CONTACTED → QUALIFIED → CONVERTED)
- Armazenamento PostgreSQL de leads, mensagens e notas
- Envio automático de emails (notificação admin + confirmação)
- Lembretes automáticos para leads não contatados (@Scheduled)
- Dashboard admin com estatísticas do pipeline
Requisitos Técnicos
Obrigatórios (70 pontos)
| Categoria | Requisito | Pontos |
|---|---|---|
| Arquitetura | Estrutura MVC limpa | 5 |
| Separação de camadas (Controller/Service/Repository) | 5 | |
| DTOs para transferência de dados | 5 | |
| API REST | Endpoints CRUD completos | 5 |
| Códigos HTTP apropriados | 3 | |
| Validação de entrada (@Valid) | 5 | |
| Persistência | Spring Data JPA | 5 |
| Relações entre entidades (OneToMany, ManyToMany) | 5 | |
| Consultas personalizadas | 3 | |
| Segurança | Spring Security configurado | 5 |
| Autenticação JWT | 5 | |
| Papéis e autorizações | 4 | |
| Testes | Testes unitários (mín. 10) | 5 |
| Testes de integração (mín. 5) | 5 | |
| Cobertura > 60% | 5 |
Opcionais (30 pontos bônus)
| Categoria | Requisito | Pontos |
|---|---|---|
| Cache | Redis caching | 5 |
| Messaging | Integração com RabbitMQ | 5 |
| WebSocket | Tempo real | 5 |
| Docker | Dockerfile + docker-compose | 5 |
| CI/CD | Pipeline GitHub Actions | 5 |
| Documentação | Swagger/OpenAPI | 5 |
| Monitoring | Actuator + Prometheus | 5 |
| Microservices | Arquitetura distribuída | 10 |
Estrutura do Projeto
projet-final/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── projet/
│ │ │ ├── ProjetApplication.java
│ │ │ ├── config/
│ │ │ │ ├── SecurityConfig.java
│ │ │ │ └── WebConfig.java
│ │ │ ├── controller/
│ │ │ │ ├── AuthController.java
│ │ │ │ └── ...Controller.java
│ │ │ ├── dto/
│ │ │ │ ├── request/
│ │ │ │ └── response/
│ │ │ ├── exception/
│ │ │ │ ├── GlobalExceptionHandler.java
│ │ │ │ └── ...Exception.java
│ │ │ ├── model/
│ │ │ │ └── ...Entity.java
│ │ │ ├── repository/
│ │ │ │ └── ...Repository.java
│ │ │ ├── security/
│ │ │ │ ├── JwtService.java
│ │ │ │ └── ...
│ │ │ └── service/
│ │ │ └── ...Service.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── application-dev.yml
│ │ └── application-prod.yml
│ └── test/
│ └── java/
│ └── com/
│ └── example/
│ └── projet/
│ ├── controller/
│ ├── service/
│ └── repository/
├── docker-compose.yml
├── Dockerfile
├── README.md
└── pom.xml
Entregáveis
1. Código Fonte
- Repositório GitHub público ou privado
- Código limpo e documentado
- README.md completo
2. Documentação
O README.md deve conter:
- Descrição do projeto
- Tecnologias utilizadas
- Instruções de instalação
- Instruções de execução
- Documentação da API (endpoints)
- Screenshots/demonstrações
3. Demonstração
- Vídeo de demonstração (5-10 min)
- Ou apresentação ao vivo
- Mostrar as principais funcionalidades
- Explicar as escolhas técnicas
Critérios de Avaliação
Nota Técnica (60%)
| Critério | Descrição | Peso |
|---|---|---|
| Funcionalidade | A aplicação funciona corretamente | 20% |
| Arquitetura | Código bem estruturado e de fácil manutenção | 15% |
| Boas práticas | Conformidade com as convenções do Spring | 15% |
| Testes | Cobertura e qualidade dos testes | 10% |
Nota de Qualidade (25%)
| Critério | Descrição | Peso |
|---|---|---|
| Código | Legibilidade e clareza | 10% |
| Documentação | README e comentários | 10% |
| Tratamento de erros | Robustez | 5% |
Nota de Apresentação (15%)
| Critério | Descrição | Peso |
|---|---|---|
| Demonstração | Apresentação clara | 10% |
| Respostas | Domínio do assunto | 5% |
Cronograma Sugerido
| Semana | Tarefas |
|---|---|
| 1 | Planejamento, configuração do projeto, modelo de dados |
| 2 | API REST básica, entidades JPA, repository |
| 3 | Serviços de negócio, validação, DTOs |
| 4 | Segurança, JWT, autenticação |
| 5 | Testes unitários e de integração |
| 6 | Funcionalidades avançadas (cache, messaging, etc.) |
| 7 | Docker, CI/CD, documentação |
| 8 | Finalização, testes, preparação da demo |
Recursos
Documentação Oficial
Ferramentas
- IntelliJ IDEA ou VS Code
- Postman ou Insomnia
- Docker Desktop
- Git
FAQ
P: Posso trabalhar em equipe?
R: Sim, equipes de no máximo 2-3 pessoas. A carga de trabalho esperada aumenta proporcionalmente.
P: Posso propor outro projeto?
R: Sim, com aprovação prévia. O projeto deve demonstrar as mesmas competências.
P: Qual banco de dados utilizar?
R: PostgreSQL recomendado. H2 é aceitável para desenvolvimento.
P: O deploy é obrigatório?
R: Não, mas é fortemente recomendado (pontos bônus). Opções: Heroku, Railway, AWS, etc.
Exemplo de Projeto
Veja as especificações detalhadas para cada opção:
- Opção A: E-Commerce
- Opção B: Task Management
- Opção C: Reservas
- Opção D: Autenticação Email (Recomendado)
- Opção E: Formulário de Contato
Boa Sorte!
Este projeto é a oportunidade de demonstrar tudo o que você aprendeu.
Não hesite em:
- Fazer perguntas
- Pedir esclarecimentos
- Compartilhar seu progresso