Pular para conteúdo

Passo a Passo para Testar o Backend

Passos

Essa documentação fornece um passo a passo detalhado para realizar testes no backend do nosso projeto. Clique nas caixas abaixo para avançar em cada etapa do processo.

Autenticação e autorização

Gerar Token de Acesso e Autorizar

O primeiro passo é criar um Token de Acesso usando um dos usuários administrativos. Para isso, utilize o Swagger em Login for Access Token. Siga as etapas abaixo:

  • Clique em Try it out.
  • Preencha os seguintes campos:
    • username: "email@email.com.br"
    • password: "your_password"
    • client_id: "1"

Isso gerará o Token de Acesso necessário para prosseguir com as etapas que exigem autenticação via token. image

Ao tentar acessar endpoints que requerem autorização, como category, orders, e products, siga estas etapas adicionais:

  • Clique em Authorize (símbolo de cadeado).
  • Faça login usando seu e-mail e senha administrativo.
    • username: "email@email.com.br"
    • password: "your_password"
    • client_id: 1
Solução de Problemas: 401 Unhauthorized

Se ao tentar acessar os endpoints category, orders, ou products você receber uma resposta com o erro 401 Unauthorized, isso significa que as credenciais não foram validadas corretamente.

JSON
Error: Unauthorized

Response body
Download
{
    "detail": "Could not validate credentials"
}
Verifique se o Token de Acesso foi gerado corretamente e se as credenciais estão corretas ao tentar autorizar o acesso.

image image

Para garantir a segurança, o token expira a cada operação (GET, PUT ou POST). Para ajustar o tempo de expiração do token, você deve definir a variável de ambiente TIMETOKEN no arquivo .env com o valor desejado para o tempo de expiração personalizado.

Onboarding: Cliente anônimo

Passo 01: Realizando pedido sem identificação

Este projeto permite que o cliente faça um pedido sem a necessidade de cadastro de seus dados pessoais. Para executar esse fluxo, siga os passos abaixo: 1. Acesse o Swagger em Create Anonymous Customer. 2. Clique em Try it out. 3. Em seguida, clique em Execute. Após seguir esses passos, um cliente anônimo será gerado, permitindo que o pedido seja realizado sem identificação. image

Onboarding: Cliente identificado

Passo 02: Fazendo cadastro do cliente

Para os clientes que desejam se cadastrar na aplicação, basta usar o endpoint customers/register e preencher com os dados solicitados como no exemplo abaixo:

JSON
{
    "name": "Abelardo",
    "email": "abe@email.com.br",
    "cpf": "001001001-11",
    "password": "my_password"
}

Para certificar que o cliente foi registrado utilize o endpoint customers/read_customers e liste todos os clientes cadastrados. image

Pedido: Seleção do pedido

Passo 03: Efetuando um pedido

Com o endpoint orders/create_orders preencha com os valores de customer_id que foi cadastrado nos passos 01 ou 02 e product_id para adicionar o produto a um pedido, exemplo:

JSON
{
    "status": "string",
    "user_agent": "string",
    "ip_address": "string",
    "os": "string",
    "browser": "string",
    "device": "string",
    "comments": "string",
    "customer_id": 4,
    "products": [
        {
        "product_id": 10,
        "comment": "sem gelo"
        }
    ]
}
Resultado da operação de seleção do pedido: image

Pagamento: Processando o pagamento do pedido

Passo 04: Realizando pagamento do pedido chamando a rota /payments

Com o endpoint orders/{order_id}/payment defina no parâmetro "order_id" o id do pedido em questão para alterar seu status de pagamento, exemplo:

JSON
{
  "payment_status": "pago"
}
Resultado da operação de realização de chamada no endpoint de pagamento com um status code 200:
JSON
{
  "id": 1,
  "customer_id": 1,
  "status": "Recebido",
  "created_at": "2024-10-15T12:40:45.696390",
  "payment_status": "pago"
}

Obs.: Uma vez em que o status do pedido é alterado, é disparado um Webhook para a plataforma, com a data/hora do momento em que está sendo feita a alteração, o novo status do pagamento do pedido e o id do mesmo, conforme:

JSON
{
  "order_id": 1,
  "status": "Finalizado",
  "customer_id": 1,
  "payment_status": "pago",
  "received_at": "2024-10-15T22:21:35.479Z"
}

Passo 04.1: Realizando pagamento do pedido com fake checkout

Após executar o orders/fake_checkout siga para o fluxo de atualização de status do pedido.

Preparação e atualização do pedido

Passo 05: Atualização de status de pedido

Com order_id é possível fazer a atualização de status de cada pedido, com o endpoint orders/update_order_status. Exemplo com valor de entrada usando o order_id 3:

JSON
{
    "status": "em preparação"
}
Passo 06: Visualizando status do pedido

Para visualizar o status atual de um pedido, siga os passos abaixo: - Com o valor do order_id, acesse o endpoint orders/read_order. - Verifique o status atual do pedido. Exemplo de retorno:

JSON
{
    "id": 3,
    "customer_id": 4,
    "status": "em preparação"
}
- Para atualizar o status do pedido para pronto, utilize o endpoint oorders/update_order_status com o seguinte corpo de requisição:

JSON
{
    "status": "pronto"
}
- Depois de atualizar o status, você pode confirmar a atualização acessando novamente o endpoint orders/read_order. O estado do pedido será exibido como pronto para retirada. image

Listando todos os pedidos registrados

Em orders/read_orders é possível listar todos os pedidos feitos por cliente. Exemplo com valores de retorno:

JSON
{
    "orders": [
        {
        "id": 1,
        "customer_id": 1
        },
        {
        "id": 2,
        "customer_id": 4
        },
        {
        "id": 3,
        "customer_id": 4
        },
        {
        "id": 4,
        "customer_id": 4
        }
    ]
}    

Gerenciamento de produtos e categorias

Cadastro de produto

Usando o endpoint products/create_product é possível fazer o cadastro de um novo produto de acordo com as categorias previamente cadastradas. Exemplo com valores de entrada:

JSON
{
    "name": "Brigadeiro",
    "description": "Doce feito com leite condensado e achocolatado",
    "price": 3,
    "category_id": 5,
    "category": "Sobremesas"
}
Atualização de categoria

Para atualizar uma categoria de produto, utilize o endpoint category/update_category: - Com o valor do category_id, faça a requisição com o corpo de requisição similar ao exemplo abaixo:

JSON
{
"name": "Sobremesas",
"description": "Categoria dedicada a todos os tipos de sobremesas."
}    
Listando categorias e produtos

Usando o endpoint category/list_categories é possível fazer o cadastro de um novo produto de acordo com as categorias previamente cadastradas. Exemplo com valores que retornam nessa operação:

JSON
{
"categories": [
    {
    "name": "Sanduíches",
    "id": 1,
    "products": [
        {
        "name": "Sanduíche de Frango Grelhado",
        "description": "Grilled chicken sandwich with lettuce and tomato",
        "price": 15,
        "category_id": 1,
        "category": "Sanduíches",
        "id": 1
        },
        {
        "name": "Cheeseburger Clássico",
        "description": "Classic cheeseburger with beef patty and cheese",
        "price": 12,
        "category_id": 1,
        "category": "Sanduíches",
        "id": 2
        },
        {
        "name": "Sanduíche Vegano de Grão-de-Bico",
        "description": "Vegan sandwich with chickpea patty",
        "price": 14,
        "category_id": 1,
        "category": "Sanduíches",
        "id": 3
        }
    ]
    },
    {
    "name": "Pizzas",
    "id": 2,
    "products": [
        {
        "name": "Pizza Margherita",
        "description": "Pizza with tomato sauce, mozzarella, and basil",
        "price": 25,
        "category_id": 2,
        "category": "Pizzas",
        "id": 4
        },
        {
        "name": "Pizza Pepperoni",
        "description": "Pizza with tomato sauce, mozzarella, and pepperoni",
        "price": 27,
        "category_id": 2,
        "category": "Pizzas",
        "id": 5
        },
        {
        "name": "Pizza Quatro Queijos",
        "description": "Pizza with four types of cheese",
        "price": 28,
        "category_id": 2,
        "category": "Pizzas",
        "id": 6
        }
    ]
    },
    {
    "name": "Acompanhamentos",
    "id": 3,
    "products": [
        {
        "name": "Batata Frita",
        "description": "Portion of crispy french fries",
        "price": 8,
        "category_id": 3,
        "category": "Acompanhamentos",
        "id": 7
        },
        {
        "name": "Anéis de Cebola",
        "description": "Portion of breaded onion rings",
        "price": 9,
        "category_id": 3,
        "category": "Acompanhamentos",
        "id": 8
        },
        {
        "name": "Salada Caesar",
        "description": "Caesar salad with lettuce, croutons, and parmesan cheese",
        "price": 10,
        "category_id": 3,
        "category": "Acompanhamentos",
        "id": 9
        }
    ]
    },
    {
    "name": "Bebidas",
    "id": 4,
    "products": [
        {
        "name": "Coca-Cola",
        "description": "Cola soft drink",
        "price": 5,
        "category_id": 4,
        "category": "Bebidas",
        "id": 10
        },
        {
        "name": "Suco de Laranja",
        "description": "Natural orange juice",
        "price": 6,
        "category_id": 4,
        "category": "Bebidas",
        "id": 11
        },
        {
        "name": "Água Mineral",
        "description": "Still mineral water",
        "price": 4,
        "category_id": 4,
        "category": "Bebidas",
        "id": 12
        }
    ]
    },
    {
    "name": "Sobremesas",
    "id": 5,
    "products": [
        {
        "name": "Brownie de Chocolate",
        "description": "Chocolate brownie with walnuts",
        "price": 7,
        "category_id": 5,
        "category": "Sobremesas",
        "id": 13
        },
        {
        "name": "Torta de Maçã",
        "description": "Apple pie with cinnamon",
        "price": 8,
        "category_id": 5,
        "category": "Sobremesas",
        "id": 14
        },
        {
        "name": "Sorvete de Baunilha",
        "description": "Vanilla ice cream",
        "price": 6,
        "category_id": 5,
        "category": "Sobremesas",
        "id": 15
        },
        {
        "name": "Brigadeiro",
        "description": "Doce feito com leite condensado e achocolatado",
        "price": 3,
        "category_id": 5,
        "category": "Sobremesas",
        "id": 16
        },
        {
        "name": "Brigadeiro",
        "description": "Doce feito com leite condensado e achocolatado",
        "price": 3,
        "category_id": 5,
        "category": "Sobremesas",
        "id": 17
        },
        {
        "name": "Brigadeiro",
        "description": "Doce feito com leite condensado e achocolatado",
        "price": 3,
        "category_id": 5,
        "category": "Sobremesas",
        "id": 18
        },
        {
        "name": "Brigadeiro",
        "description": "Doce feito com leite condensado e achocolatado",
        "price": 3,
        "category_id": 5,
        "category": "Sobremesas",
        "id": 19
        }
    ]
    }
]
}