/rentalX-nodejs-docker-ignite

A complete backend application with node, express, typescript, typeorm, postgres, docker

Primary LanguageHTML


Rent X - Locação de Carros

Aplicação de estudos voltado para locação de carros, criada juntamente com o programa de especialização da Rocketseat chamado Ignite, intensivo para aceleração de carreira em programação, seguindo a trilha de backend utilizando NodeJS.


FeaturesRequisitosInstalação


Features

Essa aplicação possui princípios do SOLID, você pode consultar mais informações clicando aqui.

Além de seguir boas práticas do SOLID, essa aplicação foi desenvolvida em conjunto de Testes Unitários e Testes de Integração para a redução de erros e auxilio durante o desenvolvimento.

Para seguir os temas citados acima, foram utilizados diversas ferramentas úteis

  • NodeJS
  • Express
  • Typescript
  • ESLint
  • Prettier
  • Bcryptjs
  • Dayjs
  • Multer
  • TypeORM
  • Tsyringe
  • Jest
  • Supertest
  • AWS SDK (IAM, S3, SES, EC2)
  • Docker/Docker-Compose
  • Handlebars
  • JWT
  • Postgres
  • Swagger
  • BCryptJS
  • CI/CD (Github Actions)
  • Redis
  • Rate Limiter Flexible
  • Sentry

Requisitos

Requisitos Funcionais

  • Cadastro de carros

    • Deve ser possível cadastrar um novo carro;
  • Listagem de Carros

    • Deve ser possível listar todos os carros disponíveis;
    • Deve ser possível listar todos os carros disponíveis por categoria;
    • Deve ser possível listar todos os carros disponíveis por marca;
    • Deve ser possível listar todos os carros disponíveis por nome do carro;
  • Cadastro de especificação no carro

    • Deve ser possível cadastrar uma especificação para um carro;
  • Cadastro de imagens do carro

    • Deve ser possível cadastrar a imagem do carro;
  • Aluguel de carro

    • Deve ser possível cadastrar um aluguel;
  • Listagem de aluguel por usuário

    • Deve ser possível realizar a busca de todos os alugueis para o usuário;
  • Devolução de carro

    • Deve ser possível realizar a devolução de um carro;
  • Recuperar senha

    • Deve ser possível o usuário recuperar a senha informando o e-mail;
    • O usuário deve receber um e-mail com passo-a-passo para recuperação da senha;
    • O usuário deve conseguir inserir uma nova senha;


Requisitos Não Funcionais

  • Cadastro de imagens do carro
    • Utilizar o 'multer' para upload dos arquivos


Regra de Negócio

  • Cadastro de carros

    • Não deve ser possível cadastrar um carro com uma placa existente;
    • O carro deve ser cadastrado, por padrão, com disponibilidade;
    • O usuário responsável pelo cadastro deve ser um usuário administrador;
  • Listagem de Carros

    • O usuário não precisa estar logado no sistema;
  • Cadastro de especificação no carro

    • Não deve ser possível cadastrar uma especificação para um carro não cadastrado;
    • Não deve ser possível cadastrar uma especificação já existente para o mesmo carro;
    • O usuário responsável pelo cadastro deve ser um usuário administrador;
  • Cadastro de imagens do carro

    • O usuário deve poder cadastrar mais de uma imagem para o mesmo carro;
    • O usuário responsável pelo cadastro deve ser um usuário administrador;
  • Aluguel de carro

    • O aluguel deve ter duração mínima de 24 horas;
    • Não deve ser possível cadastrar um novo aluguel caso já exista um aberto para o mesmo usuário;
    • Não deve ser possível cadastrar um novo aluguel caso já exista um aberto para o mesmo carro;
    • O usuário deve estar logado na aplicação;
    • Ao realizar um aluguel, o status do carro deverá ser alterado para indisponível;
  • Listagem de alugueis por usuário

    • O usuário deve estar logado na aplicação;
  • Devolução de carro

    • Se o carro for devolvido com menos de 24 horas, deverá ser cobrado diária completa;
    • Ao realizar a devolução, o carro deverá ser liberado para outro aluguel;
    • Ao realizar a devolução, deverá ser calculado o total do aluguel;
    • Caso o horário de devolução seja superior ao horário previsto de entrega, deverá ser cobrado multa proporcional aos dias de atraso;
    • Caso haja multa, deverá ser somado ao total do aluguel;
    • O usuário deve estar logado na aplicação;
  • Recuperar senha

    • O usuário precisa informar uma nova senha;
    • O link enviado para recuperação deve expirar em 3 horas;

Instalação/Execução

Essa aplicação utiliza Nodejs para a execução do mesmo.

Também existe a possibilidade de executar via Docker/Docker-Compose.

Instalação via docker

# docker
docker build -t rentx .

Instalação via node ou yarn

# yarn
yarn
# node
npm install

Carregando tabelas banco de dados

# yarn
yarn typeorm migration:run
# node
npm run typeorm migration:run

Seed de usuário administrador

# yarn
yarn seed:admin
# node
npm run seed:admin

Execução do projeto

# docker
docker run -p 3333:3333 rentx

# docker-compose
docker-compose up --force-recreate

# docker-compose rodando em background
docker-compose up -d

# yarn
yarn dev
# node
npm run dev

Execução de testes da aplicação

# yarn
yarn test
# node
npm run test