

# Criação de um sistema de processamento de pedidos com funções duráveis do Lambda
<a name="order-processing-app"></a>

**nota**  
NECESSIDADE: adicionar diagrama de arquitetura mostrando o API Gateway, o fluxo de trabalho da função durável e os serviços de suporte (DynamoDB, EventBridge)

## Pré-requisitos
<a name="order-processing-prerequisites"></a>
+ AWS CLI instalado e configurado
+ NECESSIDADE: requisitos específicos de funções duráveis

## Crie os arquivos de código-fonte
<a name="order-processing-source"></a>

Criar os seguintes arquivos em seu diretório do projeto:
+ `lambda_function.py`: o código da função
+ `requirements.txt`: manifesto de dependências

### Código da função
<a name="order-processing-function-code"></a>

```
# NEED: Verify correct imports
import boto3
import json

def lambda_handler(event, context):
    # NEED: Verify DurableContext syntax
    durable = context.durable
    
    try:
        # Validate and store order
        order = await durable.step('validate', async () => {
            return validate_order(event['order'])
        })
        
        # Process payment
        # NEED: Verify wait syntax
        await durable.wait(/* wait configuration */)
        
        # Additional steps
        # NEED: Complete implementation
        
    except Exception as e:
        # NEED: Error handling patterns
        raise e

def validate_order(order_data):
    # NEED: Implementation
    pass
```

### Arquivo de requisitos
<a name="order-processing-requirements"></a>

```
# NEED: List of required packages
```

## Implante o aplicativo
<a name="order-processing-deploy"></a>

### Crie uma tabela do DynamoDB para pedidos
<a name="order-processing-dynamodb"></a>

1. Abra o console do DynamoDB em [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/).

1. Escolha **Create table**

1. Em **Nome da tabela**, insira **Orders**

1. Em **Chave de partição**, insira **orderId**

1. Deixe as outras configurações como o padrão

1. Escolha **Create table**

### Criar a função do Lambda
<a name="order-processing-lambda"></a>

1. Abra o console do Lambda em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)

1. Escolha **Create function (Criar função)**.

1. Selecione **Criar do zero**

1. Em **Nome da função**, inserir **ProcessOrder**

1. Em **Runtime**, escolha seu runtime preferido

1. NECESSIDADE: adicionar configuração específica de funções duráveis

1. Escolha **Create function (Criar função)**.

### Crie o endpoint do API Gateway
<a name="order-processing-apigateway"></a>

1. Abra o console do API Gateway em [https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/)

1. Selecione **Criar API**

1. Selecione **API de HTTP**

1. Escolha **Criar**

1. Adicione uma integração com a sua função do Lambda

1. Configure rotas para o processamento de pedidos

1. Implantar a API

## Teste o aplicativo
<a name="order-processing-test"></a>

Envie um pedido de teste:

```
{
    "orderId": "12345",
    "items": [
        {
            "productId": "ABC123",
            "quantity": 1
        }
    ]
}
```

NECESSIDADE: adicionar instruções de monitoramento específicas para funções duráveis

## Próximas etapas
<a name="order-processing-next-steps"></a>

### Adicione a lógica de negócios
<a name="order-processing-business-logic"></a>

Implemente o gerenciamento de inventário:

```
async def check_inventory(order):
    # Add inventory check logic
    pass
```

Adicione os cálculos de preços:

```
async def calculate_total(order):
    # Add pricing logic
    pass
```

### Aprimore o tratamento de erros
<a name="order-processing-error-handling"></a>

Adicione lógica de compensação:

```
async def reverse_payment(order):
    # Add payment reversal logic
    pass
```

Trate os cancelamentos de pedidos:

```
async def cancel_order(order):
    # Add cancellation logic
    pass
```

### Integre os sistemas externos
<a name="order-processing-integrations"></a>

```
async def notify_shipping_provider(order):
    # Add shipping integration
    pass

async def send_customer_notification(order):
    # Add notification logic
    pass
```

### Aprimore o monitoramento
<a name="order-processing-monitoring"></a>
+ Crie painéis do CloudWatch
+ Configure métricas para tempos de processamento de pedidos
+ Configure alertas para pedidos atrasados