LuggyCar é um sistema de back-end para gestão de aluguel de carros, desenvolvido pela turma de Bacharelado em Sistemas da informação, durante o 6º semestre (2024.2) pela materia de Programação Web II do Centro Universitário UNIME de Lauro de Freitas. Com o LuggyCar, é possível realizar a administração completa de clientes, usuários, veículos e locações, oferecendo um sistema robusto para o mercado de locação de automóveis.
O sistema permite gerenciar:
- Clientes e usuários do sistema com segurança.
- Carros, incluindo suas categorias, opcionais, acessórios e registro de sinistros.
- Locações, proporcionando um controle detalhado de todos os processos de aluguel.
Este projeto foi orientado pelo professor Paulo Reis e detalhado em um levantamento de requisitos no Notion.
- Java
- Spring framework
- Maven
- MySQL
- JDK 17 ou superior
- Apache Maven
- MySQL
Existem dois tipos de usuarios no sistema:
- ADMIN
Tem autorização de acessar todas as rotas com todos os metodos HTTP.
- USER
Tem autorização de acessar todas as rotas mas somente com os metodos HTTP GET.
- Criar um novo usuario
- Método HTTP:
POST
- Rota:
/auth/register
- Descrição: Cria um novo usuario do sistema. É necessário enviar o json a seguir:
- Método HTTP:
{
"login":"admin",
"password":"123456789",
"role":"ADMIN"
}
- Logar no sistema
- Método HTTP:
POST
- Rota:
/auth/login
- Descrição: recebe um token de acesso com duração de 2 horas
- Método HTTP:
{
"login":"admin",
"password":"123456789"
}
OBS: Ao logar no sistema, recebe um token para fazer requisições com validade de 2 horas.
-
Listar todas as Categorias
- Método HTTP:
GET
- Rota:
/api/category
- Descrição: Recupera uma lista de registro de todas as Categoria.
- Método HTTP:
-
Criar uma nova Categoria
- Método HTTP:
POST
- Rota:
/api/category
- Descrição: Cria um novo registro de Categoria. É necessário enviar os dados da Categoria no corpo da requisição (modelo json mais a baixo).
- Método HTTP:
-
Mostrar uma Categoria específico por id
- Método HTTP:
GET
- Rota:
/api/category/{id}
- Descrição: Recupera as informações de uma Categoria baseado no
id
.
- Método HTTP:
-
Atualizar uma Categoria em específico
- Método HTTP:
PUT
- Rota:
/api/category/{id}
- Descrição: Atualiza uma Categoria específico baseado no
id
. Os dados atualizados devem ser enviados no corpo da requisição. (modelo json mais a baixo).
- Método HTTP:
-
Excluir uma Categoria específica
- Método HTTP:
DELETE
- Rota:
/api/category/{id}
- Descrição: Remove uma Categoria em específico baseado no
id
.
- Método HTTP:
Para criar ou atualizar uma Categoria, utilize o seguinte modelo JSON:
{
"name": "Sedan",
"description": "Carro como um sedan"
}
-
Listar todos os veiculos
- Método HTTP:
GET
- Rota:
/api/vehicle
- Descrição: Recupera uma lista de registro de todos os veiculos.
- Método HTTP:
-
Criar um novo veiculos
- Método HTTP:
POST
- Rota:
/api/vehicle
- Descrição: Cria um novo registro de veiculo. É necessário enviar os dados do veiculos no corpo da requisição (modelo json mais a baixo).
- Método HTTP:
-
Mostrar uma veiculo específico por id
- Método HTTP:
GET
- Rota:
/api/vehicle/{id}
- Descrição: Recupera as informações de um veiculo baseado no
id
.
- Método HTTP:
-
Atualizar um veiculo em específico
- Método HTTP:
PUT
- Rota:
/api/vehicle/{id}
- Descrição: Atualiza um veiculo específico baseado no
id
. Os dados atualizados devem ser enviados no corpo da requisição. (modelo json mais a baixo).
- Método HTTP:
-
Excluir um veiculo específico
- Método HTTP:
DELETE
- Rota:
/api/vehicle/{id}
- Descrição: Remove um veiculo específico baseado no
id
.
- Método HTTP:
Para criar ou atualizar um veiculo, utilize o seguinte modelo JSON:
{
"name": "Creta",
"manufacturer": "HONDA",
"version": "flex",
"categoryName": "Cabriolet",
"urlFipe": "https://www.fipe.org.br/mustang-gt",
"plate": "CBC1234",
"color": "SILVER",
"transmission": "MANUAL",
"currentKm": "15000",
"passangerCapacity": "4",
"trunkCapacity": "450",
"accessories": ["AIRBAGS", "GPS"],
"dailyRate": 500.00
}
Para diferenciar os clientes juridicos das pessoas fisicas, utilizamos o "personType" como "PF" ou "PJ". No caso de PF os campos específicos para pessoa jurídica (cnpj, companyName) devem ser nulos, e vice-versa para pessoa jurídica. Essa estrutura permite flexibilidade, adaptando-se às necessidades de identificação e armazenamento de dados para ambos os tipos de pessoa. O CEP é validado pela API dos correios.
-
Listar todos os clientes
- Método HTTP:
GET
- Rota:
/api/client
- Descrição: Recupera uma lista de registro de todos os clientes.
- Método HTTP:
-
Criar um novo cliente
- Método HTTP:
POST
- Rota:
/api/client
- Descrição: Cria um novo registro de cliente. É necessário enviar os dados do cliente no corpo da requisição (modelo json mais a baixo).
- Método HTTP:
-
Mostrar um cliente específico por id
- Método HTTP:
GET
- Rota:
/api/client/{id}
- Descrição: Recupera as informações de um cliente baseado no
id
.
- Método HTTP:
-
Mostrar um cliente específico por documento
- Método HTTP:
GET
- Rota:
/api/client/{doc}
- Descrição: Recupera as informações de um cliente baseado no CNPJ ou CPF.
- Método HTTP:
-
Atualizar um cliente em específico
- Método HTTP:
PUT
- Rota:
/api/client/{id}
- Descrição: Atualiza um cliente específico baseado no
id
. Os dados atualizados devem ser enviados no corpo da requisição. (modelo json mais a baixo).
- Método HTTP:
-
Excluir um cliente específico
- Método HTTP:
DELETE
- Rota:
/api/client/{id}
- Descrição: Faz a pseudonimização dos dados sensiveis de um cliente específico baseado no
id
.
- Método HTTP:
Para criar ou atualizar uma cliente, utilize o seguinte modelo JSON: Pessoa fisica
{
"personType": "PJ",
"cnpj": "{cnpj valido}",
"companyName": "company xyz",
"email": "xyz@example.com",
"dateBirth": "1998-12-30",
"cep": "41200100",
"endereco": "rua xyz",
"registration": "2024-11-01"
}
Pessoa Juridica
{
"personType": "PF",
"naturalPersonName": "joao silva",
"cpf": "{cpf valido}",
"email": "joao@example.com",
"gender": "MASCULINO",
"dateBirth": "1998-12-31",
"cep": "41200100",
"endereco": "rua xyz"
}
-
Listar todos os sinistros
- Método HTTP:
GET
- Rota:
/api/accident
- Descrição: Recupera uma lista de sinistros de todos os veiculos.
- Método HTTP:
-
Registra um novo sinistro
- Método HTTP:
POST
- Rota:
/api/accident
- Descrição: Cria um novo registro de sinistro. É necessário enviar os dados do sinistro no corpo da requisição (modelo json mais a baixo).
- Método HTTP:
-
Mostrar um sinistroespecífico por id
- Método HTTP:
GET
- Rota:
/api/sinistro/{id}
- Descrição: Recupera as informações de um sinistro baseado no
id
.
- Método HTTP:
-
Atualizar um sinistro em específico
- Método HTTP:
PUT
- Rota:
/api/accident/{id}
- Descrição: Atualiza um sinistro específico baseado no
id
. Os dados atualizados devem ser enviados no corpo da requisição. (modelo json mais a baixo).
- Método HTTP:
-
Excluir um sinistro específico
- Método HTTP:
DELETE
- Rota:
/api/accident/{id}
- Descrição: Remove um sinistro específico baseado no
id
.
- Método HTTP:
Para criar ou atualizar um sinistro, utilize o seguinte modelo JSON:
{
"severity": "LOW",
"description": "Accidente leve, sem feridos.",
}
-
Listar todos os Opcionais
- Método HTTP:
GET
- Rota:
/api/optionalitem
- Descrição: Recupera uma lista de registro de todos os Opcionais.
- Método HTTP:
-
Criar um novo opcional
- Método HTTP:
POST
- Rota:
/api/optionalitem
- Descrição: Cria um novo registro de opcional. É necessário enviar os dados do opcional no corpo da requisição (modelo json mais a baixo).
- Método HTTP:
-
Mostrar um opcional específico por id
- Método HTTP:
GET
- Rota:
/api/optionalitem/{id}
- Descrição: Recupera as informações de um opcional baseado no
id
.
- Método HTTP:
-
Atualizar um opcional em específico
- Método HTTP:
PUT
- Rota:
/api/optionalitem/{id}
- Descrição: Atualiza um opcional específico baseado no
id
. Os dados atualizados devem ser enviados no corpo da requisição. (modelo json mais a baixo).
- Método HTTP:
-
Excluir um opcional específico
- Método HTTP:
DELETE
- Rota:
/api/optionalitem/{id}
- Descrição: Remove um opcional específico baseado no
id
.
- Método HTTP:
Para criar ou atualizar um opcional, utilize o seguinte modelo JSON:
{
"name": "Cadeira De Bebê",
"rentalValue": 15.5,
"quantityAvailable": 10.0
}
-
Listar todas as locações
- Método HTTP:
GET
- Rota:
/api/rent
- Descrição: Recupera uma lista de registro de todas as locações.
- Método HTTP:
-
Criar uma nova locação
- Método HTTP:
POST
- Rota:
/api/rent
- Descrição: Cria um novo registro de locação. É necessário enviar os dados da locação no corpo da requisição (modelo json mais a baixo).
- Método HTTP:
-
Mostrar uma locação específico por id
- Método HTTP:
GET
- Rota:
/api/rent/{id}
- Descrição: Recupera as informações de uma locação baseado no
id
.
- Método HTTP:
-
Atualizar uma locação em específico
- Método HTTP:
PUT
- Rota:
/api/rent/{id}
- Descrição: Atualiza uma locação específico baseado no
id
. Os dados atualizados devem ser enviados no corpo da requisição. (modelo json mais a baixo).
- Método HTTP:
-
Excluir uma locação específica
- Método HTTP:
DELETE
- Rota:
/api/rent/{id}
- Descrição: Remove uma locação em específico baseado no
id
.
- Método HTTP:
-
Dar baixa em uma locação específica
- Método HTTP:
Em construção
- Rota:
Em construção
- Descrição: Em construção.
- Método HTTP:
Para criar ou atualizar uma cliente, utilize o seguinte modelo JSON:
{
"dailyRate": 100.00,
"totalDays": 1,
"deposit": 100.00,
"kmInitial": 15.000,
"kmFinal": 15.800,
"client": {
"id": 1
},
"vehicle":{
"id": 1
}
}
- O uso de IntelliJ IDEA
- Para clonar o projeto, use o comando
git clone
com o URL do repositório.git clone https://github.com/MichelNsouza/LuggyCar.git
- Navegue para o diretório do projeto:
cd LuggyCar
- Antes de executar o projeto, você deve garantir que ele está compilado corretamente. No IntelliJ procure pelo icone do maven ou no diretório do projeto, execute o comando Maven para compilar:
mvn clean install
- Isso irá baixar todas as dependências e compilar o código.
- Para executar o projeto Spring Boot, no IntelliJ você pode clicar no icone verde de play (►) ou pode usar o seguinte comando:
mvn spring-boot:run
- Isso iniciará o servidor embutido (geralmente Tomcat) e a aplicação ficará disponível na porta padrão (geralmente
http://localhost:8080
).
- Acesse a aplicação pelo navegador ou use ferramentas como
curl
ou Postman para fazer requisições à API (exemplo:http://localhost:8080/auth/register
).
Orientação