Skip to content

ProZeuss/parking-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API de Sistema de Estacionamento

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.

Tecnologias Utilizadas

  • Java 21
  • Spring Boot 3+
  • Spring Data JPA
  • Lombok
  • Maven
  • H2 Database (Padrão para testes)
  • MySQL (Configuração disponível)

Como Executar

  1. Pré-requisitos:

    • JDK 21
    • Um cliente API (Postman, Insomnia, etc.)
  2. Clonar o Repositório (ou ter o projeto descompactado)

  3. 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.properties e 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)
  4. Executar a Aplicação: Abra o projeto no IntelliJ e execute a classe principal ParkingApiApplication.java (clicando no botão "Play").


Documentação dos Endpoints

A URL base da API é http://localhost:8080/api

1. ParkingLot (Estacionamentos)

POST /api/parking-lots

Cria um novo estacionamento.

  • Request Body (JSON):

    {
      "name": "Shopping Estação",
      "location": "Centro",
      "capacity": 50
    }

    (Campos name e capacity são obrigatórios)

  • Response (201 Created):

    {
      "id": 1,
      "name": "Shopping Estação",
      "location": "Centro",
      "capacity": 50,
      "vehicles": []
    }

GET /api/parking-lots

Lista todos os estacionamentos cadastrados.

  • Response (200 OK):
    [
      {
        "id": 1,
        "name": "Shopping Estação",
        "location": "Centro",
        "capacity": 50,
        "vehicles": []
      }
    ]

GET /api/parking-lots/{id}

Busca um estacionamento específico pelo seu id.

  • Response (200 OK):
    {
      "id": 1,
      "name": "Shopping Estação",
      "location": "Centro",
      "capacity": 50,
      "vehicles": []
    }

2. Vehicle (Veículos)

POST /api/parking-lots/{lotId}/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, model e color)

  • Response (201 Created):

    {
      "id": 1,
      "plate": "ABC-1234",
      "model": "Fusca",
      "color": "Azul",
      "status": "PARKED",
      "entryTime": "2025-10-24T21:30:00.123456",
      "exitTime": null
    }

PATCH /api/vehicles/{vehicleId}/exit

Registra a saída (Check-out) de um veículo.

  • Regra de Negócio: Altera o status do veículo para OUT e registra a exitTime (hora de saída).

  • Request Body: (Nenhum)

  • Response (200 OK):

    {
      "id": 1,
      "

About

"API de Sistema de Estacionamento com Spring Boot."

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages