Uma API REST para gerenciamento de materiais e reservas, desenvolvida com Spring Boot. O sistema permite o controle eficiente de itens, usuários e reservas com funcionalidades avançadas de segurança, cache e relatórios.
- Java 17
- Spring Boot 3.4.5
- Spring Security (Autenticação JWT)
- Spring Data JPA (Hibernate)
- PostgreSQL (Banco de dados principal)
- Redis (Cache e sessões)
- Liquibase (Controle de versão do banco)
- Docker & Docker Compose
- Maven (Gerenciamento de dependências)
- Swagger/OpenAPI (Documentação da API)
- Thymeleaf (Templates para relatórios)
- SendGrid (Envio de emails)
- Nginx (Load balancer)
- Login com JWT tokens
- Refresh tokens
- Rate limiting
- Controle de acesso baseado em roles
- CRUD completo de usuários
- Perfis com endereços
- Paginação e filtros avançados
- Relatórios de usuários em PDF
- Cadastro de materiais com tipos e status
- Números de série únicos
- Controle de disponibilidade
- Relatórios de inventário
- Agendamento de materiais
- Controle de status (Ativa, Finalizada, Cancelada)
- Códigos únicos de reserva
- Relatórios de reservas
- Notificações por email
- Relatórios em PDF com Thymeleaf
- Health checks
- Métricas com Spring Actuator
- Logs estruturados
src/
├── main/java/com/materials/api/
│ ├── config/ # Configurações (ModelMapper, Swagger, etc.)
│ ├── controller/ # Controllers REST
│ ├── entity/ # Entidades JPA
│ ├── enums/ # Enumerações
│ ├── pagination/ # DTOs de paginação
│ ├── repository/ # Repositórios JPA
│ ├── security/ # Configurações de segurança
│ ├── service/ # Lógica de negócio
│ └── utils/ # Utilitários
└── resources/
├── application*.properties
├── db/changelog/ # Scripts Liquibase
└── templates/ # Templates Thymeleaf
- Docker e Docker Compose
- Java 17+ (para desenvolvimento local)
- Maven 3.6+ (para desenvolvimento local)
# Clone o repositório
git clone https://github.com/rafamguedes/api-materials.git
cd api-materials
# Navegue até a pasta docker
cd docker
# Execute o ambiente completo
docker compose up -d --build
# Verifique os containers
docker compose ps
O sistema estará disponível em:
- API: http://localhost:80
- Swagger UI: http://localhost:80/swagger-ui.html
- PostgreSQL: localhost:5432
- Redis: localhost:6379
# Clone o repositório
git clone https://github.com/rafamguedes/api-materials.git
cd api-materials
# Execute apenas o banco de dados
cd docker
docker compose up postgres redis -d
# Volte para a raiz e execute a aplicação
cd ..
./mvnw spring-boot:run
cd docker
docker compose down
# Para limpar completamente (cuidado: remove volumes)
docker compose down --rmi all --volumes --remove-orphans
A documentação completa da API está disponível via Swagger UI após executar a aplicação:
http://localhost:80/swagger-ui.html
POST /auth/login
- LoginPOST /auth/refresh
- Renovar token
GET /users
- Listar usuários (paginado)POST /users
- Criar usuárioPUT /users/{id}
- Atualizar usuárioDELETE /users/{id}
- Remover usuário
GET /items
- Listar itens (paginado)POST /items
- Criar itemPUT /items/{id}
- Atualizar itemDELETE /items/{id}
- Remover item
GET /reservations
- Listar reservas (paginado)POST /reservations
- Criar reservaPUT /reservations/{id}/status
- Atualizar status
GET /reports/users
- Relatório de usuários (PDF)GET /reports/items
- Relatório de itens (PDF)GET /reports/reservations
- Relatório de reservas (PDF)
As principais configurações podem ser ajustadas através de variáveis de ambiente:
# Banco de dados
SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/materials_db
SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=root
# Redis
SPRING_REDIS_HOST=redis
SPRING_REDIS_PORT=6379
SPRING_REDIS_PASSWORD=redispass
# JWT
SPRING_SECURITY_TOKEN_SECRET=your-secret-key
SPRING_SECURITY_TOKEN_EXPIRATION=60
# SendGrid
SENDGRID_API_KEY=your-sendgrid-key
SENDGRID_EMAIL_FROM=your-email@domain.com
- dev: Desenvolvimento (application-dev.properties)
- prod: Produção (application-prod.properties)
# Executar todos os testes
./mvnw test
# Executar com relatório de cobertura
./mvnw test jacoco:report
- JWT Authentication: Tokens seguros com expiração configurável
- Rate Limiting: Proteção contra ataques de força bruta
- CORS: Configurado para ambientes específicos
- Validação: Validação robusta de entrada de dados
- Logs: Auditoria de ações sensíveis
GET /actuator/health
- Status da aplicaçãoGET /actuator/metrics
- Métricas da aplicaçãoGET /actuator/info
- Informações da aplicação
- Redis configurado para cache de consultas frequentes
- TTL configurável por tipo de dado
- Invalidação automática em atualizações