Skip to main content

ADR-006: Retorno 200 com subset do GetInfo (Values + Products + PaymentMethods + Recommendations)

Após adicionar um item recomendado, o zzlink precisa atualizar a tela com os novos valores do pedido. Decidimos retornar um DTO específico com apenas os dados que mudam, em vez de retornar o GetInfoDTO completo ou forçar um segundo GET api/payment/v2/{id}.

O DTO de retorno contém:

  • Values — totais recalculados (inclui Total, TotalWhenPix, descontos, subtotais)
  • List<Product> — lista completa e atualizada dos itens do cart, cada item contendo cartItemId para referência no fluxo de remoção
  • PaymentMethods — formas de pagamento com parcelas recalculadas para o novo total
  • RecommendationsInfoDTO — objeto com hoursToExpire e items (lista de RecommendedItemsInfoDTO filtrada por CartItemId == null, ou seja, apenas recomendações não efetivadas)

Todos os tipos já existem em GetInfoBase.cs — sem novos contratos de domínio, exceto a adição de CartItemId no record Product.

Considered Options

  • A (escolhida): Subset com os quatro campos acima. Retorna apenas o que muda, reutiliza tipos existentes.
  • B: GetInfoDTO completo. Mais simples de implementar, mas retorna dados desnecessários (dados do cliente, endereço, status do payment, customLink, etc.) que o front já possui.
  • C: 200 OK sem body + novo GET pelo front. Dois roundtrips; piora a experiência de resposta na tela.

Consequences

  • PaymentMethods deve ser sempre recalculado junto que o valor do pedido muda (add ou remove item), pois as parcelas disponíveis dependem do total.
  • Product.CartItemId é adicionado ao record Product para que o front possa referenciar o item no fluxo de remoção (DELETE api/payment/v2/{id}/remove-recommended-item).
  • RecommendationsInfoDTO é usado em vez de uma lista plana, para incluir hoursToExpire e manter consistência com o GetInfo.
  • RecommendedItemsInfoDTO.CartItemId está marcado com [JsonIgnore] e permanece assim — o filtro por CartItemId == null garante que apenas recomendações disponíveis são retornadas.