Este é um projeto de API REST para gerenciar um sistema de estacionamento, desenvolvido como desafio final. A aplicação permite registrar estacionamentos, controlar entradas e saídas de veículos e acompanhar o histórico.
- Java 21
- Spring Boot 3+
- Spring Data JPA
- Lombok
- Maven
- H2 Database (Padrão para testes)
- MySQL (Configuração disponível)
-
Pré-requisitos:
- JDK 21
- Um cliente API (Postman, Insomnia, etc.)
-
Clonar o Repositório (ou ter o projeto descompactado)
-
Configurar o Banco de Dados: O projeto está pré-configurado para usar o H2 (banco em memória). Nenhuma ação é necessária.
Para usar MySQL, edite o arquivo
src/main/resources/application.propertiese comente as linhas do H2 e descomente as linhas do MySQL, ajustando sua URL, usuário e senha:# --- H2 (Padrão) --- spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.h2.console.enabled=true spring.h2.console.path=/h2-console # --- MySQL (Opcional) --- # spring.datasource.url=jdbc:mysql://localhost:3306/parking_db?createDatabaseIfNotExist=true # spring.datasource.username=root # spring.datasource.password=seu_password_aqui # spring.jpa.hibernate.ddl-auto=update # spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
- Se estiver usando H2, você pode acessar o console do banco em:
http://localhost:8080/h2-console(Use o JDBC URL:jdbc:h2:mem:testdb)
- Se estiver usando H2, você pode acessar o console do banco em:
-
Executar a Aplicação: Abra o projeto no IntelliJ e execute a classe principal
ParkingApiApplication.java(clicando no botão "Play").
A URL base da API é http://localhost:8080/api
Cria um novo estacionamento.
-
Request Body (JSON):
{ "name": "Shopping Estação", "location": "Centro", "capacity": 50 }(Campos
nameecapacitysão obrigatórios) -
Response (201 Created):
{ "id": 1, "name": "Shopping Estação", "location": "Centro", "capacity": 50, "vehicles": [] }
Lista todos os estacionamentos cadastrados.
- Response (200 OK):
[ { "id": 1, "name": "Shopping Estação", "location": "Centro", "capacity": 50, "vehicles": [] } ]
Busca um estacionamento específico pelo seu id.
- Response (200 OK):
{ "id": 1, "name": "Shopping Estação", "location": "Centro", "capacity": 50, "vehicles": [] }
Registra a entrada (Check-in) de um veículo em um estacionamento.
-
Regra de Negócio: Falha se o estacionamento (
{lotId}) estiver com a capacidade máxima. -
Request Body (JSON):
{ "plate": "ABC-1234", "model": "Fusca", "color": "Azul" }(Campos
plate,modelecolor) -
Response (201 Created):
{ "id": 1, "plate": "ABC-1234", "model": "Fusca", "color": "Azul", "status": "PARKED", "entryTime": "2025-10-24T21:30:00.123456", "exitTime": null }
Registra a saída (Check-out) de um veículo.
-
Regra de Negócio: Altera o status do veículo para
OUTe registra aexitTime(hora de saída). -
Request Body: (Nenhum)
-
Response (200 OK):
{ "id": 1, "