API restful básica com CRUD no MySql. Fornece rotas para simular o gerenciamento de produtos, vendas, compras e estoque de uma loja.
- NodeJs
- Express
- Mocha - Chai - Sinon
- Docker
- SQL (MySql)
- Adicionar transactions para as rotas que modificam mais de uma tabela no BD
- Criar as validações de dados de entrada do usuário para as rotas: /sales e /purchases
- Criar uma rota para visualizar os produtos em estoque e o faturamento com as vendas
- Desenvolver rotas autenticadas através de JWT
- Testes de integração
-
Clone o repositório e entre na pasta do projeto
-
Crie um container do projeto:
docker-compose up -d
- Entre no bash do container:
docker exec -it store_manager_ex bash
- Instale as dependências, caso existam:
npm install
- Criar o banco de dados, gerar as tabelas e publicar as stored procedures:
npm run publish
- Limpar e popular o banco de dados:
npm run seed
- Iniciar o servidor Node com nodemon:
npm run dev
[GET] /products
- Listar todos os produtos
[GET] /products/:id
- Listar um produto específico
[POST] /products
-
Criar um produto
- Dados devem estar no corpo da requisição, no formato Json:
{ "title": "Produto", "sale_price": 99.90, "active_flag": 1 // [OPCIONAL] Aceita 1 OU 0 como valores; DEFAULT 1 }
[PUT] /products/:id
-
Atualizar um produto específico
- Deve ser enviado ao menos um atributo dentre os disponíveis na rota POST:
{ "sale_price": 89.90 }
[DELETE] /products/:id
- Deletar um produto específico
[GET] /sales
- Listar todos as vendas
[GET] /sales/:id
- Listar uma venda específica
[POST] /sales
-
Criar uma venda
- Dados devem estar no corpo da requisição, no formato Json:
{ "payment_type": "DINHEIRO", "products": [ { "product_id": 1, "quantity": 1 }, { "product_id": 2, "quantity": 2 } ] }
[GET] /purchases
- Listar todas as compras
[GET] /purchases/:id
- Listar uma compra específica
[POST] /purchases
-
Criar uma compra
- Dados devem estar no corpo da requisição, no formato Json:
{ "product_id": 1, "quantity": 2, "un_cost": 78.50 }
[PUT] /purchases/:id
-
Atualizar uma compra específica
- Deve ser enviado ao menos um atributo dentre os disponíveis na rota POST:
{ "quantity": 5 }