API RESTful desenvolvida com express e mysql2 no módulo de Backend da Trybe.
Utilizando uma arquitetura em camadas (Model, Service e Controller) a aplicação realiza cadastro, consulta e edição de produtos e vendas. Abaixo um pequeno resumo de cada rota e endpoint desenvolvido nesse repositório
🐳 Rodando a aplicação com Docker
Clone o projeto, entre na raiz da aplicação e execute o comando
docker-compose up -d
e a aplicação estará ouvindo na porta local 3001 no container backend
, e o banco de dados MySQL estará exposto na porta 3306.
O seu docker-compose precisa estar na versão 1.29 ou superior.
GET /products
Esse endpoint é responsável por retornar a lista de produtos cadastrados no serviço store_manager_db
- cURL
curl --request GET \ --url 'http://localhost:3001/products'
- RESPONSE:
[ { "id": 1, "name": "Martelo de Thor" }, { "id": 2, "name": "Traje de encolhimento" }, { "id": 3, "name": "Escudo do Capitão América" }, ]
GET /products/search
Esse endpoint é responsável por retornar uma lista de produtos que incluam o termo de pesquisa passado como parâmetro "q" da requisição cadastrados no serviço store_manager_db
-
cURL
curl --request GET \ --url 'http://localhost:3001/products/search?q=Traje'
-
RESPONSE
-
Caso tenha algum match do termo com o campo
name
[ { "id": 2, "name": "Traje de encolhimento" } ]
-
Caso não tenha algum match do termo com o campo
name
[]
-
GET /products/search/:id
Esse endpoint é responsável por realizar uma pesquisa pelo id do produto no serviço store_manager_db
-
cURL
curl --request GET \ --url 'http://localhost:3001/products/1'
-
RESPONSE
{ "id": 1, "name": "Martelo de Thor" }
-
ERRORS
{ "message": "Product not found" }
POST /products
Esse endpoint é responsável por cadastrar um produto no store_manager_db
-
O Corpo da requisição deve conter a propriedade
name
com pelo menos 5 caracteres.{ "name": "Rounded Shield" }
-
cURL
curl --request POST \ --url http://localhost:3001/products \ --header 'Content-Type: application/json' \ --data '{ "name": "Rounded Shield" }'
-
RESPONSE
{ "id": 4, "name": "Rounded Shield" }
-
ERRORS
- Caso a propriedade
name
não esteja presente no corpo da requisição
{ "message": "\"name\" is required" }
- Caso
name
não possua pelo menos 5 caracteres
{ "message": "\"name\" length must be at least 5 characters long" }
- Caso a propriedade
PUT /products/:id
Esse endpoint é responsável por editar um produto já cadastrado no store_manager_db
-
O Corpo da requisição deve conter a propriedade
name
com pelo menos 5 caracteres.{ "name": "Square Shield" }
-
cURL
curl --request PUT \ --url http://localhost:3001/products/3 \ --header 'Content-Type: application/json' \ --data '{ "name": "Square Shield" }'
-
RESPONSE
{ "id": 3, "name": "Square Shield" }
-
ERRORS
- Caso a propriedade
name
não esteja presente na requisição
{ "message": "\"name\" is required" }
- Caso
name
não possua pelo menos 5 caracteres
{ "message": "\"name\" length must be at least 5 characters long" }
- Caso o id do produto não seja encontrado no store_manager_db
{ "message": "Product not found" }
- Caso a propriedade
DELETE /products/:id
Esse endpoint é responsável por deletar um produto já cadastrado no store_manager_db
-
Este endpoint não retorna uma resposta, porém indica que a operação foi bem sucedida com status 204
-
cURL
curl --request DELETE \
--url 'http://localhost:3001/products/3'
-
ERRORS
- Caso o id do produto não seja encontrado no store_manager_db
{ "message": "Product not found" }
GET /sales
Esse endpoint é responsável por retornar a lista de pedidos cadastrados no serviço store_manager_db
-
cURL
curl --request GET \ --url 'http://localhost:3001/sales'
-
RESPONSE
[ { "saleId": 1, "productId": 1, "quantity": 5, "date": "2023-07-26T18:17:27.000Z" }, { "saleId": 1, "productId": 2, "quantity": 10, "date": "2023-07-26T18:17:27.000Z" } ]
GET /sales/:id
Esse endpoint é responsável por buscar um pedido por id no serviço store_manager_db
-
cURL
curl --request GET \ --url 'http://localhost:3001/sales/1'
-
RESPONSE
[ { "productId": 1, "quantity": 5, "date": "2023-07-26T18:17:27.000Z" }, { "productId": 2, "quantity": 10, "date": "2023-07-26T18:17:27.000Z" } ]
POST sales/
Esse endpoint é responsável por cadastrar um pedido por id no serviço store_manager_db, registrando a relação de produto e quantidade com o id do pedido
-
Exemplo do corpo da requisição
[ { "productId": 1, "quantity": 1 }, { "productId": 2, "quantity": 5 } ]
-
cURL
curl --request POST \ --url http://localhost:3001/sales \ --header 'Content-Type: application/json' \ --data '[ { "productId": 1, "quantity": 1 }, { "productId": 2, "quantity": 5 } ]'
-
RESPONSE
{ "id": 3, "itemsSold": [ { "productId": 1, "quantity": 1 }, { "productId": 2, "quantity": 5 } ] }
-
ERRORS
- Caso algum produto não possua a chave obrigatória como
productId
, ouquantity
{"message": "\"quantity\" is required"}
{"message": "\"productId\" is required"}
- Caso algum
productId
não esteja registrado no store_manager_db
{"message": "Product not found"}
- Caso
quantity
seja um número igual ou menor a zero
{"message": "\"quantity\" must be greater than or equal to 1"}
- Caso algum produto não possua a chave obrigatória como
PUT sales/:saleId/products/:productId/quantity
Esse endpoint é responsável por alterar a quantidade de um produto em um pedido já registrado
-
Exemplo do corpo da requisição
{ "quantity": 20 }
-
cURL
curl --request PUT \ --url http://localhost:3001/sales/1/products/1/quantity \ --header 'Content-Type: application/json' \ --data '{ "quantity": 20 }'
-
RESPONSE
{ "productId": 1, "quantity": 2, "date": "2023-07-26T18:17:27.000Z", "saleId": 1 }
-
ERRORS
- Caso algum produto não possua a chave obrigatória
quantity
{"message": "\"quantity\" is required"}
- Caso
quantity
seja um número igual ou menor a zero
{"message": "\"quantity\" must be greater than or equal to 1"}
- Caso algum
productId
não esteja registrado no store_manager_db
{"message": "Product not found"}
- Caso algum produto não possua a chave obrigatória
DELETE /sales/:id
Esse endpoint é responsável por deletar um pedido já cadastrado no store_manager_db
-
RESPONSE: Este endpoint não retorna uma resposta, porém indica que a operação foi bem sucedida com status 204
-
cURL
curl --request DELETE \
--url 'http://localhost:3001/sales/7'
-
ERRORS
- Caso o id do pedido não seja encontrado no store_manager_db
{ "message": "Product not found" }
Importante! Os arquivos de minha autoria estão nos diretórios ./backend/src
e ./backend/tests
outros arquivos, como os responsáveis pela migrations e seeders do serviço store_manager_db que estão no diretório ./sql
são de autoria da Trybe