chore: Atualiza Readme

This commit is contained in:
Michel Pereira 2021-11-18 03:58:39 -03:00
parent 47ed10338e
commit 8289229d3e
2 changed files with 47 additions and 34 deletions

View file

@ -1,13 +1,13 @@
# Boas vindas ao repositório do Store Manager!
# Boas vindas ao repositório do Store Manager
Esse projeto é uma API de um sistema de gerenciamento de vendas, onde será possível criar, visualizar, deletar e atualizar os produtos e as vendas.
Esse projeto é uma API de um sistema de gerenciamento de vendas, onde será possível criar, visualizar, deletar e atualizar os produtos e as vendas. Ou seja, um CRUD.
---
# <span id="sumario">Sumário</span>
- [Habilidades](#habilidades)
- <a href="#modelos-e-padroes">Modelos e padrões usados</a>
- <a href="#arquitetura-e-padroes">Arquitetura e padrões</a>
- <a href="#shape-retornos">ENDPOINTS: Shape dos retornos das requisições</a>
- [Banco de dados: Shape dos Documentos (registros)](#banco-de-dados-shape-dos-documentos-registros)
- [Linter](#linter)
@ -23,24 +23,24 @@ Esse projeto é uma API de um sistema de gerenciamento de vendas, onde será pos
- [6 - Endpoint para listar as vendas](#6---endpoint-para-listar-as-vendas)
- [7 - Endpoint para atualizar uma venda](#7---endpoint-para-atualizar-uma-venda)
- [8 - Endpoint para deletar uma venda](#8---endpoint-para-deletar-uma-venda)
- [9 - Atualize a quantidade de produtos](#9---atualize-a-quantidade-de-produtos)
- [10 - Valide a quantidade de produtos](#10---valide-a-quantidade-de-produtos)
- <a href="#atualiza-qtd-produtos">9 - Atualização da quantidade de produtos</a>
- <a href="#valida-qtd-produtos">10 - Validação da quantidade de produtos </a>
# Habilidades
Esse projeto teve como objetivo praticar as seguintes hardskills:
- Estruturar uma aplicação em camadas (Arquitetura MSC);
- Delegar responsabilidades específicas para cada parte do app;
- Melhorar manutenibilidade e reusabilidade do código;
- Aplicar os padrões REST;
- Escrever assinaturas para APIs intuitivas e facilmente entendíveis.
- Estruturação de uma aplicação em camadas (Arquitetura MSC);
- Delegação de responsabilidades específicas para cada parte do app;
- Melhora da manutenibilidade e reusabilidade do código;
- Aplicação dos padrões REST;
- Implementação de uma API intuitiva e facilmente entendível.
---
# <span id="modelos-e-padroes">Modelos e Padrões usados</span>
# <span id="arquitetura-e-padroes">Arquitetura e Padrões</span>
* API RESTfull para CRUD em Banco de dados
* Arquitetura MSC
* API RESTfull.
# <span id="tecnologias-usadas">Tecnologias usadas</span>
@ -54,29 +54,46 @@ Esse projeto teve como objetivo praticar as seguintes hardskills:
* Aplicação na plataforma PaaS do Heroku para que possa ser testada como uma API pública.
* Banco de Dados na nuvem do [MongoDB Atlas](https://www.mongodb.com/atlas) para que possa ser utilizado via Heroku.
### Requisitos para configurar e rodar o projeto em modo desenvolvimento:
1. **Node.js**
2. Ter a **porta 3000** disponível, ou configurar outra.
3. Ter um algum cliente (ex.: Postman, Insomnia e etc) se quiser testar diretamente as requisições à API.
### Como configurar as dependências do projeto:
Um vez que no arquivo `package.json` é listado as dependências necessárias, basta digitar o seguinte comando, estando na pasta do repositório clonado:
`npm install`
### Como executar o projeto:
1. Estando dentro pasta do projeto, basta executar o comando: `npm start`.
2. Em seguida, abra o navegador e digite: **http://localhost:3000** (porta 3000 está como padrão alternativo a porta da variável de ambiente).
# <span id="shape-retornos">ENDPOINTS: Shape dos retornos das requisições</span>
<a href="#sumario">Sumário</a>
- Caso o recurso não seja encontrado, sua API retorne o status HTTP adequado com o body `{ message: '<recurso> não encontrado' }`.
- Em caso de erro, sua API retorne o status HTTP adequado com o body `{ err: { message: <mensagem de erro>, code: <código do erro> } }`.
- O código do erro deve ser determinado por você e deve seguir o mesmo padrão para toda a aplicação. Por exemplo: `'not_found'`, `'invalid_data'` e afins.
- Em caso de dados inválidos, sua API retorne o status HTTP adequado, com o body `{ err: { message: 'Dados inválidos', code: <código do erro> } }`.
- Todos os retornos de erro devem seguir o mesmo formato. Para erros que requerem dados adicionais (por exemplo, para informar quais campos estão incorretos) utilize a propriedade `data` dentro do objeto `err`.
- Caso o recurso não seja encontrado, a API deve retornar o status HTTP adequado com o body `{ message: '<recurso> não encontrado' }`.
- Em caso de erro, a API deve retornar o status HTTP adequado com o body `{ err: { message: <mensagem de erro>, code: <código do erro> } }`.
- O código de erro implementado deve deve seguir o mesmo padrão para toda a aplicação. Por exemplo: `'not_found'`, `'invalid_data'` e afins.
- Em caso de dados inválidos, a API deve retornar o status HTTP adequado, com o body `{ err: { message: 'Dados inválidos', code: <código do erro> } }`.
- Todos os retornos de erro devem seguir o mesmo formato. Para erros que requerem dados adicionais (por exemplo, para informar quais campos estão incorretos) é utilizado a propriedade `data` dentro do objeto `err`.
# Banco de dados: Shape dos Documentos (Registros)
<a href="#sumario">Sumário</a>
O banco terá duas tabelas: produtos e vendas
O banco deve duas `collections` para: uma para os produtos e outra para as vendas
A tabela de produtos deverá ter o seguinte nome: `products`
A tabela terá o seguinte nome: `products`
Os campos da tabela `products` terão esse formato:
Os campos da collection `products` terão esse formato:
```json
{ "name": "Produto Silva", "quantity": 10 }
```
A resposta do insert que deve retornar após a criação tem o seguinte shape:
A resposta retornada após um `insert` (criação) no banco precisa ter o seguinte shape:
```json
{ "_id": ObjectId("5f43cbf4c45ff5104986e81d"), "name": "Produto Silva", "quantity": 10 }
@ -84,7 +101,7 @@ A resposta do insert que deve retornar após a criação tem o seguinte shape:
(O \_id é gerado automaticamente)
A tabela de vendas deverá ter o seguinte nome: `sales`
A tabela de vendas terá o seguinte nome: `sales`
Os campos da tabela `sales` terão esse formato:
@ -92,7 +109,7 @@ Os campos da tabela `sales` terão esse formato:
{ "itensSold": [{ "productId": "5f43cbf4c45ff5104986e81d", "quantity": 2 }] }
```
A resposta do insert que deve retornar após a criação é parecida essa:
A resposta retornada após um `insert` (criação) no banco precisa ter o seguinte shape:
```json
{
@ -155,11 +172,6 @@ O retorno da API de um produto cadastrado com sucesso deverá ser:
}
```
#### Requisição de Cadastro de Produtos:
O projeto deve rodar na porta `http://localhost:3000`
#### Validações:
- `name` deve ser uma _string_ com mais de 5 caracteres e deve ser único;
@ -283,17 +295,17 @@ O retorno de uma venda cadastrada com sucesso deverá ser:
- Apenas a venda com o `id` presente na URL deve ser deletado;
### 9 - Atualize a quantidade de produtos
### <span id="atualiza-qtd-produtos"> 9 - Atualização da quantidade de produtos</span>
<a href="#sumario">Sumário</a>
- Ao realizar uma venda, atualizá-la ou deletá-la, você deve também atualizar a quantidade do produto em questão presente na `collection` responsável pelos produtos;
- Ao realizar uma venda, atualizá-la ou deletá-la, deve-se, também, atualizar a quantidade do produto em questão presente na `collection` responsável pelos produtos;
- Por exemplo: suponha que haja um produto chamado _Bola de Futebol_ e a sua propriedade `quantity` tenha o valor _10_. Caso seja feita uma venda com _8_ unidades desse produto, a quantidade do produto deve ser atualizada para _2_ , pois 10 - 8 = 2;
### 10 - Valide a quantidade de produtos
### <span id="valida-qtd-produtos">10 - Validação da quantidade de produtos</span>
<a href="#sumario">Sumário</a>
- Um produto nunca deve ter a quantidade em estoque menor que 0;
- Quando uma venda for realizada, garanta que a quantidade sendo vendida está disponível no estoque
- Quando uma venda for realizada, precisa ser garantido que a quantidade sendo vendida está disponível no estoque.

View file

@ -4,6 +4,7 @@ const sales = require('./controllers/sales');
const errorMiddleware = require('./utils/errorMiddleware');
const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.json());
@ -14,6 +15,6 @@ app.all('*', (req, res) => res.status(404).send('Router not found'));
app.use(errorMiddleware);
app.listen(process.env.PORT, () => {
console.log('Online');
app.listen(PORT, () => {
console.log(`Online na porta ${PORT}`);
});