Este projeto consiste em uma aplicação web para gerenciamento de uma locadora de carros. A aplicação permite o controle eficiente dos automóveis da empresa, motoristas, e o registro detalhado da utilização de cada veículo.
- Adicionar novos carros à frota.
- Atualizar informações de carros existentes.
- Excluir carros da base de dados.
- Recuperar detalhes de um carro pelo seu identificador único.
- Listar carros cadastrados, com opção de filtrar por cor e marca.
- Registrar novos motoristas.
- Atualizar informações de motoristas existentes.
- Excluir motoristas da base de dados.
- Recuperar detalhes de um motorista pelo seu identificador único.
- Listar motoristas cadastrados, com opção de filtrar por nome.
- Criar registros de utilização de um automóvel por um motorista, com data de início e motivo.
- Finalizar a utilização de um automóvel por um motorista, registrando a data de conclusão.
- Listar os registros de utilização, exibindo o nome do motorista e informações do automóvel utilizado.
- Um carro só pode ser utilizado por um motorista por vez.
- Um motorista só pode utilizar um carro por vez.
- Um carro só pode ser utilizado por um motorista se estiver disponível.
Linguages/Ferramentas | Icon |
---|---|
Node.JS | |
TypeScript | |
Express.js | |
Sequeize | |
MySQL | |
SQLITE | |
Docker | |
Jest | |
VS Code | |
Git |
-
Clone o repositório
git clone [email protected]:GabrielCoruja/drive-rental-control.git
-
Instale os pacotes NPM
npm install
-
Inicie o banco de dados e a aplicação
Start da aplicação com Docker
-
Para subir a aplicação e o banco de dados, execute o comando:
docker-compose up -d --build
Obs: Utilizando o docker os dados serão persistidos utilizando o MySQL.
Start da aplicação localmente
-
Contrução das tabelas no banco de dados:
npm run build && npm run db:migrate && npm run db:seed
-
Start da aplicação:
npm run dev
Obs: Utilizando localmente os dados serão persistidos utilizando o SQLite.
- O projeto terá como base o endpoint em http://localhost:3001
Para executar os testes, execute o comando:
npm test
O projeto possui um arquivo Insomnia.json com a documentação dos endpoints.
O projeto possui 3 endpoints, sendo eles:
- Url base: http://localhost:3001/cars
GET /cars
-
Retorna todos os carros cadastrados.
-
Endpoind com filtros:
- GET /cars?color=red
- GET /cars?brand=Chevrolet
- GET /cars?color=red&brand=Chevrolet
-
Exemplo de resposta:
[ { "licensePlateId": "ABC-1234", "name": "Corsa", "brand": "Chevrolet", "color": "red" }, { "licensePlateId": "DEF-5678", "name": "Opala", "brand": "Chevrolet", "color": "gray" }, { "licensePlateId": "GHI-9012", "name": "Uno", "brand": "Fiat", "color": "blue" } ]
GET /cars/:id
-
Retorna os detalhes de um carro específico.
-
Endpoint com parâmetro:
- GET /cars/ABC-1234
-
Exemplo de resposta:
{ "licensePlateId": "ABC-1234", "name": "Corsa", "brand": "Chevrolet", "color": "red" }
-
Exemplo de resposta com carro não encontrado:
{ "message": "Car not found" }
POST /cars
-
Cria um novo carro.
-
Exemplo de requisição:
{ "licensePlateId": "AAA-9999", "name": "Ferrari 93", "brand": "Ferrari", "color": "red" }
-
Exemplo de resposta:
{ "licensePlateId": "AAA-9999", "name": "Ferrari 93", "brand": "Ferrari", "color": "red" }
PUT /cars/:id
-
Atualiza as informações de um carro específico.
-
Endpoint com parâmetro:
- PUT /cars/AAA-9999
-
Exemplo de requisição:
{ "name": "Ferrari 93", "brand": "Ferrari", "color": "red" }
-
Exemplo de resposta:
{ "licensePlateId": "AAA-9999", "name": "Ferrari 93", "brand": "Ferrari", "color": "red" }
-
Exemplo de resposta com carro não encontrado:
{ "message": "Car not found" }
DELETE /cars/:id
-
Exclui um carro específico.
-
Endpoint com parâmetro:
- DELETE /cars/AAA-9999
-
Resposta sem corpo.
-
Exemplo de resposta com carro não encontrado:
{ "message": "Car not found" }
- Url base: http://localhost:3001/drivers
GET /drivers
-
Retorna todos os motoristas cadastrados.
-
Endpoint com filtros:
- GET /drivers?fullname=Silva
-
Exemplo de resposta:
[ { "id": 1, "fullName": "Lucas Silva", "email": "[email protected]", }, { "id": 2, "fullName": "João Silva", "email": "[email protected]", } ]
GET /drivers/:id
-
Retorna os detalhes de um motorista específico.
-
Endpoint com parâmetro:
- GET /drivers/1
-
Exemplo de resposta:
{ "id": 1, "fullName": "Lucas Silva", "email": "[email protected]", }
-
Exemplo de resposta com motorista não encontrado:
{ "message": "Driver not found" }
POST /drivers
-
Cria um novo motorista.
-
Exemplo de requisição:
{ "fullName": "Gabriel Silva", "email": "[email protected]", }
-
Exemplo de resposta:
{ "id": 3, "fullName": "Gabriel Silva", "email": "[email protected]", }
PUT /drivers/:id
-
Atualiza as informações de um motorista específico.
-
Endpoint com parâmetro:
- PUT /drivers/3
-
Exemplo de requisição:
{ "fullName": "Gabriel Coruja", "email": "[email protected]", }
-
Exemplo de resposta:
{ "id": 3, "fullName": "Gabriel Coruja", "email": "update.email.com", }
-
Exemplo de resposta com motorista não encontrado:
{ "message": "Driver not found" }
DELETE /drivers/:id
-
Exclui um motorista específico.
-
Endpoint com parâmetro:
- DELETE /drivers/3
-
Resposta sem corpo.
-
Exemplo de resposta com motorista não encontrado:
{ "message": "Driver not found" }
- Url base: http://localhost:3001/rentals
GET /rentals/:driverId
-
Retorna todos os registros de aluguel de um motorista específico.
-
Endpoint com parâmetro:
- GET /rentals/1
-
Exemplo de resposta:
[ { "id": 3, "fullname": "Maria Silva", "email": "[email protected]", "rentalCars": [ { "licensePlateId": "GHI-9012", "name": "Chevette", "brand": "Chevrolet", "color": "blue", "RentalCarModel": { "startDate": "2024-01-11T15:07:17.053Z", "endDate": "2024-01-11T15:07:17.053Z", "description": "job" } }, { "licensePlateId": "ABC-1234", "name": "Corsa", "brand": "Chevrolet", "color": "red", "RentalCarModel": { "startDate": "2024-01-11T15:07:17.053Z", "endDate": "2024-01-11T15:07:17.053Z", "description": "job" } } ], }, ]
-
Exemplo de resposta com motorista não encontrado:
{ "message": "Driver not found" }
POST /rentals
-
Cria um novo registro de aluguel de carro.
-
Exemplo de requisição:
{ "driverId": 1, "licensePlateId": "GHI-9012", "description": "job" }
-
Exemplo de resposta:
{ "driverId": 1, "licensePlateId": "GHI-9012", "star": "2024-01-11T15:07:17.053Z", "endDate": "2024-01-11T15:07:17.053Z", "description": "job" }
-
Exemplo de carro ou motorista vinculado a outro aluguel:
{ "message": "Car or Driver already in use" }
PUT /rentals/:driverId
-
Finaliza um registro de aluguel de carro.
-
Endpoint com parâmetro:
- PUT /rentals/1
-
Exemplo de resposta:
{ "driverId": 1, "licensePlateId": "GHI-9012", "star": "2024-01-11T15:07:17.053Z", "endDate": "2024-01-11T15:07:17.053Z", "description": "job" }
-
Exemplo de resposta com motorista não encontrado:
{ "message": "Driver not found" }