- Notifications
You must be signed in to change notification settings - Fork0
Projeto realizado com o propósito de aplicar os princípios de POO(Programação Orientada a Objetos) para a construção de uma API REST com CRUD. Essa API simula o back-end de um software de gestão de uma concessionária de veículos.
JoussemarBorges/Car_shop_Joussemar
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Projeto realizado com o propósito de aplicar os princípios de POO(Programação Orientada a Objetos) para a construção de uma API REST com CRUD. Essa API simula o back-end de um software de gestão de uma concessionária de veículos. Nela é possível realizar o cadastro de um novo veículo, buscar todos os veículos cadastrados, buscar um veículo específico pelo Id, atualizar o cadsatro ou deletar um veículo específico pelo Id.Foi utilizado o banco de dados MongoDB e a estrutura do projeto foi organizada com a arquitetura de software em três camadas básicas sendo a Controller, Service e Model(configuradas com o ODM Mongoose).Além do desenvolvimento da API, foi aplicado o conceito de testes unitários, onde foi possível ter uma cobertura de 100% de testes de todas as camadas da aplicação.Me ogrulho muito desse projeto por ter conseguido aplicar com clareza os conceitos descritos aqui.
🐳Para rodar o projeto localmente utilizando o docker:
1. Clone o repositório - Use o comando: `git clone https://github.com/JoussemarBorges/Car_shop_Joussemar`. - Entre na pasta do repositório que você acabou de clonar: - `cd sd-024-a-project-car-shop`2. Instale as dependências: - `npm install`3. Certifique-se de ter o docker instalado na versão 1.29 ou superior. Você pode verificar como instalar o docker na documentação: https://docs.docker.com/compose/install/.4. O arquivo docker-compose.yml contém as configurações necessárias para rodar os serviços "app-car-shop" - que irá rodar o node - e "mongodb" que irá rodar o mongodb. - Já esxiste um arquivo Dokcerfile na raiz do projeto com as configurações necessárias para montar a imagem do node.5. Para subir os containers, conforme as configurações acima, rode o comando: - docker-compose up - d - Esse comando fará a montagem dos container em segundo plano(-d) - A partir daqui já é possível rodar o container car_shop via CLI ou abri-lo no VS Code. - Caso deseje usar o terminal interativo do container criado pelo compose, utilize o comando docker exec -it car_shop bash
Há duas coleções no Data Base car_shop_db. As regras das requisições se aplicam para ambas as coleções, com pequenas diferenças que serão exemplificadas.
Cadastra um veículo na coleção correspondente (cars ou motorcycles) do DB:
POST /cars/POST /motorcycle/
Parâmetro | Tipo | Descrição |
---|---|---|
body | object | Obrigatório. Propriedades e valores para atualização |
- O body da requisição deve seguir o padrão conforme exemplo abaixo: Car: { "model": "Marea", "year": 1992, "color": "Red", "status": true, **O único campo opcional** "buyValue": 12.000, "doorsQty": 2, "seatsQty": 5 } Motorcycle: { "model": "Honda Cb 600f Hornet", "year": 2005, "color": "Yellow", "status": true, "buyValue": 30.000, "category": "Street", "engineCapacity": 600 }- Retorna o status 201 caso seja possível cadastrar um veículo com sucesso!- Retorna um json com os dados cadastrados no DB: Car: { "id": "6348513f34c397abcad040b2", "model": "Marea", "year": 2002, "color": "Black", "status": true, "buyValue": 15.990, "doorsQty": 4, "seatsQty": 5 } Motorcylce: { "id": "6348513f34c397abcad040b2", "model": "Honda Cb 600f Hornet", "year": 2005, "color": "Yellow", "status": true, "buyValue": 30.000, "category": "Street", "engineCapacity": 600 }
Retorna todos os veículos cadastrados no DB:
GET /cars/GET /motorcycle/
Parâmetro | Tipo | Descrição |
---|---|---|
- | - | -- |
- Em caso de Sucesso retornará ostatus 200 com a seguinte estrutura: Cars: [{ "id": "634852326b35b59438fbea2f", "model": "Marea", "year": 2002, "color": "Black", "status": true, "buyValue": 15.99, "doorsQty": 4, "seatsQty": 5 }, { "id": "634852326b35b59438fbea31", "model": "Tempra", "year": 1995, "color": "Black", "buyValue": 39, "doorsQty": 2, "seatsQty": 5 }] Motorcycles: [{ "id": "634852326b35b59438fbea2f", "model": "Honda Cb 600f Hornet", "year": 2005, "color": "Yellow", "status": true, "buyValue": 30.000, "category": "Street", "engineCapacity": 600 }, { "id": "634852326b35b59438fbea31", "model": "Honda Cbr 1000rr", "year": 2011, "color": "Orange", "status": true, "buyValue": 59.900, "category": "Street", "engineCapacity": 1000 }]
Retorna um veículo de um Id específico:
GET /cars/${id}GET /motorcycle/${id}
Parâmetro | Tipo | Descrição |
---|---|---|
id | string | Obrigatório. O ID do veículo a ser consultado |
- Em caso de sucesso retornará o status 200 e os dados do veículo referente ao id pesquisado: Car: { "id": "634852326b35b59438fbea2f", "model": "Marea", "year": 2002, "color": "Black", "status": true, "buyValue": 15.99, "doorsQty": 4, "seatsQty": 5 } Motorcycle: { "id": "634852326b35b59438fbea31", "model": "Honda Cbr 1000rr", "year": 2011, "color": "Orange", "status": true, "buyValue": 59.900, "category": "Street", "engineCapacity": 1000 } - Retornará o status 422 e um json com a mensagem de erro, caso o id fornecido não esteja no formato correto (default gerado pelo Mongo DB) : { "message": "Invalid mongo id" }- Retornará o status 404 e um json com a mensagem de erro, caso o veículo não tenha sido cadastrado: Car: { "message": "Car not found" } Motorcycle: { "message": "Motorcycle not found" }
Atualiza um veículo com um Id específico:
PUT /cars/${id}PUT /motorcycle/${id}
Parâmetro | Tipo | Descrição |
---|---|---|
id | string | Obrigatório. O ID do veículo a ser atualizado |
body | object | Obrigatório. Propriedades e valores para atualização |
- O body da requisição deve seguir o padrão conforme exemplo abaixo: Car: { "model": "Marea", "year": 1992, "color": "Red", "status": true, **O único campo opcional** "buyValue": 12.000, "doorsQty": 2, "seatsQty": 5 } Motorcycle: { "model": "Honda Cb 600f Hornet", "year": 2014, "color": "Red", "status": true, "buyValue": 45.000, "category": "Street", "engineCapacity": 600 }- Serão feitas as mesmas validações de formato de Id e de Id cadastrado conforme descrito na documentação de retorno de Id específico;- Será retornado os daso atualizados do veículo conforme exemplo abaixo: Car: { "id": "634852326b35b59438fbea2f", "model": "Marea", "year": 1992, "color": "Red", "status": true, "buyValue": 12.000, "doorsQty": 2, "seatsQty": 5 } MOtorcycle: { "id": "634852326b35b59438fbea2f", "model": "Honda Cb 600f Hornet", "year": 2014, "color": "Red", "status": true, "buyValue": 45.000, "category": "Street", "engineCapacity": 600 }- Retornará o status 422 e um json com a mensagem de erro, caso o id fornecido não esteja no formato correto (default gerado pelo Mongo DB) : { "message": "Invalid mongo id" }- Retornará o status 404 e um json com a mensagem de erro, caso o veículo não tenha sido cadastrado: Car: { "message": "Car not found" } Motorcycle: { "message": "Motorcycle not found" }
Excluí um veículo de um Id específico:
DELETE /cars/${id}DELETE /motorcycles/${id}
Parâmetro | Tipo | Descrição |
---|---|---|
id | string | Obrigatório. O ID do veículo a ser deletado |
- Será retornar o status 204 sem o Json caso o veículo sejá excluído com sucesso.- Retornará o status 422 e um json com a mensagem de erro, caso o id fornecido não esteja no formato correto (default gerado pelo Mongo DB) : { "message": "Invalid mongo id" }- Retornará o status 404 e um json com a mensagem de erro, caso o veículo não tenha sido cadastrado: Car: { "message": "Car not found" } Motorcycle: { "message": "Motorcycle not found" }
About
Projeto realizado com o propósito de aplicar os princípios de POO(Programação Orientada a Objetos) para a construção de uma API REST com CRUD. Essa API simula o back-end de um software de gestão de uma concessionária de veículos.
Topics
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.