Giter Site home page Giter Site logo

joussemarborges / car_shop_joussemar Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 205 KB

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.

Dockerfile 0.42% JavaScript 1.88% TypeScript 97.70%
docker docker-compose dockerfile expressjs mongodb mongoose nodejs poo typescript git

car_shop_joussemar's Introduction

Projeto Car Shop

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.

Orientações

🐳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

Documentação da API

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

Tecnologias utilizadas:

TypeScript NodeJS Mocha Git MongoDB Docker Express.js

car_shop_joussemar's People

Contributors

joussemarborges avatar trybe-tech-ops avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.