Este projeto é uma aplicação web de venda de carros, desenvolvido durante o módulo de back-end do curso de Desenvolvimento Web da Trybe. Ele permite aos usuários navegar por diferentes modelos de carros, visualizar informações detalhadas e agendar um test drive.
Para a construção da aplicação, foram utilizadas tecnologias como TypeScript
, Node.js
e Express
. O projeto foi iniciado com um template fornecido pela Trybe, o qual oferece uma estrutura de diretórios e arquivos para o front-end da aplicação. Além disso, foram aplicados os princípios de Programação Orientada a Objetos (POO
) na construção de uma API com CRUD
para gerenciar uma concessionária de veículos, utilizando o banco de dados MongoDB
.
Para a interação com o banco de dados, foi utilizada a biblioteca Mongoose
, e para a realização de testes automatizados, foi utilizada a biblioteca Jest
.
O objetivo do projeto é fornecer uma experiência atraente e eficiente aos usuários, garantindo a segurança e qualidade do sistema.
Rodando o projeto
1. Instale as dependências rodando npm install na raiz do projeto;
Requisitos
1 - Criação da interface IModel
genérica
- Desenvolvido em
/src/interfaces/IModel.ts
.
Esta interface é usada para a conexão com o banco de dados e possui as funções create()
, read()
, readOne()
, update()
e delete()
.
Por ser genérica, a interface recebe um tipo T
qualquer, e espera, em cada função, as seguintes especificações:
create()
: recebe um objeto do tipoT
e retorna uma Promise do tipoT
.read()
: deve retorna uma Promise contendo um array de objetos do tipoT
.readOne()
: recebe uma string e retorna uma Promise do tipoT
ou nula.update()
: recebe uma string e um objeto do tipoT
e retorna uma Promise do tipoT
ou nula.delete()
: recebe uma string e retorna uma Promise do tipoT
ou nula.
2 - Criação da interface IVehicle
genérica
Desenvolvido em
/src/interfaces/IVehicle.ts
.
Interface utilizada para criação dos tipos de carro, moto e caminhão. Ela contém todos os atributos comuns de todos os veículos que listados aqui. São eles:
Atributo | Descrição |
---|---|
model |
Marca e/ou modelo do veículo. É uma string com, pelo menos, 3 caracteres. |
year |
Ano de fabricação do veículo. É um valor inteiro positivo maior ou igual a 1900, porém menor ou igual a 2022. |
color |
Cor principal do veículo. É uma string com, pelo menos, 3 caracteres. |
status |
Status que define se um veículo pode ou não ser comprado. Recebe valores booleanos e é opcional. |
buyValue |
Valor de compra do veículo. Recebe apenas números inteiros. |
3 - Criação da interface ICar
a partir da interface IVehicle
Desenvolvido em
/src/interfaces/ICar.ts
.
A interface possio todos os atributos da interface IVehicle
e, também, os atributos:
Atributo | Descrição |
---|---|
doorsQty |
Quantidade de portas de um carro. É um valor inteiro positivo maior ou igual a 2 e menor ou igual a 4 |
seatsQty |
Quantidade de assentos disponíveis no carro. É maior ou igual a 2 e menor ou igual a 7 |
4 - Criação de uma rota para o endpoint /cars
onde é possível cadastrar um novo carro
Criação de uma rota que receba uma requisição POST
para cadastrar um veículo do tipo carro.
-
A rota retorna erro
400
caso:- A requisição receba um objeto vazio;
- Tentar criar um carro com quantidade de assentos inferior a 2;
- Tentar criar um carro com quantidade de portas inferior a 2;
- Tentar criar um carro sem
model
,year
,color
ebuyValue
; - Tentar criar um carro sem
doorsQty
eseatsQty
;
-
Não é possível criar um carro se os atributos
model
,year
,color
,buyValue
,doorsQty
eseatsQty
caso estejam com tipos errados; -
Sua API responde com status http
201
e o seguinte body:_id: "4edd40c86762e0fb12000003", model: "Ferrari Maranello", year: 1963, color: "red", buyValue: 3500000, seatsQty: 2, doorsQty: 2
5 - Desenvolvimento de testes para cobrir 15% das camadas Model, Service e Control
Desenvolvidos em
src/tests/unit/model
.src/tests/unit/services
esrc/tests/unit/controllers
6 - Criação de uma rota para o endpoint /cars
onde é possível listar todos os carros registrados
Criação de uma rota que recebe uma requisição GET
para receber todos os veículos do tipo carro
registrados no banco de dados.
7 - Criação de uma rota para o endpoint /cars/id
onde é possível listar um único carro através do seu id
Criação de uma rota que recebe uma requisição GET
para receber determinado veículo do tipo carro
que possui o id
passado como parâmetro na rota.
8 - Desenvolvimento de testes para cobrir 30% das camadas Model, Service e Control
Desenvolvidos em
src/tests/unit/model
.src/tests/unit/services
esrc/tests/unit/controllers
9 - Criação de uma rota para o endpoint /cars/id
, onde é possível atualizar o registro de um carro através do seu id
Criação de uma rota que recebe uma requisição PUT
para atualizar determinado veículo do tipo carro que possui o id
passado como parâmetro na rota.
- É disparado o erro
404
Object not found
caso o id possua 24 caracteres, mas seja inválido; - É disparado o erro
400
Id must have 24 hexadecimal characters
caso o id possua menos que 24 caracteres; - É disparado o erro
400
caso obody
esteja vazio; - Um carro é atualizado com sucesso;
- A API responde com status http
200
e o seguinte body, em caso de sucesso:
_id: "4edd40c86762e0fb12000003",
model: "Fiat Uno",
year: 1963,
color: "blue",
buyValue: 3500,
seatsQty: 4,
doorsQty: 4
10 - Criação de uma rota para o endpoint /cars/id
para excluir os registros de um carro
Criação de uma rota que recebe uma requisição DELETE
para excluir determinado veículo do tipo carro que possua o id
passado como parâmetro na rota.