Este projeto foi desenvolvido durante o curso de Desenvolvimento Web Full Stack da Trybe com o objetivo de reforçar meus aprendizados de Javascript, Docker, NodeJs, Express, MySQL, Querys SQL, Teste Unitarios, Mocha e Arquitetura MSC.
A aplicação se trata de uma API para o gerenciamento de uma loja, onde é possível consultar e cadastrar produtos e vendas.
Para rodar o projeto:
git clone git@github.com:RasecMH/trybe-store-manager.git
cd trybe-store-manager
-
Localmente (Necessário Node e MySQL instalados na máquina):
npm installnpm run migrationnpm run seednpm start -
Para rodar os testes:
npm run test -
Docker (APP_PORT: 3000 | MYSQL_PORT: 3306):
docker-compose up -d --builddocker exec -it store_manager bashnpm installnpm run migrationnpm run seednpm start -
Para rodar os testes:
npm run test
GET
- Em caso de sucesso retorna com status
200um array vazio ou:[ { "id": 1, "name": "Martelo de Thor" }, { "id": 2, "name": "Traje de encolhimento" } /* ... */ ]
POST
-
Corpo da requisição
{ "name": "ProdutoX" } -
Em caso de sucesso retorna com status
201:{ "id": 4, "name": "ProdutoX" } -
Caso o campo name não exista na requisição ou esteja vazio retorna com status
400:{ "message": "\"name\" is required" } -
Caso o o valor no campo name possua menos de 5 caracteres retorna com status
400:{ "message": "\"name\" length must be at least 5 characters long" }
GET
-
Em caso de sucesso retorna com status
200:{ "id": 1, "name": "Martelo de Thor" } -
Caso o produto não seja encontrado no banco de dados retorna com status
404:{ "message": "Product not found" }
PUT
-
Corpo da requisição
{ "name": "Martelo do Batman" } -
Em caso de sucesso retorna com status
200:{ "id": 1, "name": "Martelo do Batman" } -
Caso o produto não seja encontrado no banco de dados retorna com status
404:{ "message": "Product not found" }
DELETE
-
Em caso de sucesso retorna status
204. -
Caso o produto não seja encontrado no banco de dados retorna com status
404:{ "message": "Product not found" }
GET
Pesquisa filtra pelo campo name, caso nada seja passado, retorna um array com todos os produtos.-
Em caso de sucesso retorna com status
200:// GET /products/search?q=Martelo [ { "id": 1, "name": "Martelo de Thor" } ]
// GET /products/search?q= [ { "id": 1, "name": "Martelo de Thor", }, { "id": 2, "name": "Traje de encolhimento", } /* ... */ ]
GET
- Em caso de sucesso retorna com status
200um array vazio ou:[ { "saleId": 1, "date": "2021-09-09T04:54:29.000Z", "productId": 1, "quantity": 2 }, { "saleId": 1, "date": "2021-09-09T04:54:54.000Z", "productId": 2, "quantity": 2 } /* ... */ ]
POST
-
Corpo da requisição
[ { "productId": 1, "quantity": 1 }, { "productId": 2, "quantity": 5 } ] -
Em caso de sucesso retorna com status
201:{ "id": 3, "itemsSold": [ { "productId": 1, "quantity": 1 }, { "productId": 2, "quantity": 5 } ] } -
Caso o campo productId não exista ou esteja vazio retorna com status
400:{ "message": "\"productId\" is required" } -
Caso o campo quantity não exista ou esteja vazio retorna com status
400:{ "message": "\"quantity\" is required" } -
Caso o valor no campo quantity seja menor ou igual a 0 retorna com status
422:{ "message": "\"quantity\" must be greater than or equal to 1" } -
Caso algum productId não exista no banco de dados retorna com status
404:{ "message": "Product not found" }
GET
-
Em caso de sucesso retorna com status
200:[ { "date": "2021-09-09T04:54:29.000Z", "productId": 1, "quantity": 2 }, { "date": "2021-09-09T04:54:54.000Z", "productId": 2, "quantity": 2 } /* ... */ ] -
Caso a venda não exista no banco de dados retorna com status
404:{ "message": "Sale not found" }
PUT
-
Corpo da requisição
[ { "productId": 1, "quantity": 10 }, { "productId": 2, "quantity": 50 } ] -
Em caso de sucesso retorna com status
200:"saleId": 1, "itemsUpdated": [ { "productId": 1, "quantity":10 }, { "productId": 2, "quantity":50 } ]
-
Caso a venda não exista no banco de dados retorna com status
404:{ "message": "Sale not found" }
DELETE
-
Em caso de sucesso retorna status
204. -
Caso a venda não exista no banco de dados retorna com status
404:{ "message": "Sale not found" }