Skip to content

caioliang/FIAP--IoTTU--Java-ChallengeProject-DB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

IoTTU - Sistema de Gerenciamento de PΓ‘tios de Motocicletas - Version DB ORACLE

πŸ“‹ DescriΓ§Γ£o do Projeto

IoTTU Γ© um sistema integrado de gerenciamento de motocicletas em pΓ‘tios, desenvolvido para a FIAP. O projeto combina tecnologias de IoT (Internet das Coisas) com uma aplicaΓ§Γ£o web robusta e uma API REST para dispositivos mΓ³veis. O sistema permite o rastreamento em tempo real de motocicletas atravΓ©s de tags RFID e Wi-Fi, utilizando comunicaΓ§Γ£o MQTT para receber dados de dispositivos IoT.

πŸ“‹ DB-ORACLE - Requisitos:

  • Conta Oracle Fiap: Declarar variaveis de ambiente: ORACLE_USER e ORACLE_PASSWORD

πŸ“‹ DB-ORACLE - API REST:

  • /yards/vagas/{id}: Vagas disponΓ­veis
  • /yards/json/{id}}: Json das motos de um pΓ‘tio
  • /yards/relatorio: Relatorio em JSON dos status das motos de todos os patios cadastrados

πŸ‘₯ Autores

  • Allan Brito Moreira - RM558948
  • Caio Liang - RM558868
  • Levi Magni - RM98276

πŸš€ Funcionalidades

πŸ“± Interface Web (Thymeleaf)

  • Dashboard Principal: VisualizaΓ§Γ£o geral do sistema
  • Gerenciamento de UsuΓ‘rios: CRUD completo com controle de permissΓ΅es (ADMIN/USER)
  • Gerenciamento de PΓ‘tios: Cadastro e controle de pΓ‘tios com capacidade e localizaΓ§Γ£o
  • Gerenciamento de Motocicletas: Registro de motos com placa, chassi, modelo e nΓΊmero do motor
  • Gerenciamento de Tags: Controle de tags RFID/Wi-Fi associadas Γ s motocicletas
  • Gerenciamento de Antenas: Cadastro de antenas com coordenadas GPS
  • Mapa do PΓ‘tio: VisualizaΓ§Γ£o geogrΓ‘fica das motos e antenas em tempo real
  • AutenticaΓ§Γ£o OAuth2: Login com GitHub e Google
  • InternacionalizaΓ§Γ£o: Suporte para portuguΓͺs (pt_BR) e inglΓͺs (en_US)

πŸ”Œ API REST (Mobile)

Endpoints disponΓ­veis para integraΓ§Γ£o mobile:

AutenticaΓ§Γ£o

  • POST /api/v1/auth/login - Login de usuΓ‘rios

UsuΓ‘rios

  • GET /api/v1/users - Listar usuΓ‘rios
  • GET /api/v1/users/{id} - Buscar usuΓ‘rio por ID
  • POST /api/v1/users - Criar usuΓ‘rio
  • PUT /api/v1/users/{id} - Atualizar usuΓ‘rio
  • DELETE /api/v1/users/{id} - Deletar usuΓ‘rio

PΓ‘tios

  • GET /api/v1/yards - Listar pΓ‘tios (suporta filtro por userId)
  • GET /api/v1/yards/{id} - Buscar pΓ‘tio por ID
  • GET /api/v1/yards/{id}/map - Obter dados do mapa do pΓ‘tio
  • POST /api/v1/yards - Criar pΓ‘tio
  • PUT /api/v1/yards/{id} - Atualizar pΓ‘tio
  • DELETE /api/v1/yards/{id} - Deletar pΓ‘tio

Motocicletas

  • GET /api/v1/motorcycles - Listar motocicletas (suporta filtro por userId)
  • GET /api/v1/motorcycles/{id} - Buscar motocicleta por ID
  • POST /api/v1/motorcycles - Criar motocicleta
  • PUT /api/v1/motorcycles/{id} - Atualizar motocicleta
  • DELETE /api/v1/motorcycles/{id} - Deletar motocicleta

Tags

  • GET /api/v1/tags - Listar tags
  • GET /api/v1/tags/available - Listar tags disponΓ­veis
  • GET /api/v1/tags/{id} - Buscar tag por ID
  • POST /api/v1/tags - Criar tag
  • PUT /api/v1/tags/{id} - Atualizar tag
  • DELETE /api/v1/tags/{id} - Deletar tag

Antenas

  • GET /api/v1/antennas - Listar antenas (suporta filtro por yardId)
  • GET /api/v1/antennas/{id} - Buscar antena por ID
  • POST /api/v1/antennas - Criar antena
  • PUT /api/v1/antennas/{id} - Atualizar antena
  • DELETE /api/v1/antennas/{id} - Deletar antena

DocumentaΓ§Γ£o Swagger: DisponΓ­vel em /swagger-ui.html quando o servidor estiver rodando.

πŸ“‘ Sistema IoT (MQTT)

Arquitetura IoT

O sistema utiliza o protocolo MQTT para comunicaΓ§Γ£o em tempo real com dispositivos IoT instalados nos pΓ‘tios. A arquitetura Γ© composta por:

  1. Broker MQTT: Servidor de mensageria que recebe dados dos dispositivos
  2. Dispositivos IoT:
    • Tags RFID/Wi-Fi nas motocicletas
    • Antenas receptoras nos pΓ‘tios
  3. Backend Java: Processa mensagens MQTT e atualiza o banco de dados

ConfiguraΓ§Γ£o MQTT

No arquivo application.properties:

mqtt.broker.url=tcp://${SEU_IP:127.0.0.1}:1883
mqtt.client.id=iottu-backend-client
mqtt.enabled=false
  • mqtt.broker.url: EndereΓ§o do broker MQTT (padrΓ£o: localhost:1883)
  • mqtt.client.id: Identificador ΓΊnico do cliente
  • mqtt.enabled: Habilita/desabilita a funcionalidade MQTT (padrΓ£o: false)

⚠️ IMPORTANTE: Para utilizar a funcionalidade IoT/MQTT, é obrigatório alterar mqtt.enabled=false para mqtt.enabled=true no arquivo application.properties. Sem essa alteração, o sistema não irÑ conectar ao broker MQTT nem processar mensagens dos dispositivos IoT.

TΓ³pico MQTT

  • TΓ³pico: fiap/iot/moto
  • QoS: 1 (Garantia de entrega mΓ­nima de uma vez)

Formato das Mensagens

Payload de Motocicletas
{
  "motos": [
    {
      "status": "Ativa",
      "alerta": "Movimento nΓ£o autorizado",
      "id_status": 1,
      "id_patio": 1,
      "placa_moto": "ABC1234",
      "chassi_moto": "9BWZZZ377VT004251",
      "nr_motor_moto": "MT123456",
      "modelo_moto": "Honda CG 160",
      "codigo_rfid_tag": "RFID123",
      "ssid_wifi_tag": "WIFI_TAG_001",
      "x": 100.5,
      "y": 200.3,
      "latitude": -23.550520,
      "longitude": -46.633308
    }
  ]
}
Payload de Antenas
{
  "antenas": [
    {
      "id_antena": 1,
      "id_patio": 1,
      "codigo_antena": "ANT001",
      "latitude_antena": -23.550520,
      "longitude_antena": -46.633308,
      "x": 50.0,
      "y": 100.0
    }
  ]
}

Processamento de Dados

O sistema processa automaticamente os dados recebidos via MQTT:

  1. MqttListener escuta o tΓ³pico fiap/iot/moto
  2. Identifica o tipo de payload (motocicletas ou antenas)
  3. Valida e deserializa os dados JSON
  4. Atualiza/cria registros no banco de dados
  5. Registra logs de todas as operaΓ§Γ΅es

Como Habilitar o MQTT

Para ativar a funcionalidade MQTT:

  1. Configure um broker MQTT (ex: Mosquitto, HiveMQ)
  2. No application.properties, altere obrigatoriamente:
    mqtt.enabled=true
    mqtt.broker.url=tcp://SEU_BROKER_IP:1883

    πŸ”΄ ATENÇÃO: A configuraΓ§Γ£o mqtt.enabled=true Γ© essencial! Por padrΓ£o, o valor Γ© false e o sistema MQTT nΓ£o serΓ‘ iniciado.

  3. Reinicie a aplicaΓ§Γ£o

Testando MQTT

VocΓͺ pode testar enviando mensagens usando um cliente MQTT:

# Exemplo com mosquitto_pub
mosquitto_pub -h localhost -t "fiap/iot/moto" -m '{"motos":[{"placa_moto":"ABC1234","modelo_moto":"Honda CG"}]}'

πŸ› οΈ Tecnologias Utilizadas

Backend

  • Java 17 - Linguagem de programaΓ§Γ£o
  • Spring Boot 3.5.6 - Framework principal
  • Spring Data JPA - PersistΓͺncia de dados
  • Spring Security - SeguranΓ§a e autenticaΓ§Γ£o
  • Spring OAuth2 Client - AutenticaΓ§Γ£o com GitHub e Google
  • Spring Web - API REST
  • Spring Cache - Cache de dados

Frontend

  • Thymeleaf - Template engine
  • Thymeleaf Layout Dialect - Layout management
  • HTML/CSS/JavaScript - Interface web
  • Bootstrap (via CSS customizado) - EstilizaΓ§Γ£o

Banco de Dados

  • PostgreSQL - Banco de dados relacional
  • Flyway - Versionamento de banco de dados

IoT

  • Eclipse Paho MQTT Client 1.2.5 - Cliente MQTT para comunicaΓ§Γ£o IoT
  • Protocol MQTT - ComunicaΓ§Γ£o com dispositivos IoT

DocumentaΓ§Γ£o

  • SpringDoc OpenAPI 2.6.0 - DocumentaΓ§Γ£o automΓ‘tica da API (Swagger)

Ferramentas de Desenvolvimento

  • Lombok - ReduΓ§Γ£o de cΓ³digo boilerplate
  • Spring Boot DevTools - Hot reload durante desenvolvimento
  • Docker Compose - ContainerizaΓ§Γ£o do PostgreSQL
  • Gradle - Gerenciamento de dependΓͺncias e build

ValidaΓ§Γ£o

  • Jakarta Validation - ValidaΓ§Γ£o de dados

πŸ“ Estrutura do Projeto

FIAP--IoTTU--Java-ChallengeProject/
β”‚
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ main/
β”‚   β”‚   β”œβ”€β”€ java/br/com/fiap/iottu/
β”‚   β”‚   β”‚   β”œβ”€β”€ antenna/              # Gerenciamento de antenas
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Antenna.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ AntennaController.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ AntennaRepository.java
β”‚   β”‚   β”‚   β”‚   └── AntennaService.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ api/                  # Controllers REST para mobile
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ AntennaRestController.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ AuthRestController.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MotorcycleRestController.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ TagRestController.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ UserRestController.java
β”‚   β”‚   β”‚   β”‚   └── YardRestController.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ auth/                 # AutenticaΓ§Γ£o web
β”‚   β”‚   β”‚   β”‚   └── AuthController.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ config/               # ConfiguraΓ§Γ΅es
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ CorsConfig.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ I18nConfiguration.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MqttConfig.java
β”‚   β”‚   β”‚   β”‚   └── SecurityConfiguration.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ dto/                  # Data Transfer Objects
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ AntenaDataDTO.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ AntenasPayloadDTO.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ AntennaRequestDTO.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MotorcycleDataDTO.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MotorcycleRequestDTO.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MotorcyclesPayloadDTO.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ TagRequestDTO.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ UserRequestDTO.java
β”‚   β”‚   β”‚   β”‚   └── YardRequestDTO.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ helper/               # Classes auxiliares
β”‚   β”‚   β”‚   β”‚   └── MessageHelper.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ home/                 # Controller da home
β”‚   β”‚   β”‚   β”‚   └── HomeController.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ motorcycle/           # Gerenciamento de motocicletas
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Motorcycle.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MotorcycleController.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MotorcycleRepository.java
β”‚   β”‚   β”‚   β”‚   └── MotorcycleService.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ motorcyclestatus/     # Status das motocicletas
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MotorcycleStatus.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MotorcycleStatusRepository.java
β”‚   β”‚   β”‚   β”‚   └── MotorcycleStatusService.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ mqtt/                 # ComunicaΓ§Γ£o MQTT/IoT
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MqttConfiguration.java
β”‚   β”‚   β”‚   β”‚   └── MqttListener.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ tag/                  # Gerenciamento de tags
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Tag.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ TagController.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ TagRepository.java
β”‚   β”‚   β”‚   β”‚   └── TagService.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ user/                 # Gerenciamento de usuΓ‘rios
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ User.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ UserController.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ UserRepository.java
β”‚   β”‚   β”‚   β”‚   └── UserService.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ validation/           # ValidaΓ§Γ΅es customizadas
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ OnCreate.java
β”‚   β”‚   β”‚   β”‚   └── OnUpdate.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€ yard/                 # Gerenciamento de pΓ‘tios
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Yard.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ YardController.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ YardMapDTO.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ YardMapService.java
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ YardRepository.java
β”‚   β”‚   β”‚   β”‚   └── YardService.java
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   └── IoTtuApplication.java # Classe principal
β”‚   β”‚   β”‚
β”‚   β”‚   └── resources/
β”‚   β”‚       β”œβ”€β”€ application.properties
β”‚   β”‚       β”œβ”€β”€ messages_en_US.properties
β”‚   β”‚       β”œβ”€β”€ messages_pt_BR.properties
β”‚   β”‚       β”‚
β”‚   β”‚       β”œβ”€β”€ db/migration/         # Scripts Flyway
β”‚   β”‚       β”‚   β”œβ”€β”€ V1__create_initial_tables.sql
β”‚   β”‚       β”‚   β”œβ”€β”€ V2__Add_foreign_keys.sql
β”‚   β”‚       β”‚   β”œβ”€β”€ V3__Necessary_inserts.sql
β”‚   β”‚       β”‚   └── V4__Insert_admin_user.sql
β”‚   β”‚       β”‚
β”‚   β”‚       β”œβ”€β”€ static/
β”‚   β”‚       β”‚   β”œβ”€β”€ css/
β”‚   β”‚       β”‚   β”‚   └── style.css
β”‚   β”‚       β”‚   └── js/
β”‚   β”‚       β”‚
β”‚   β”‚       └── templates/            # Templates Thymeleaf
β”‚   β”‚           β”œβ”€β”€ home.html
β”‚   β”‚           β”œβ”€β”€ layout.html
β”‚   β”‚           β”œβ”€β”€ login.html
β”‚   β”‚           β”œβ”€β”€ antenna/
β”‚   β”‚           β”‚   β”œβ”€β”€ form.html
β”‚   β”‚           β”‚   └── list.html
β”‚   β”‚           β”œβ”€β”€ auth/
β”‚   β”‚           β”‚   └── register.html
β”‚   β”‚           β”œβ”€β”€ motorcycle/
β”‚   β”‚           β”‚   β”œβ”€β”€ form.html
β”‚   β”‚           β”‚   └── list.html
β”‚   β”‚           β”œβ”€β”€ tag/
β”‚   β”‚           β”‚   β”œβ”€β”€ form.html
β”‚   β”‚           β”‚   └── list.html
β”‚   β”‚           β”œβ”€β”€ user/
β”‚   β”‚           β”‚   β”œβ”€β”€ form.html
β”‚   β”‚           β”‚   β”œβ”€β”€ list.html
β”‚   β”‚           β”‚   └── profile.html
β”‚   β”‚           └── yard/
β”‚   β”‚               β”œβ”€β”€ form.html
β”‚   β”‚               β”œβ”€β”€ list.html
β”‚   β”‚               └── map.html
β”‚   β”‚
β”‚   └── test/
β”‚       └── java/br/com/fiap/iottu/
β”‚           └── IoTtuApplicationTests.java
β”‚
β”œβ”€β”€ build.gradle                      # ConfiguraΓ§Γ£o Gradle
β”œβ”€β”€ compose.yaml                      # Docker Compose (PostgreSQL)
β”œβ”€β”€ gradlew                          # Gradle Wrapper (Unix)
β”œβ”€β”€ gradlew.bat                      # Gradle Wrapper (Windows)
β”œβ”€β”€ settings.gradle                  # ConfiguraΓ§Γ΅es do Gradle
└── README.md                        # Este arquivo

πŸ”§ Como Rodar o Projeto

PrΓ©-requisitos

  • Java 17 ou superior
  • Docker e Docker Compose (para o PostgreSQL)
  • Gradle (ou use o wrapper incluΓ­do)
  • (Opcional) Broker MQTT se quiser testar a funcionalidade IoT

Passo a Passo

1. Clone o RepositΓ³rio

git clone <url-do-repositorio>
cd FIAP--IoTTU--Java-ChallengeProject

2. Inicie o Banco de Dados PostgreSQL

docker-compose up -d

Isso iniciarΓ‘ um container PostgreSQL com as seguintes configuraΓ§Γ΅es:

  • Host: localhost
  • Porta: 5432
  • Database: iottu
  • UsuΓ‘rio: iottu
  • Senha: iottu

3. Configure as VariΓ‘veis de Ambiente (Opcional)

Para OAuth2 (GitHub e Google), configure as variΓ‘veis:

Windows (CMD):

set GITHUB_CLIENT_ID=seu_client_id
set GITHUB_CLIENT_SECRET=seu_client_secret
set GOOGLE_CLIENT_ID=seu_client_id
set GOOGLE_CLIENT_SECRET=seu_client_secret

Windows (PowerShell):

$env:GITHUB_CLIENT_ID="seu_client_id"
$env:GITHUB_CLIENT_SECRET="seu_client_secret"
$env:GOOGLE_CLIENT_ID="seu_client_id"
$env:GOOGLE_CLIENT_SECRET="seu_client_secret"

Para MQTT (se desejar habilitar):

set SEU_IP=192.168.1.100

4. Compile o Projeto

# Windows
gradlew.bat build

# Linux/Mac
./gradlew build

5. Execute a AplicaΓ§Γ£o

# Windows
gradlew.bat bootRun

# Linux/Mac
./gradlew bootRun

Ou execute diretamente o JAR gerado:

java -jar build/libs/IoTTU-0.0.1-SNAPSHOT.jar

6. Acesse a AplicaΓ§Γ£o

Credenciais PadrΓ£o

ApΓ³s a primeira execuΓ§Γ£o, um usuΓ‘rio administrador Γ© criado automaticamente:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published