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 (incluiTotal,TotalWhenPix, descontos, subtotais)List<Product>— lista completa e atualizada dos itens do cart, cada item contendocartItemIdpara referência no fluxo de remoçãoPaymentMethods— formas de pagamento com parcelas recalculadas para o novo totalRecommendationsInfoDTO— objeto comhoursToExpireeitems(lista deRecommendedItemsInfoDTOfiltrada porCartItemId == 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:
GetInfoDTOcompleto. 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 OKsem body + novoGETpelo front. Dois roundtrips; piora a experiência de resposta na tela.
Consequences
PaymentMethodsdeve 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 recordProductpara 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 incluirhoursToExpiree manter consistência com oGetInfo.RecommendedItemsInfoDTO.CartItemIdestá marcado com[JsonIgnore]e permanece assim — o filtro porCartItemId == nullgarante que apenas recomendações disponíveis são retornadas.