RentalX é uma API responsável pela gerenciamento de alugueis de carros. Esse projeto foi construido durante o Bootcamp Ignite da Rocketseat.
RentalX é uma API que foi construida durante o Bootcamp Ignite da Rocketseat com o objetivo de introduzir os principais conceitos de desenvolvimento de código e as tecnologias mais utilizadas no mercado atualmente no que se diz respeito do desenvolvimento backend com NodeJS.
A ideia é desenvolver uma aplicação que permita o gerenciamento de alugueis de carros, permitindo aos usuários à cadastrar veiculos novos no sistema, informações sobre clientes, permitir o aluguel do carros, receber o carro devolvido, dentro outros.
O desenvolvimento da aplicação se sustenta com base nos princípios da arquitetura limpa e do SOLID. Isso foi algo bastante abordados duantes às aulas é possivel ver sua presença na construção de casos de uso, entidades, e a aplicação do padrão de repositório.
- Deve ser possível cadastrar um novo carro.
- Não deve ser possível cadastrar um carro com uma placa já existente.
- Não deve ser possível cadastrar um carro se o usuário não for administrador *.
- Deve se cadastrar um carro com disponibilidade por padrão.
- Deve ser possível listar todos os carros disponíveis.
- Deve ser possivel listar todos os carros disponíveis pelo nome da categoria.
- Deve ser possivel listar todos os carros disponíveis pelo nome da marca.
- Deve ser possivel listar todos os carros disponíveis pelo nome do carro (modelo).
- Deve ser possível listar os carros mesmo se o usuário não estiver logado.
- Deve ser possivel cadastrar especificações para um carro.
- Deve ser possivel listar todas as especificações.
- Deve ser possível listar todos os carros
- Não deve ser possivel cadastrar uma especificação para um carro não cadastrado.
- Não deve ser possível cadastrar uma especificação já existente para um mesmo carro.
- Não deve ser possível cadastrar um carro se o usuário não for administrador.
- Deve ser possível cadastrar a imagem do carro.
- Deve ser possível listar todos os carros, independente da disponibilidade.
- Utilizar o Multer para upload dos arquivos.
- Não deve ser possível cadastrar uma imagem do carro se o usuário não for administrador.
- Deve ser possível cadastrar mais de uma imagem para um mesmo carro.
- Deve ser possível cadastrar um aluguel.
- Não deve ser possível cadastrar um aluguel com duração menor que 24 horas.
- Não deve ser possível cadastrar um novo aluguel caso já exista um aberto para um mesmo usuário.
- Não deve ser possível cadastrar um novo aluguel caso já exista um aberto para um mesmo carro.
- NodeJS
- Typescript
- Express
- ts-node-dev
- yarn
- TypeORM
- Docker
- eslint
- prettier
Atualmente, o projeto está rodando no docker e não possui ainda associação com banco de dados. Portanto, após clonar esse repositório, deve-se criar o container usando o docker-compose antes de rodar a aplicação.
# Clonar o repositório
$ git clone https://github.com/hereisjohnny2/rentalx.git
# Criar a imagem
$ docker build -t rentalx
# Rodar aplicação em modo de desenvolvimento
$ docker-compose up
Retorna todas as categorias armazenadas no banco de dados se um usuário válido e com atribuições de administrador está fazendo a solicitação.
Cria uma nova categoria, recebendo o name
e a description
dela no corpo da requisição, desde que não seja um name
já existente. O formato da requisição fica da seguinte forma.
{
"name": "Nome da Categoria",
"description": "Descrição da Categoria"
}
Cria novas categorias com base em um aquivo .csv, com os atributos de name
e description
. O caminho do arquivo é passado no corpo da requisição e a as categorias são criadas desde que não seja um name
já existente.
Retorna todas as especificações armazenadas no banco de dados se um usuário válido e com atribuições de administrador está fazendo a solicitação.
Cria uma nova especificação, recebendo o name
e a description
dela no corpo da requisição, desde que não seja um name
já existente. O formato da requisição fica da seguinte forma.
{
"name": "Nome da Especificação",
"description": "Descrição da Especificação"
}