Skip to main content

ADR-012 — Publicação de eventos de histórico de cart é fire-and-forget com duplicatas intencionais no idempotency

Status: Aceito Data: 2026-06-12 Contexto: Task #196022 — Alterar POST api/cart para publicar RecommendationCartCreated na fila FIFO


O handler PublishRecommendationHistoryHandler adota dois comportamentos deliberados:

  • Fire-and-forget: falha no SendFifoAsync é logada e o context retorna sem erro. A criação do carrinho já foi persistida com sucesso — a observabilidade não pode penalizar o fluxo principal.
  • Duplicatas no idempotency: quando o CartTransactionIdHandler encontra um cart já existente, o chain pode chegar ao SaveCartHandler com Id != 0 (que pula o save), mas o handler de publicação executa mesmo assim. O evento RecommendationCartCreated é republicado — duplicatas no histórico são aceitas para diagnóstico de re-execuções.

Opções consideradas

DecisãoAlternativa rejeitadaMotivo da rejeição
Fire-and-forget (logar e seguir)Adicionar erro no BaseResult e interromper o chainA criação do cart não pode ser revertida por falha de publicação de evento de histórico; o SQS garante entrega, e falhas transitórias se resolvem com retry do próprio SQS
Duplicatas no idempotencyPular publicação se CartModel.Id != 0 antes do saveRe-execuções por idempotency são eventos raros e diagnosticáveis; uma duplicata no histórico append-only é preferível a perder a visibilidade de que o mesmo RecommendationsId passou pelo endpoint mais de uma vez

Referências