Sistema completo de gerenciamento de contatos desenvolvido em Spring Boot com funcionalidades avançadas, validações robustas, sistema de logs e APIs REST.
- CRUD Completo: Criar, listar, editar e remover contatos
- Interface Web: Interface responsiva com Thymeleaf
- Navegação Intuitiva: Menu de navegação com todas as funcionalidades
- 9 Categorias: Família, Trabalho, Amigos, Faculdade, Academia, Médico, Dentista, Advogado, Outros
- Emojis Visuais: Cada categoria possui emoji para melhor identificação
- Filtro por Categoria: Busca e filtro específico por categoria
- Nome: Validação de tamanho (2-100 caracteres) e formato (apenas letras)
- Telefone: Validação de formato brasileiro ((11) 99999-9999)
- Email: Validação de formato e tamanho máximo (255 caracteres)
- Endereço: Campo de texto com limite de 500 caracteres
- Data de Nascimento: Validação de data no passado
- Categoria: Seleção obrigatória com enum
- Favorito: Checkbox para marcar contatos favoritos
- Datas de Criação/Atualização: Automáticas
- Busca por Texto: Pesquisa em nome, telefone, email e endereço
- Filtro por Categoria: Botões para filtrar por categoria específica
- Filtro de Favoritos: Lista apenas contatos favoritos
- Filtros Avançados: Por data de nascimento, categoria, favorito
- Builder Pattern: Implementação elegante de filtros usando Builder
- Marcar/Desmarcar: Toggle de status de favorito
- Visualização: Destaque visual para contatos favoritos
- Lista Separada: Endpoint específico para favoritos
-
Validações de Campo:
- Nome: 2-100 caracteres, apenas letras e espaços
- Telefone: Formato brasileiro válido
- Email: Formato válido, máximo 255 caracteres
- Endereço: Máximo 500 caracteres
- Data de Nascimento: Deve ser no passado, máximo 150 anos atrás
-
Validações Customizadas:
- Email obrigatório para contatos de trabalho
- Telefone deve ter 10-11 dígitos
- Data de nascimento deve ser razoável
-
Validações Condicionais:
- Regras específicas por categoria
- Validações cruzadas entre campos
- Logback Configuration: Configuração completa de logs
- Múltiplos Appenders:
- Console: Logs em tempo real
- Arquivo geral:
logs/algafood-api.log
- Arquivo de API:
logs/api.log
- Arquivo de erros:
logs/error.log
- Rolling Policy: Rotação automática de logs (10MB, 30 dias)
- Níveis de Log: DEBUG, INFO, WARN, ERROR
- Logs Específicos: Por classe e funcionalidade
-
12 Endpoints REST:
GET /api/contatos
- Listar todosGET /api/contatos/{id}
- Buscar por IDPOST /api/contatos
- Criar novoPUT /api/contatos/{id}
- AtualizarDELETE /api/contatos/{id}
- RemoverPOST /api/contatos/{id}/favorito
- Alternar favoritoGET /api/contatos/busca?q=texto
- Buscar por textoGET /api/contatos/favoritos
- Listar favoritosGET /api/contatos/categoria/{categoria}
- Por categoriaGET /api/contatos/estatisticas
- EstatísticasGET /api/categorias
- Listar categoriasPOST /api/contatos/filtros
- Filtros avançados
-
Resposta Padronizada:
{ "success": true, "message": "Mensagem descritiva", "data": {}, "timestamp": 1640995200000 }
-
Códigos HTTP: 200, 201, 400, 404, 500
-
CORS: Configurado para aceitar requisições cross-origin
-
Validação: Validação automática de dados de entrada
- Estatísticas Gerais: Total de contatos, favoritos, média de idade
- Contagem por Categoria: Distribuição de contatos por categoria
- Cálculos Dinâmicos: Usando Java Streams e Collectors
- Design Responsivo: Adaptável a diferentes tamanhos de tela
- Gradientes e Animações: Interface moderna com CSS3
- Feedback Visual: Estados hover, focus e loading
- Validação Visual: Campos com erro destacados
- Acessibilidade: Labels, títulos e navegação por teclado
- Spring Boot 3.x: Framework principal
- Spring MVC: Controllers web
- Spring Validation: Validações avançadas
- Thymeleaf: Template engine
- SLF4J + Logback: Sistema de logs
- Maven: Gerenciamento de dependências
- Enums: Categoria com propriedades e métodos
- Streams API: Filtros, mapeamentos e coletas
- Optional: Tratamento seguro de valores nulos
- Builder Pattern: ContatoFiltro com Builder
- Predicates: Filtros dinâmicos
- Collections: ArrayList, HashMap, List
- Time API: LocalDate, LocalDateTime
- Service Layer: Separação de responsabilidades
- HTML5: Estrutura semântica
- CSS3: Estilos modernos e responsivos
- JavaScript: Interações básicas
- Thymeleaf: Integração com Spring
algafood-api/
├── src/main/java/com/algaworks/
│ ├── AlgaWorksContatosApplication.java
│ ├── Contato.java # Modelo com validações
│ ├── ContatoService.java # Lógica de negócio
│ ├── ContatosControle.java # Controller Web
│ ├── ContatoRestController.java # Controller REST
│ ├── ContatoFiltro.java # Filtros com Builder
│ └── Categoria.java # Enum de categorias
├── src/main/resources/
│ ├── templates/ # Templates Thymeleaf
│ ├── static/css/estilo.css # Estilos CSS
│ ├── application.properties # Configurações
│ └── logback-spring.xml # Configuração de logs
├── docs/
│ └── API_REST_DOCUMENTATION.md # Documentação da API
└── logs/ # Arquivos de log
- Java 17 ou superior
- Maven 3.6+
# Clonar o repositório
git clone <repository-url>
cd algafood-api
# Executar com Maven
mvn spring-boot:run
# Ou compilar e executar
mvn clean package
java -jar target/algafood-api-0.0.1-SNAPSHOT.jar
- Interface Web: http://localhost:3000
- API REST: http://localhost:3000/api/contatos
- Documentação: http://localhost:3000/docs/API_REST_DOCUMENTATION.md
- Acesse http://localhost:3000
- Navegue pelo menu para listar, criar, editar contatos
- Use os filtros e busca para encontrar contatos
- Marque contatos como favoritos
# Listar todos os contatos
curl http://localhost:3000/api/contatos
# Criar novo contato
curl -X POST http://localhost:3000/api/contatos \
-H "Content-Type: application/json" \
-d '{
"nome": "João Silva",
"telefone": "(11) 99999-9999",
"email": "joao@email.com",
"categoria": "FAMILIA",
"favorito": true
}'
# Buscar por texto
curl "http://localhost:3000/api/contatos/busca?q=João"
# Obter estatísticas
curl http://localhost:3000/api/contatos/estatisticas
logs/algafood-api.log
: Logs gerais da aplicaçãologs/api.log
: Logs específicos das APIs RESTlogs/error.log
: Logs de erro apenas
- DEBUG: Detalhes de execução
- INFO: Operações principais
- WARN: Situações de atenção
- ERROR: Erros e exceções
- Nome: Regex para apenas letras e espaços
- Telefone: Regex para formato brasileiro
- Email: Validação de formato e tamanho
- Data: Validação de data no passado
- Tamanhos: Limites específicos por campo
- Email obrigatório para contatos de trabalho
- Telefone deve ter formato válido
- Data de nascimento deve ser razoável
- Categoria deve ser válida
- Persistência com banco de dados
- Autenticação e autorização
- Upload de fotos de contatos
- Exportação de dados (CSV, PDF)
- Notificações em tempo real
- Testes automatizados
- Docker containerization
- CI/CD pipeline
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature
) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature'
) - Push para a branch (
git push origin feature/AmazingFeature
) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE
para mais detalhes.
Desenvolvido como projeto de estudo em Spring Boot com foco em conceitos avançados de Java e boas práticas de desenvolvimento.