Skip to main content

Pesquisa Técnica — Add Recommended Item

Contexto

Refinamento da task #193232 — endpoint POST api/payment/v2/{id}/add-recommended-item.


Código relevante encontrado

PaymentController

Path: coezzion-service-checkout/src/Checkout.API/Controllers/PaymentController.cs

Endpoints existentes relevantes:

MethodRouteAuth
GETapi/payment/v2/{id}Sem auth + reCAPTCHA
PUTapi/payment[Authorize(AuthenticationSchemes = "PaymentsScheme")] + Idempotency key
PUTapi/payment/v2/retry[Authorize(AuthenticationSchemes = "PaymentsScheme")]
GETapi/payment/v2/status/{id}[UseApiKey("venda_ai")]
POSTapi/payment/check-payment-flow[UseApiKey("internal")]

O controller usa IZZMediator para despachar todos os commands e queries.

CartController — ausência de add item

Path: coezzion-service-cart/src/Cart.API/Controllers/CartController.cs

Não existe endpoint de add item a cart existente. Itens só são adicionados na criação via POST api/cart com JWT Bearer. Padrão de ApiKey existente: [AllowAnonymous] + [UseApiKey("venda_ai")] no POST api/cart/assistant.

[UseApiKey] lê de IConfiguration["ApiKeys:{configKey}"] e valida o header x-api-key.

CartItemsModel

Path: coezzion-db-core/src/Core.OrgDB/Entities/CartItemsModel.cs

Campos: CartId, ProductId, Quantity, Size, UnitPrice, Discount (DiscountType enum), DiscountValue, GrossPrice, Total.

CartModel.AddItems

Path: coezzion-db-core/src/Core.OrgDB/Entities/CartModel.cs (linha ~199)

public void AddItems(ICollection<CartItemsModel> cartItems)
{
foreach (var item in cartItems) CartItems.Add(item);
}

GetInfoBase — DTOs de retorno

Path: coezzion-service-checkout/src/Checkout.Domain/DTO/GetInfo/GetInfoBase.cs

Tipos confirmados para o DTO de retorno do novo endpoint:

TipoCampos
ValuesProducts, Discount, DiscountPix, Bonus, Subtotal, SubtotalWhenPix, Shipment, Total, TotalWhenPix
ProductName, Size, Amount, FullPrice, Price, Total, Url
PaymentMethodsCreditCard, Pix, Boleto, Installments, IsTwoCreditCardsAllowed — recalcula parcelas com base no novo total

Autenticação PaymentsScheme

Esquema JWT customizado já usado em PUT api/payment (FinishOrder) e PUT api/payment/v2/retry. O zzlink já carrega o token desse scheme para operações de finalização — reutilizável para o add item.

ApiKey "internal"

Já existe no PaymentController ([UseApiKey("internal")] no POST api/payment/check-payment-flow). Será reusado na comunicação checkout→cart no novo endpoint da Cart API.


Decisões tomadas durante o refinamento

#QuestãoDecisão
1Onde fica o endpoint?PaymentController no checkout service
2RoutePOST api/payment/v2/{id}/add-recommended-item
3Autenticação[Authorize(AuthenticationSchemes = "PaymentsScheme")]
4Contrato retorno 200{ values, products, paymentMethods, recommendedItems } — reusa Values, List<Product>, PaymentMethods, List<RecommendedItemsInfoDTO> de GetInfoBase.cs
5PaymentMethods recalculado?Sim — parcelas sempre recalculadas com novo total quando valor do pedido muda
6Cart APINova task separada; endpoint POST api/cart/{cartId}/items; auth [UseApiKey("internal")]
7Ajuste Payment.TotalSíncrono no handler, após sucesso da Cart API
8Auditoria alllogsLog ao tentar + log do resultado; falhas também logadas
9Janela de validadeCart.DateCreated + 1 hora — mesma regra do GetInfo
10Erro sem estoqueRepassa 400 com mensagem + loga na alllogs; sem tratativa adicional no checkout

Nova task identificada

Task — Cart API: Add Item a cart existente

  • Novo endpoint: POST api/cart/{cartId}/items
  • Auth: [UseApiKey("internal")]
  • Responsabilidades: validar estoque (usando StoreId do cart), adicionar item, recalcular totais do cart
  • Payload recebido: productId, size, discount, discountType, fullPrice, price
  • Relacionada à task #193232
  • Deve ser aberta como task separada e vinculada a #193232