Serviço de processamento de webhooks implementando Idempotência, Ordenação Estrita por Entidade e Audit Logging. Construído para demonstrar robustez no tratamento de eventos distribuídos.
Nota de Portfólio: Este projeto prioriza a correção arquitetural, código limpo e a visibilidade dos trade-offs. Serve como uma implementação de referência para lidar com padrões de processamento assíncrono de forma segura.
flowchart TD
In([Requisição Webhook]) --> Validate{Payload Válido?}
Validate -- Não --> R400[400 Bad Request]
Validate -- Sim --> Idem{Checagem de Idempotência}
Idem -- Duplicado & Processado --> R409[409 Conflict]
Idem -- Duplicado & Falhou --> Retry[Retry: Reset & Aceitar]
Idem -- Novo Evento --> Accept[202 Accepted]
Retry --> Queue
Accept --> Queue
Queue --> Lock{Adquirir Mutex}
Lock --> Process[Processamento Sequencial]
Process -- Sucesso --> DB_OK[(DB: PROCESSED + Audit)]
Process -- Erro --> DB_FAIL[(DB: FAILED + Audit)]
Previne efeitos colaterais duplicados quando provedores enviam o mesmo evento múltiplas vezes.
event_id).Garante que um OrderCreated seja sempre processado antes de um OrderPaid.
customer_id.Toda decisão — seja aceita, ignorada, processada ou falhada — é logada permanentemente.
cp .env.example .env
docker-compose up -d
npm install
npm run db:migrate
npm run dev
# Swagger Docs at http://localhost:3000/api-docs
Esta arquitetura faz trade-offs explícitos pela simplicidade e consistência em um ambiente de nó único (single-node).
| Restrição | Implicação | Solução de Produção (Escala) |
|---|---|---|
| Bloqueios na memória | A expansão para múltiplas instâncias quebra as garantias de ordenação. | Bloqueio do Redis (Redlock) ou particionamento do Kafka (mensagens com chave). |
| Sem fila de mensagens não entregues | Os eventos com falha permanecem FAILED no banco de dados. |
Tabela separada DLQ + Mecanismo de repetição. |
| Gravações síncronas no banco de dados | Maior latência no recebimento de solicitações. | Desacoplar a ingestão (SQS/RabbitMQ) do armazenamento. |
Gérson Resplandes
Engenheiro Backend focado em Sistemas Distribuídos & Confiabilidade.