RM556325 - Felipe Camargo
RM555997 - Caio Marques
RM558640 - Caio Amarante
Este projeto consiste na criação de uma API REST utilizando Java com Spring Boot que suporta a solução para o desafio proposto pela FIAP no sprint de Java Advanced.
A API é responsável por gerenciar entidades relacionadas ao controle de motos em filiais, incluindo funcionalidades completas de CRUD para pelo menos duas entidades, além de implementar:
- Uso do Spring Web para criação da API RESTful
- Integração com banco de dados Oracle ou H2 via Spring Data JPA
- Relacionamentos entre entidades conforme modelo relacional fornecido
- Validação de campos utilizando Bean Validation
- Implementação de paginação, ordenação e busca por parâmetros para resultados
- Utilização de cache para otimizar requisições
- Aplicação de boas práticas de design REST
- Tratamento centralizado de erros para maior robustez da API
- Uso de DTOs para transferência segura e eficiente dos dados
Este projeto busca atender os requisitos técnicos e critérios de avaliação definidos para o sprint, entregando uma solução organizada, inovadora e aderente ao desafio proposto.
A entidade Pais possui os seguintes atributos:
cod_pais(Integer)nome_pais(String)
A entidade Estado possui os seguintes atributos:
cod_estado(Integer)nome_estado(String)cod_pais(Integer)
A entidade Cidade possui os seguintes atributos:
cod_cidade(Integer)nome_cidade(String)cod_estado(Integer)
A entidade Filial possui os seguintes atributos:
cod_filial(Integer)nome_filial(String)cod_cidade(Integer)tamanho_patio(Integer)
A entidade Moto possui os seguintes atributos:
cod_moto(Integer)modelo(String)ano_fabricacao(Integer)categoria(String)cod_cliente(Integer)
A entidade Usuario possui os seguintes atributos:
cod_usuario(Integer)nome_usuario(String)email(String)tipo_acesso(String)cod_filial(Integer)funcao_usuario(String)
A entidade Movimentacao-Moto possui os seguintes atributos:
cod_movimento(Integer)cod_moto(Integer)cod_filial(Integer)tipo_movimento(String)data_movimento(LocalDateTime)manutencao_necessaria(String)
A entidade Manutencao-Moto possui os seguintes atributos:
cod_manutencao(Integer)cod_moto(Integer)tipo_manutencao(String)data_manutencao(LocalDateTime)
A entidade Localizacao-Moto possui os seguintes atributos:
cod_localizacao(Integer)cod_moto(Integer)cod_filial(Integer)box_posicao(String)status(String)data_entrada(LocalDateTime)data_saida(LocalDateTime)
A entidade Sensor-Moto possui os seguintes atributos:
cod_sensor(Integer)cod_filial(Integer)tipo_sensor(String)local_instalacao(String)cod_moto(Integer)
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /paises |
Criar um novo país |
| GET | /paises |
Listar todos os países |
| PUT | /paises/{id} |
Atualizar um país pelo ID |
| DELETE | /paises/{id} |
Deletar um país pelo ID |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /estados |
Criar um novo estado |
| GET | /estados |
Listar todos os estados |
| PUT | /estados/{id} |
Atualizar um estado pelo ID |
| DELETE | /estados/{id} |
Deletar um estado pelo ID |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /clientes |
Criar um novo cliente |
| GET | /clientes |
Listar todos os clientes |
| PUT | /clientes/{id} |
Atualizar um cliente pelo ID |
| DELETE | /clientes/{id} |
Deletar um cliente pelo ID |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /cidades |
Criar uma nova cidade |
| GET | /cidades |
Listar todas as cidades |
| PUT | /cidades/{id} |
Atualizar uma cidade pelo ID |
| DELETE | /cidades/{id} |
Deletar uma cidade pelo ID |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /filiais |
Criar uma nova filial |
| GET | /filiais |
Listar todas as filiais |
| PUT | /filiais/{id} |
Atualizar uma filial pelo ID |
| DELETE | /filiais/{id} |
Deletar uma filial pelo ID |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /motos |
Criar uma nova moto |
| GET | /motos |
Listar todas as motos |
| PUT | /motos/{id} |
Atualizar uma moto pelo ID |
| DELETE | /motos/{id} |
Deletar uma moto pelo ID |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /usuarios |
Criar um novo usuário |
| GET | /usuarios |
Listar todos os usuários |
| PUT | /usuarios/{id} |
Atualizar um usuário pelo ID |
| DELETE | /usuarios/{id} |
Deletar um usuário pelo ID |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /movimentacao-moto |
Criar um novo movimento |
| GET | /movimentacao-moto |
Listar todos os movimentos |
| PUT | /movimentacao-moto/{id} |
Atualizar um movimento pelo ID |
| DELETE | /movimentacao-moto/{id} |
Deletar um movimento pelo ID |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /manutencao-moto |
Criar uma nova manutenção |
| GET | /manutencao-moto |
Listar todas as manutenções |
| PUT | /manutencao-moto/{id} |
Atualizar uma manutenção pelo ID |
| DELETE | /manutencao-moto/{id} |
Deletar uma manutenção pelo ID |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /localizacao-moto |
Criar uma nova localização |
| GET | /localizacao-moto |
Listar todas as localizações |
| PUT | /localizacao-moto/{id} |
Atualizar uma localização pelo ID |
| DELETE | /localizacao-moto/{id} |
Deletar uma localização pelo ID |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /sensor-moto |
Criar um novo sensor |
| GET | /sensor-moto |
Listar todos os sensores |
| PUT | /sensor-moto/{id} |
Atualizar um sensor pelo ID |
| DELETE | /sensor-moto/{id} |
Deletar um sensor pelo ID |
- Java JDK 11 ou superior
- Maven
- IntelliJ IDEA
- Postman (ou ferramenta equivalente para testes de API)
git clone <URL_DO_REPOSITÓRIO>
cd <NOME_DO_DIRETÓRIO>- Inicie o IntelliJ IDEA.
- Selecione File > Open...
- Navegue até a pasta do projeto e clique em OK.
- Aguarde a importação do Maven.
-
H2 (padrão): não requer configuração adicional.
-
Oracle: edite o arquivo
src/main/resources/application.properties:spring.datasource.url=jdbc:oracle:thin:@//HOST:PORT/SERVICENAME spring.datasource.username=SEU_USUARIO spring.datasource.password=SUA_SENHA
-
No IntelliJ, abra a classe principal e clique no ícone Run.
-
Ou via terminal:
mvn spring-boot:run
- Base URL:
http://localhost:8080 - Importe a coleção, se houver, ou crie requests manualmente:
-
GET
/paises -
POST
/paises{ "nomePais": "Brasil" } -
Outros endpoints conforme definido acima.
-