Skip to content
This repository was archived by the owner on Dec 2, 2024. It is now read-only.

Guia de uso da API

Jeferson Huan edited this page Jul 30, 2024 · 3 revisions

Este guia busca orientar o uso desta API e suas nuances; como ponto de partida é importante ressaltar que esta API é uma hipotética aplicação a ser usada por um restaurante/sistema de delivery.

Contextos

A API é dividia em quatro contextos: Usuário, Produto, Pedido, e Carrinho, com a seguinte organização do banco de dados:

diagram

Casos de uso

Cliente existente

Eu, como usuário, quero fazer um novo Pedido para um Cliente existente; esse Cliente solicitou os seguintes Produtos:

  • 2 unidades de California Roll;
  • 1 unidade de Salmon Teriyaki.
  1. Busco esse Cliente da base usando seu CPF:
curl --location --request GET 'http://localhost:8080/customer/00011122233' \
--header 'Accept: application/json'
  1. Guarde o ID recebido:
{
    "id": "f7cd98c4-a15a-4616-8623-cb88f7da173a",
    "name": "Ronaldinho Gaúcho",
    "cpf": "05936752070",
    "email": "[email protected]",
    "age": 44
}
  1. Continue na etapa #3

Novo cliente

Eu, como usuário, quero fazer um novo Pedido para um novo Cliente; esse Cliente solicitou os seguintes Produtos:

  • 2 unidades de California Roll;
  • 1 unidade de Salmon Teriyaki.
  1. Adicionar esse Cliente através do endpoint /customers, informando Nome, Idade, CPF e e-mail:
curl --location --request POST 'localhost:8080/customer' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
  "cpf": "05936752070",
  "email": "[email protected]",
  "name": "Ronaldinho Gaúcho",
  "age": 44
}'
  1. Guardar o payload de retorno:
{
    "id": "f7cd98c4-a15a-4616-8623-cb88f7da173a",
    "name": "Ronaldinho Gaúcho",
    "cpf": "05936752070",
    "email": "[email protected]",
    "age": 44
}
  1. Procurar o Produto California Roll solicitado por esse Cliente
curl --location --request GET 'localhost:8080/product?search=California' \
--header 'Accept: application/json'
  1. Guardar o ID do California Roll:
[
    {
        "id": "2d46ce96-ccf2-4c15-81fc-02bb6303043b",
        "name": "California Roll",
        "description": "Avocado, cucumber, and crab meat rolled in seaweed and rice, served with soy sauce and wasabi.",
        "category": "Sushi Roll",
        "price": 9.99,
        "created_at": "0001-01-01T00:00:00Z"
    }
]
  1. Adicionar ao Carrinho, com 2 unidades:
curl --location --request POST 'localhost:8080/cart/add-product' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
  "client_id": "f7cd98c4-a15a-4616-8623-cb88f7da173a",
  "product_id": "2d46ce96-ccf2-4c15-81fc-02bb6303043b",
  "quantity": 2  
}'
  1. Procurar pelo Produto Salmon Teriyaki:
curl --location --request GET 'localhost:8080/product?search=Salmon Teriyaki' \
--header 'Accept: application/json'
  1. Armazenar seu ID:
[
    {
        "id": "74a5f396-28c5-480d-bc84-37851055d639",
        "name": "Salmon Teriyaki",
        "description": "Grilled salmon fillet marinated in teriyaki sauce, served with steamed rice and stir-fried vegetables.",
        "category": "Entree",
        "price": 19.99,
        "created_at": "0001-01-01T00:00:00Z"
    }
]
  1. Adicionar ao Carrinho, com 1 unidade:
curl --location --request POST 'localhost:8080/cart/add-product' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
  "client_id": "f7cd98c4-a15a-4616-8623-cb88f7da173a",
  "product_id": "74a5f396-28c5-480d-bc84-37851055d639",
  "quantity": 1,
  "comments": "Sem muito shoyo"
}'
  1. Como finalizamos, basta confirmar o conteúdo do Carrinho:
curl --location --request POST 'localhost:8080/cart/overview' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
  "client_id": "f7cd98c4-a15a-4616-8623-cb88f7da173a"  
}'
  1. Confirmamos o conteúdo:
{
    "id": "690e8912-7f39-4871-b093-7f436e3f9585",
    "client_id": "f7cd98c4-a15a-4616-8623-cb88f7da173a",
    "products": [
        {
            "product_id": "2d46ce96-ccf2-4c15-81fc-02bb6303043b",
            "quantity": 2
        },
        {
            "product_id": "74a5f396-28c5-480d-bc84-37851055d639",
            "quantity": 1,
            "comments": "Sem muito shoyo"
        }
    ]
}
  1. Finalizamos o Pedido:
curl --location --request POST 'localhost:8080/orders' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
  "client_id": "f7cd98c4-a15a-4616-8623-cb88f7da173a"
}'

12. Recebemos a confirmação:
```json
{
    "id": "df7a92d1-c940-4fa1-8dcd-d20a8ff62cf6",
    "created_at": "2024-07-28T16:35:15.83743225-03:00",
    "client_id": "f7cd98c4-a15a-4616-8623-cb88f7da173a",
    "total_amount": 39.97,
    "status": "PENDING"
}
  1. Informamos o pagamento do Pedido (simulação de um webhook):
curl --location --request PATCH 'localhost:8080/orders/df7a92d1-c940-4fa1-8dcd-d20a8ff62cf6' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
  "status": "paid"
}'

Com o resultado:

{
    "id": "df7a92d1-c940-4fa1-8dcd-d20a8ff62cf6",
    "created_at": "2024-07-28T16:35:15.837432-03:00",
    "client_id": "f7cd98c4-a15a-4616-8623-cb88f7da173a",
    "total_amount": 39.97,
    "status": "PAID"
}
  1. Com esse resultado, é possível acompanhar o Pedido, e até cancelá-lo, se necessário.
Clone this wiki locally