Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tonyycruz/car-shop
Neste projeto, foi desenvolvida uma API para gerenciar uma concessionária de veículos utilizando typeScript e POO em uma arquitetura MSC (Model, Service, Controller) além de testes unitários.
https://github.com/tonyycruz/car-shop
chai clean-code express mocha mongodb mongoose nodejs nodemon poo typescript zod
Last synced: 4 days ago
JSON representation
Neste projeto, foi desenvolvida uma API para gerenciar uma concessionária de veículos utilizando typeScript e POO em uma arquitetura MSC (Model, Service, Controller) além de testes unitários.
- Host: GitHub
- URL: https://github.com/tonyycruz/car-shop
- Owner: TonyyCruz
- Created: 2022-10-26T00:56:20.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-01-17T23:58:12.000Z (13 days ago)
- Last Synced: 2025-01-18T00:27:03.405Z (13 days ago)
- Topics: chai, clean-code, express, mocha, mongodb, mongoose, nodejs, nodemon, poo, typescript, zod
- Language: TypeScript
- Homepage:
- Size: 208 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Projeto Car Shop
Neste projeto, foi desenvolvida uma API para gerenciar uma concessionária de veículos utilizando typeScript e POO em uma arquitetura MSC (Model, Service, Controller) além de testes unitários.
📃 Sobre o Projeto
Foi desenvolvida uma aplicação em Node.js com typeScript usando o ODM (Object Data Modeling) mongoose para fazer um CRUD (create, read, update, delete) de veículos em um banco de dados MongoDb respeitando os princípios do REST.
Para segurança da aplicação, foram feitos testes unitários nas camadas Controller, Service e Models utilizando Mocha e Chai.
Rotas utilizáveis
Ver rotas
- POST `/cars` para cadastrar novo carro. Utilize um body nesse formato:```jsx
{
"model": "Batmobile",
"year": 2021,
"color": "black",
"buyValue": 36500000,
"seatsQty": 2,
"doorsQty": 2
}
```
---
- POST `/motorcycles` para cadastrar uma nova moto. Utilize um body nesse formato:```jsx
{
"model": "batcycle",
"year": 2016,
"color": "black",
"buyValue": 12000000,
"category": "Custom",
"engineCapacity": 2500
}
```---
- GET `/cars` traz todos os carros cadastrados.
---
- GET `/cars/:id` traz o carro correspondente ao id enviado se ele existir no banco de dados.
---
- GET `/motorcycles` todas as motos cadastradas.
---
- GET `/motorcycles/:id` traz a moto correspondente ao id enviado se ele existir no banco de dados.---
- PUT `/cars/:id` para atualizar o carro com o id informado. Utilize um body nesse formato:
```jsx
{
"_id": "4edd40c86762e0fb12000003",
"model": "the Mean Machine",
"year": 1968,
"color": "purple",
"buyValue": 15000,
"seatsQty": 2,
"doorsQty": 2
}
```---
- PUT `/motorcycles/:id` para atualizar o carro com o id informado. Utilize um body nesse formato:```jsx
{
"_id": "4edd40c86762e0fb12000003",
"model": "Hell Cycle",
"year": 2007,
"color": "silver",
"buyValue": 6500000,
"category": "Custom",
"engineCapacity": 1000
}
```---
- DELETE `/cars/:id` deleta o carro com o id correspondente ao enviado caso exista.
---
- DELETE `/motorcycles/:id` deleta a moto com o id correspondente ao enviado caso exista.
---
### 🛠 Tecnologias e Bibliotecas utilizadas no desenvolvimento do projeto
- **[Node.js](https://nodejs.org/en/)**
- **[MongoDb](https://www.mongodb.com/)**
- **[mongoose](https://www.mongodb.com/tools/mongoose)**
- **[Express](http://expressjs.com/pt-br/)**
- **[Nodemon](https://www.npmjs.com/package/nodemon)**
- **[Zod](https://github.com/colinhacks/zod)**- **[POO](https://www.javatpoint.com/pt/conceitos-de-poo-em-java)**
- **[TypeScript](https://www.typescriptlang.org/)**
- **[Mocha](https://mochajs.org/)**
- **[Chai](https://www.chaijs.com/)**
---
### 🚀 Como executar o projeto
_Pré-requisitos_
Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:
- [Git](https://git-scm.com)
- [Node.js](https://nodejs.org/en/)
- [Mysql](https://www.mongodb.com/docs/manual/installation/) para rodar local ou [Docker](https://docs.docker.com/get-docker/) para rodar em container.É recomendado utilizar algum cliente HTTP, como [Postman](https://www.postman.com/) ou o [Insomnia](https://insomnia.rest/download).
Também é bom ter um editor para trabalhar com o código como [VSCode](https://code.visualstudio.com/).
---
_Clone o repositorio_
```jsx
git clone [email protected]:TonyyCruz/car-shop.git
```---
:whale: Rodando no Docker
## Com Docker
_Rode o serviço na raiz do projeto o comando_```jsx
docker-compose up -d
```- Lembre-se de parar o `mongo` se estiver usando localmente na porta padrão `(27017)`, ou adapte, caso queria fazer uso da aplicação em containers.
- Esse serviço irá inicializar dois containers chamados car_shop e outro chamado car_shop_db.
- O back-end ficará acessível em `http://localhost:3001`
- O front-end ficará acessível em `http://localhost:3000`
- A partir daqui você pode rodar o container via CLI ou abri-lo no VS Code.
_Via CLI use o comando_
```jsx
docker exec -it car_shop bash
```
- Ele te dará acesso ao terminal interativo do container car_shop criado pelo compose, que está rodando em segundo plano._Instale as dependências `dentro do container` com_
```jsx
npm install
```⚠️Atenção: Caso opte por utilizar o Docker, TODOS os scripts disponíveis no package.json devem ser executados DENTRO do container, ou seja, no terminal que aparece após a execução do comando docker exec.
---
:computer: Rodando Localmente
_Instale as dependências com o comando_
```jsx
npm install
```
- Para rodar o projeto desta forma, **obrigatoriamente** você deve ter o `node` instalado em seu computador.
- Recomenda-se a versão `^16`
⚠️Atenção: Não esqueça de renomear/configurar o arquivo .env.example---
### 💡 Scripts prontos
Scripts
- Iniciar o servidor:
```sh
npm run dev
```- Iniciar rodar os testes:
```sh
npm run test:dev
```
- Verificar cobertura dos testes:
```sh
npm run test:coverage
```
---