O sistema possui dois endpoints principais: Endpoint de Pedido e Endpoint de Transportadora. O objetivo é garantir que o pedido seja processado desde a solicitação até a entrega. O fluxo inclui interação com APIs externas, armazenamento de dados em DynamoDB e S3, e uso de SQS para processamento assíncrono.
Este endpoint é responsável por receber uma solicitação de pedido via API (POST), processar as informações recebidas, interagir com a API de produtos para recuperar os detalhes dos itens, armazenar os dados no DynamoDB e gerar uma mensagem para uma fila SQS. Além disso, ele interage com a transportadora para garantir que o pedido seja processado para entrega.
URL: /pedido
O payload enviado para o endpoint contém as informações sobre os produtos e a URL da transportadora:
{
"produtos": [
{
"id_produto": "number",
"quantidade": "number"
},
{
"id_produto": "number",
"quantidade": "number"
}
],
"url_transportadora": "string"
}
-
produtos: Lista de objetos, cada um representando um produto no pedido.
- id_produto: Identificador único do produto.
- quantidade: Quantidade solicitada para o produto.
-
url_transportadora: URL da API da transportadora para onde os dados de transporte serão enviados.
-
Recuperação de Dados dos Produtos: Após o recebimento do pedido, a aplicação realiza uma requisição
GET
à API de Produtos para recuperar o nome de cada produto. A URL da API de produtos segue o formato:http://url.com/{id_produto}
Exemplo de retorno da API de Produto:
{ "id_produto": "string", "nome_produto": "string" }
-
Armazenamento no DynamoDB: Os dados dos produtos e do pedido são armazenados no DynamoDB com a seguinte estrutura de colunas:
Coluna | Descrição |
---|---|
Id | Identificador único para cada produto dentro de um pedido (string). |
id_pedido | Identificador único do pedido (comum a todos os produtos de um mesmo pedido). |
data_pedido | Data e hora em que o pedido foi realizado. |
id_produto | Identificador do produto. |
nome_loja | Nome da loja que registrou o pedido. |
nome_produto | Nome do produto obtido da API de produtos. |
quantidade | Quantidade solicitada para o produto. |
url_transportadora | URL da transportadora associada ao pedido. |
Id | id_pedido | data_pedido | id_produto | nome_loja | nome_produto | quantidade | url_transportadora |
---|---|---|---|---|---|---|---|
001 |
pedido_123 |
2025-02-28T15:30:00Z |
101 |
Minha Loja |
Produto A |
2 |
http://transp.com/api |
002 |
pedido_123 |
2025-02-28T15:30:00Z |
102 |
Minha Loja |
Produto B |
1 |
http://transp.com/api |
-
Fila SQS: Após o armazenamento no DynamoDB, uma mensagem é enviada para a fila SQS com os dados do pedido no seguinte formato:
{ "produtos": [ { "id_produto": "number", "quantidade": "number" }, { "id_produto": "number", "quantidade": "number" } ], "url_transportadora": "string" }
Essa mensagem será processada por uma Lambda para interagir com a transportadora.
-
Requisição para a Transportadora: A Lambda que processa a fila SQS envia uma requisição para a URL da transportadora especificada no payload, no seguinte formato:
{ "produtos": [ { "id_produto": "number", "quantidade": "number" }, { "id_produto": "number", "quantidade": "number" } ], "nome_loja": "string" }
-
Armazenamento no S3: Após o envio da requisição à transportadora, os dados do pedido e informações de envio são salvos em um arquivo JSON no Amazon S3. O nome do arquivo será o id_pedido.
Exemplo de JSON salvo no S3:
{ "produtos": [ { "id_produto": "number", "quantidade": "number" }, { "id_produto": "number", "quantidade": "number" } ], "url_transportadora": "string", "nome_loja": "string" }
O Endpoint de Transportadora processa as informações de transporte de um pedido. Após o recebimento do pedido, o sistema interage com a API de estoque para atualizar o estoque, realiza o transporte e armazena as informações no DynamoDB e no S3.
URL: /transportadora
O payload enviado para o endpoint contém as informações dos produtos e o nome da loja associada ao pedido de transporte:
{
"produtos": [
{
"id_produto": "number",
"quantidade": "number"
},
{
"id_produto": "number",
"quantidade": "number"
}
],
"nome_loja": "string"
}
-
produtos: Lista de objetos representando os produtos que serão transportados.
- id_produto: Identificador único do produto.
- quantidade: Quantidade solicitada para o transporte do produto.
-
nome_loja: Nome da loja associada ao pedido de transporte.
- Armazenamento no DynamoDB: Após a solicitação de transporte ser recebida, os dados do pedido são salvos no DynamoDB com a seguinte estrutura:
Coluna | Descrição |
---|---|
Id | Identificador único para cada produto dentro de um pedido de transporte (string). |
id_transporte | Identificador único do transporte, comum a todos os produtos de um mesmo pedido de transporte (string). |
data_pedido | Data e hora em que o transporte foi solicitado (data). |
id_produto | Identificador do produto. |
nome_loja | Nome da loja associada ao pedido de transporte. |
quantidade | Quantidade solicitada para o transporte do produto. |
Id | id_transporte | data_pedido | id_produto | nome_loja | quantidade |
---|---|---|---|---|---|
001 |
transporte_123 |
2025-02-28T15:40:00Z |
101 |
Adidas |
2 |
002 |
transporte_123 |
2025-02-28T15:40:00Z |
102 |
Adidas |
1 |
-
Fila SQS: Após o armazenamento no DynamoDB, uma mensagem é enviada para a fila SQS com os dados do transporte no seguinte formato:
{ "produtos": [ { "id_produto": "number", "quantidade": "number" }, { "id_produto": "number", "quantidade": "number" } ], "nome_loja": "string" }
-
Baixa no Estoque: Antes de finalizar o transporte, a função Lambda que processa a fila SQS envia uma requisição
PATCH
para a API de estoque. A URL é:http://url.com/estoque/{id_produto}
O formato da requisição será:
{ "quantidade": "number" }
Onde quantidade é a quantidade do produto que está sendo removida do estoque.
-
Finalização do Transporte: Após a baixa no estoque ser confirmada, o transporte é finalizado.
-
Armazenamento no S3: Após a finalização do transporte, os dados do transporte, incluindo os produtos e o nome da loja, são salvos em um arquivo JSON no S3. O nome do arquivo será o id_transporte.
Exemplo de JSON salvo no S3:
{ "id_transporte": "string", "produtos": [ { "id_produto": "number", "quantidade": "number" }, { "id_produto": "number", "quantidade": "number" } ], "nome_loja": "string" }
-
Endpoint de Pedido:
- Recebe os dados do pedido, consulta a API de produtos, envia a requisição para a transportadora e armazena as informações no DynamoDB e no S3.
-
Endpoint de Transportadora:
- 575D Processa a solicitação de transporte, interage com a API de estoque para dar baixa nas quantidades de produtos e salva os dados no DynamoDB e no S3.
-
O sistema utiliza recursos como *API Gateway, Lambda Function, DynamoDB, SQS e S3, garantindo um fluxo eficiente de pedidos e transportes.