Store Manager é um projeto focado em arquitetar e desenvolver uma API de gerenciamento de vendas com um banco de dados MySQL, utilizando a arquitetura em camadas(MSC/Model, Service, Controller).
OBS: ESSE PROJETO FOI DESENVOLVIDO NA TRYBE.
- JavaScript;
- Node.js;
- Express.js;
- Sequelize.js;
- Docker;
- MySQL;
- DotEnv;
- Jest;
- Mock;
- Sinon;
- Chai;
- Chai-http.
Endpoint GET /products
Utilizado para retornar as informações de todos os produtos que contém no banco de dados.


Endpoint GET /products/:id
Utilizado para retornar as informações do produto com o id correspondente que contém no banco de dados.


Existe apenas uma mensagem de erro que seria quando o id não corresponde a nenhum produto.
{
"message": "Product not found"
}
Endpoint POST /products
Utilizado para criar e adicionar um novo produto no banco de dados. O banco de dados exige que o usuário insira somente um nome com, no mínimo, 5 caracters.
- name: É o nome do produto. Deve ser enviado como string e o mínimo de caracters é 5. É obrigatório.


Existem dois cenários onde a saída acima pode não ser retornada: caso não seja enviado um nome e caso o nome não tenha, pelo menos, 5 caracters.
{
"message": "\"name\" is required"
}
{
"message": "\"name\" length must be at least 5 characters long"
}
Endpoint PUT /products/:id
Utilizado para atualizar o nome do produto com o id correspondente. Para isso, é necessário que o usuário insira somente um nome com, no mínimo, 5 caracters.
- name: É o nome do produto. Deve ser enviado como string e o mínimo de caracters é 5. É obrigatório.


Existem dois cenários onde a saída acima pode não ser retornada: caso não seja enviado um nome e caso o nome não tenha, pelo menos, 5 caracters.
{
"message": "\"name\" is required"
}
{
"message": "\"name\" length must be at least 5 characters long"
}
Endpoint DELETE /products/:id
Utilizado para deletar o produto com o id correspondente.


Existe apenas uma mensagem de erro que seria quando o id não corresponde a nenhum produto.
{
"message": "Product not found"
}
Endpoint GET /sales/:id
Utilizado para retornar as informações da compra com o id correspondente que contém no banco de dados.


Existe apenas uma mensagem de erro que seria quando o id não corresponde a nenhuma compra.
{
"message": "Sale not found"
}
Endpoint POST /sales
Utilizado para criar uma nova compra. Para isso, necessita de array que contém objetos com um id do produto e a quantidade do produto.
- productId: É o id do produto e deve ser enviado como int. É obrigatório.
- quantity: É a quantidade do produto. Deve ser enviado como int e o número deve ser acima de 0. É obrigatório.


Existem dois cenários onde a saída acima pode não ser retornada: caso não preencha os requisitos necessários(explicados nas Informações Necessárias acima) e caso falte alguma das informações obrigatórias. Cada um deles terá uma mensagem diferente avisando o motivo de estar incorreta.
{
"message": "\"productId\" is required"
}
{
"message": "\"quantity\" must be greater than or equal to 1"
}
Endpoint DELETE /sales/:id
Utilizado para deletar as informações da compra com o id correspondente que contém no banco de dados.


Existe apenas uma mensagem de erro que seria quando o id não corresponde a nenhuma compra.
{
"message": "Sale not found"
}
Para criar os containers, execute: docker-compose up -d
Para abrir o terminar do container, execute: docker exec -it blogs_api bash
npm install
Para criar o banco de dados, execute: npm run migration
Para popular o banco de dados: npm run seed
Para executar a aplicação e acessar as rotas, execute: npm run debug
Para rodar todos os testes:
npm test
OBS: Os testes irão rodar com os testes de cobertura