Skip to content

GabrielCoruja/drive-rental-control

Repository files navigation

Projeto de Locadora de Carros

Descrição

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.

Funcionalidades

Cadastro de Automóveis:

  • 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.

Cadastro de Motoristas:

  • 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.

Utilização de Automóveis:

  • 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.

Regras de Negócio:

  • 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.

Tecnologias Utilizadas

Linguages/Ferramentas Icon
Node.JS
TypeScript
Express.js
Sequeize
MySQL
SQLITE
Docker
Jest
VS Code
Git

Como Executar o projeto:

Pré-requisitos

Instalação

  1. Clone o repositório

    git clone [email protected]:GabrielCoruja/drive-rental-control.git
  2. Instale os pacotes NPM

    npm install
  3. 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.

  1. O projeto terá como base o endpoint em http://localhost:3001

Testes

Para executar os testes, execute o comando:

npm test

Documentação

O projeto possui um arquivo Insomnia.json com a documentação dos endpoints.

O projeto possui 3 endpoints, sendo eles:

Carros

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"
    }

Motoristas

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"
    }

Aluguel de Carros

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"
    }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages