Skip to content

Projeto em desenvolvimento para automação de sensores de energia

Notifications You must be signed in to change notification settings

HernandoJunior/project-esg-java-springboot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API de Monitoramento Energético e Sustentabilidade - Projeto ESG

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.

🚀 Tecnologias Utilizadas

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-jwt para 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.

✨ Principais Funcionalidades

A API oferece um conjunto de funcionalidades voltadas para a eficiência energética e gestão de ativos:

🔐 Autenticação e Usuários

  • 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 ADMIN e USER.

🏢 Gestão de Locais e Sensores

  • 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).

⚡ Monitoramento de Consumo e Alertas

  • 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.

📅 Rotinas Agendadas (Background Tasks)

  • 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órios

  • Relatório de Consumo Elevado: Endpoint específico para listar locais que possuem média de consumo superior a 500 kWh.

🔑 Segurança: Autenticação e Papéis

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/*.

🗃️ Banco de Dados e Migrações

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):

  1. TB_PLACES: Locais monitorados.
  2. TB_IOT_SENSOR: Sensores instalados nos locais.
  3. TB_ENERGY_CONSUMPTION: Histórico de leituras de energia.
  4. TB_ENERGY_ALERTS: Alertas gerados (manuais ou automáticos).
  5. TB_MAINTENANCE_LOG: Histórico de manutenções em sensores.
  6. TB_ENERGY_RULES: Regras configuráveis de energia.
  7. TBL_USUARIOS: Usuários do sistema (com Role e Senha criptografada).

⚙️ Configuração e Variáveis de Ambiente

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

📦 Como Executar (Build)

Certifique-se de ter o JDK 17 instalado.

  1. Clonar o repositório:

    git clone https://github.com/seu-usuario/project-esg-java-springboot.git
    cd project-esg-java-springboot
  2. Configurar as variáveis de ambiente (conforme tabela acima).

  3. Compilar e empacotar o projeto:

    ./mvnw clean package
  4. Executar a aplicação:

    java -jar target/ProjetoEsg-0.0.1-SNAPSHOT.jar

A API estará disponível em http://localhost:8080.

🧪 Testes

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

About

Projeto em desenvolvimento para automação de sensores de energia

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published