Esta é uma API RESTful robusta desenvolvida em Java com Spring Boot 3, criada como parte de um projeto acadêmico (FIAP) focado em práticas ESG (Environmental, Social, and Governance). O sistema serve como backend para o monitoramento de consumo energético, gestão de sensores IoT, alertas automáticos e manutenção preventiva de locais monitorados.
A aplicação utiliza práticas modernas de desenvolvimento, incluindo autenticação via JWT, versionamento de banco de dados com Flyway, agendamento de tarefas (Scheduling) e integração com banco de dados Oracle.
Este projeto foi construído utilizando um ecossistema tecnológico moderno para garantir escalabilidade e segurança:
Core & Web:
- Java 17: Linguagem base do projeto.
- Spring Boot 3.4.5: Framework principal para desenvolvimento ágil.
- Spring Web: Para construção dos endpoints RESTful.
- Spring Validation: Para validação de dados de entrada (DTOs).
Acesso a Dados:
- Spring Data JPA (Hibernate): Abstração para persistência de dados.
- Oracle Database: Banco de dados relacional utilizado (Driver
ojdbc11). - Flyway: Gerenciamento e versionamento de migrações de banco de dados.
Segurança:
- Spring Security: Framework de segurança para autenticação e autorização.
- JWT (JSON Web Tokens): Biblioteca
auth0/java-jwtpara geração e validação de tokens stateless. - BCrypt: Para criptografia de senhas.
Utilitários & Ferramentas:
- Lombok: Redução de código boilerplate.
- Spring Scheduling: Para execução de rotinas automáticas (limpeza de dados).
- Maven: Gerenciamento de dependências e build.
A API oferece um conjunto de funcionalidades voltadas para a eficiência energética e gestão de ativos:
- Login e Registro: Endpoints públicos para cadastro de novos usuários e autenticação via email/senha.
- Tokenização: Geração de tokens JWT com expiração configurada (2 horas).
- Controle de Acesso (RBAC): Diferenciação entre perfis
ADMINeUSER.
- Cadastro de Locais: Registro de ambientes monitorados (ex: Fábricas, Escritórios) com definição de limite de alerta (KWh).
- Monitoramento IoT: Gestão de sensores (tipo, status, data de instalação).
- Automação de Manutenção: Se um sensor tem seu status alterado para "Inativo", o sistema gera automaticamente um Log de Manutenção (via
IoTSensorService).
- Registro de Consumo: Gravação de leituras de consumo energético vinculadas a locais e sensores.
- Alertas Automáticos: Ao registrar um consumo, se o valor ultrapassar 1000 kWh, o sistema gera automaticamente um alerta de severidade "Alto" (
EnergyConsumptionService). - Validação Cruzada: Ao criar um Local com limite de alerta acima de 500 kWh, um registro inicial de consumo é gerado automaticamente para calibração.
- Limpeza de Dados (Data Retention): Uma rotina automática (
EnergyCleanUpService) roda toda segunda-feira à meia-noite para excluir registros de consumo com mais de 12 meses, otimizando o banco de dados.
- Relatório de Consumo Elevado: Endpoint específico para listar locais que possuem média de consumo superior a 500 kWh.
A segurança é configurada via SecurityConfig e utiliza o padrão Bearer Token. As permissões são distribuídas da seguinte forma:
- Público: Login (
/auth/login) e Registro (/auth/register). - ROLE_ADMIN:
- Tem permissão total de escrita e leitura.
- Pode criar Locais, registrar Consumos e criar Alertas manuais.
- Acesso aos endpoints
POST /sistema/*.
- ROLE_USER:
- Permissão de leitura para visualização de dados.
- Pode listar locais, visualizar logs de manutenção e gerar relatórios.
- Acesso aos endpoints
GET /sistema/*.
O projeto utiliza o Flyway para garantir que a estrutura do banco de dados esteja sempre atualizada. As tabelas são criadas no Oracle Database.
Estrutura das Tabelas (Migrations):
TB_PLACES: Locais monitorados.TB_IOT_SENSOR: Sensores instalados nos locais.TB_ENERGY_CONSUMPTION: Histórico de leituras de energia.TB_ENERGY_ALERTS: Alertas gerados (manuais ou automáticos).TB_MAINTENANCE_LOG: Histórico de manutenções em sensores.TB_ENERGY_RULES: Regras configuráveis de energia.TBL_USUARIOS: Usuários do sistema (com Role e Senha criptografada).
Para executar a aplicação corretamente, é necessário configurar as variáveis de ambiente que são lidas pelo application.properties e pelo TokenService.
Crie as seguintes variáveis no seu ambiente ou IDE:
| Variável | Descrição | Exemplo |
|---|---|---|
STORAGE_SERVICE_LINK |
URL JDBC de conexão com o Oracle | |
ACESS_USER_CONTROL |
Usuário do Banco de Dados | |
ACESS_USER |
Senha do Banco de Dados. | |
minha.chave.secreta |
Chave privada para assinatura do JWT |
Certifique-se de ter o JDK 17 instalado.
-
Clonar o repositório:
git clone https://github.com/seu-usuario/project-esg-java-springboot.git cd project-esg-java-springboot -
Configurar as variáveis de ambiente (conforme tabela acima).
-
Compilar e empacotar o projeto:
./mvnw clean package
-
Executar a aplicação:
java -jar target/ProjetoEsg-0.0.1-SNAPSHOT.jar
A API estará disponível em http://localhost:8080.
O projeto inclui a estrutura para testes unitários e de integração com JUnit 5 e Spring Boot Test. Para rodar os testes:
./mvnw test