Store Manager é uma aplicação desenvolvida para gerenciar o estoque de produtos e vendas realizar, sendo realizado apenas o backend da aplicação
Features- Cadastro de vendas e produtos
- Atualizar e deletar vendas e produtos
- sistema de controle de produtos automatizado
## 🛠 Tecnologias
As seguintes ferramentas foram utilizadas na construção do projeto:
Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas: Git e Node.js. É necessário ter instalado e configurado o Mysql. Para uma melhor visualização do banco de dados indico a utilização MysqlWorkBench e possuir um editor de código, sugiro o VSCode. Para fazer as requisições nos endpoints recomendo o Postman.
Para criar o banco de dados, copie todo o conteúdo do arquivo StoreManager.sql e cole no workbench. Rode todas as query, assim o banco estará online localmente. Para utilizar o banco de dados na aplicação. Renomeio o arquivo .env.example para .env e troque as informações para as que foram criadas quando o MySQL foi configurado. O PORT deve permanecer 3000.
# Clone este repositório
# Foi utilizado SSH
$ git clone git@github.com:MarcoMecenasFilho/storemanager
# Acesse a pasta do projeto no seu terminal/cmd
$ cd storemanager
# Instale as dependências
$ npm install
# Execute a aplicação em modo de desenvolvimento
$ npm run debug
# Para rodar os testes
$ npm run test:mocha
Requisições para a API devem seguir os padrões:
Método | Descrição |
---|---|
GET |
Retorna informações de um ou mais produtos/vendas. |
POST |
Utilizado para criar um novo produto/venda. |
PUT |
Atualiza dados de um produto/venda ou altera sua situação. |
DELETE |
Remove um produto/venda do sistema. |
Código | Descrição |
---|---|
200 |
Requisição executada com sucesso (success). |
201 |
Criado com sucesso com sucesso. |
204 |
Sem conteúdo. |
400 |
Erros de validação ou os campos informados não existem no sistema. |
404 |
Registro pesquisado não encontrado (Not found). |
422 |
Dados informados estão fora do escopo definido para o campo. |
Listar todos os produtos salvos no banco de dados /products
-
Response 200 (application/json)
[ { "id": 1, "name": "Martelo de Thor", "quantity": 10 }, { "id": 2, "name": "Traje de encolhimento", "quantity": 20 }, { "id": 3, "name": "Escudo do Capitão América", "quantity": 30 } ]
Listar produto por um id específico /products/1
-
Response 200 (application/json)
{ "id": 1, "name": "Martelo de Thor", "quantity": 10 }
-
Response 404 (application/json)
{ "message": "Product not found" }
-
Request (application/json)
-
body
{ "name": "blusa azul", "quantity": 300 }
-
-
Response 201 (application/json)
{ "id": 4, "name": "blusa azul", "quantity": 300 }
Quando "name" não é passado.
-
Request (application/json)
-
body
{ "quantity": 300 }
-
-
Response 400 (application/json)
{ "message": "\"name\" is required" }
Quando "name" não é uma string.
-
Request (application/json)
-
body
{ "name": 200, "quantity": 300 }
-
-
Response 422 (application/json)
{ "message": "\"name\" must be a string" }
Quando "name" possui menos de 5 caracteres.
-
Request (application/json)
-
body
{ "name": "cas", "quantity": 300 }
-
-
Response 422 (application/json)
{ "message": "\"name\" length must be at least 5 characters long" }
Quando "quantity" não é passado.
-
Request (application/json)
-
body
{ "name": "camisa azul" }
-
-
Response 400 (application/json)
{ "message": "\"quantity\" is required" }
Quando "quantity" não é um number.
-
Request (application/json)
-
body
{ "name": "camisa azul", "quantity": "300" }
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must be a number" }
Quando "quantity" não é um numero inteiro.
-
Request (application/json)
-
body
{ "name": "camisa azul", "quantity": 3.22 }
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must an integer" }
Quando "quantity" não é um numero positivo.
-
Request (application/json)
-
body
{ "name": "camisa azul", "quantity": -2 }
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must be greater than or equal to 1" }
Passamos o id do produto que queremos atualizar /products/4
-
Request (application/json)
-
body
{ "name": "blusa verde", "quantity": 300 }
-
-
Response 200 (application/json)
{ "id": 4, "name": "blusa verde", "quantity": 300 }
Passamos o id de um produto que não existe /products/89
-
Request (application/json)
-
body
{ "name": "blusa verde", "quantity": 300 }
-
-
Response 404 (application/json)
{ "message": "Product not found" }
Quando "name" não é passado.
-
Request (application/json)
-
body
{ "quantity": 300 }
-
-
Response 400 (application/json)
{ "message": "\"name\" is required" }
Quando "name" não é uma string.
-
Request (application/json)
-
body
{ "name": 200, "quantity": 300 }
-
-
Response 422 (application/json)
{ "message": "\"name\" must be a string" }
Quando "name" possui menos de 5 caracteres.
-
Request (application/json)
-
body
{ "name": "cas", "quantity": 300 }
-
-
Response 422 (application/json)
{ "message": "\"name\" length must be at least 5 characters long" }
Quando "quantity" não é passado.
-
Request (application/json)
-
body
{ "name": "camisa azul" }
-
-
Response 400 (application/json)
{ "message": "\"quantity\" is required" }
Quando "quantity" não é um number.
-
Request (application/json)
-
body
{ "name": "camisa azul", "quantity": "300" }
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must be a number" }
Quando "quantity" não é um numero inteiro.
-
Request (application/json)
-
body
{ "name": "camisa azul", "quantity": 3.22 }
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must an integer" }
Quando "quantity" não é um numero positivo.
-
Request (application/json)
-
body
{ "name": "camisa azul", "quantity": -2 }
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must be greater than or equal to 1" }
Para deletar um produto passamos o id desejado /products/4
- Response 204
Id de um produto que não existe /products/89
-
Response 404 (application/json)
{ "message": "Product not found" }
Listar todos as vendas salvos no banco de dados /sales
-
Response 200 (application/json)
[ { "saleId": 1, "date": "2022-03-02T18:45:07.000Z", "productId": 1, "quantity": 5 }, { "saleId": 1, "date": "2022-03-02T18:45:07.000Z", "productId": 2, "quantity": 10 }, { "saleId": 2, "date": "2022-03-02T18:45:07.000Z", "productId": 3, "quantity": 15 } ]
Listar venda por um id específico /sales/2
-
Response 200 (application/json)
[ { "date": "2022-03-02T18:45:07.000Z", "productId": 2, "quantity": 15 } ]
-
Response 404 (application/json)
[ { "message": "Product not found" } ]
-
Request (application/json)
-
body
[ { "productId": 1, "quantity": 2 }, { "productId": 2, "quantity": 5 } ]
-
-
Response 201 (application/json)
{ "id": 3, "itemsSold": [ { "productId": 1, "quantity": 2 }, { "productId": 2, "quantity": 5 } ] }
Quando a quantidade do produto não existe no banco de dados.
-
Request (application/json)
-
body
[ { "productId": 1, "quantity": 200 }, { "productId": 2, "quantity": 1 } { "productId": 3, "quantity": 100 } ]
-
-
Response 422 (application/json)
{ "message": "Such amount is not permitted to sell. ProductId: 1, 3" }
Quando o id do produto não existe no banco de dados.
-
Request (application/json)
-
body
[ { "productId": 1, "quantity": 2 }, { "productId": 67, "quantity": 1 }, { "productId": 99, "quantity": 1 } ]
-
-
Response 404 (application/json)
{ "message": "Product not found. ProductId: 67, 99" }
Quando "quantity" não é passado.
-
Request (application/json)
-
body
[ { "productId: 1 } ]
-
-
Response 400 (application/json)
{ "message": "\"quantity\" is required" }
Quando "quantity" não é um number.
-
Request (application/json)
-
body
[ { "productId: 1, "quantity": "300" } ]
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must be a number" }
Quando "quantity" não é um numero inteiro.
-
Request (application/json)
-
body
[ { "productId: 1, "quantity": 3.22 } ]
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must an integer" }
Quando "quantity" não é um numero positivo.
-
Request (application/json)
-
body
[ { "productId: 1, "quantity": -2 } ]
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must be greater than or equal to 1" }
Quando "productId" não é passado.
-
Request (application/json)
-
body
[ { "quantity": 1 } ]
-
-
Response 400 (application/json)
{ "message": "\"productId\" is required" }
Quando "productId" não é um number.
-
Request (application/json)
-
body
[ { "productId": "3" "quantity": 1, } ]
-
-
Response 422 (application/json)
{ "message": "\"productId\" must be a number" }
Quando "productId" não é um numero inteiro.
-
Request (application/json)
-
body
[ { "productId": 3.22 "quantity: 1, } ]
-
-
Response 422 (application/json)
{ "message": "\"productId\" must an integer" }
Quando "productId" não é um numero positivo.
-
Request (application/json)
-
body
[ { "productId": -2, "quantity: 1 } ]
-
-
Response 422 (application/json)
{ "message": "\"productId\" must be greater than or equal to 1" }
-
Request (application/json)
-
body
[ { "productId": 1, "quantity": 1 } ]
-
-
Response 200 (application/json)
{ "saleId": 1, "itemUpdate": [ { "productId": 1, "quantity": 1 } ] }
Quando a quantidade do produto não existe no banco de dados.
-
Request (application/json)
-
body
[ { "productId": 1, "quantity": 200 } ]
-
-
Response 422 (application/json)
{ "message": "Such amount is not permitted to sell" }
Quando o id do produto não existe no banco de dados.
-
Request (application/json)
-
body
[ { "productId": 89, "quantity": 2 } ]
-
-
Response 404 (application/json)
{ "message": "Product not found" }
Quando "quantity" não é passado.
-
Request (application/json)
-
body
[ { "productId: 1 } ]
-
-
Response 400 (application/json)
{ "message": "\"quantity\" is required" }
Quando "quantity" não é um number.
-
Request (application/json)
-
body
[ { "productId: 1, "quantity": "300" } ]
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must be a number" }
Quando "quantity" não é um numero inteiro.
-
Request (application/json)
-
body
[ { "productId: 1, "quantity": 3.22 } ]
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must an integer" }
Quando "quantity" não é um numero positivo.
-
Request (application/json)
-
body
[ { "productId: 1, "quantity": -2 } ]
-
-
Response 422 (application/json)
{ "message": "\"quantity\" must be greater than or equal to 1" }
Quando "productId" não é passado.
-
Request (application/json)
-
body
[ { "quantity": 1 } ]
-
-
Response 400 (application/json)
{ "message": "\"productId\" is required" }
Quando "productId" não é um number.
-
Request (application/json)
-
body
[ { "productId": "3" "quantity": 1, } ]
-
-
Response 422 (application/json)
{ "message": "\"productId\" must be a number" }
Quando "productId" não é um numero inteiro.
-
Request (application/json)
-
body
[ { "productId": 3.22 "quantity: 1, } ]
-
-
Response 422 (application/json)
{ "message": "\"productId\" must an integer" }
Quando "productId" não é um numero positivo.
-
Request (application/json)
-
body
[ { "productId": -2, "quantity: 1 } ]
-
-
Response 422 (application/json)
{ "message": "\"productId\" must be greater than or equal to 1" }
Para deletar um produto passamos o id desejado /products/4
- Response 204
Id de um produto que não existe /products/89
-
Response 404 (application/json)
{ "message": "Product not found" }
- Este projeto foi feito com muita dedicação e carinho por Marco Mecenas Entre em contato!.