Skip to main content

Task #194881 — Cart API: Endpoint para Adicionar Item a Cart Existente

Task pai: #194881 — [Back] 03 - Cart API: Add Item a cart existente Contexto: US 194871 — MVP Upsell (Pedido)

Status do refinamento: concluido Requisitos EARS: task-194881-cart-api-add-item-requisitos.md Pesquisa tecnica: context/pesquisa-add-recommended-item.md ADRs: ADR-004 · ADR-005 · ADR-006 · ADR-007 · ADR-009


Contexto

O endpoint POST api/payment/v2/{id}/add-recommended-item do checkout service precisa chamar a Cart API para persistir o novo item no cart. A Cart API nao possui hoje um endpoint de add item a cart existente — itens so sao adicionados na criacao do cart via POST api/cart com JWT Bearer.

Esta task cria o endpoint interno que sera chamado exclusivamente pelo checkout service via ApiKey "internal".


Endpoint

POST api/cart/{cartId}/items
x-api-key: {internal api key}
Content-Type: application/json

Request body

{
"recommendedItemId": 0
}

Body simplificado para apenas recommendedItemId. Os dados do item (productId, size, discountType, discountValue) sao resolvidos do CartRecommendedItems pela Cart API (ver REQ-03). fullPrice e price recuperados de ProductsStockStores. quantity sempre 1.

Autenticacao

[AllowAnonymous] + [UseApiKey("internal")] — mesmo padrao do POST api/payment/check-payment-flow.
Sem JWT. A chamada vem exclusivamente do checkout service.


Responsabilidades da Cart API

  1. Buscar o cart pelo cartId
    • Retornar 400 se nao encontrado
  2. Buscar CartRecommendedItem pelo recommendedItemId
    • Validar que o registro existe → 400 se nao
    • Validar que pertence ao cartId da rota → 400 se nao
    • Validar que StoreId coincide com o StoreId do cart → 400 se nao
    • Extrair productId, size, discountType, discountValue
  3. Validar estoque do produto na loja (StoreId do cart) usando productId + size do CartRecommendedItem
    • Retornar 400 se sem estoque
  4. Adicionar o item ao cart (CartModel.AddItems)
  5. Recalcular totais do cart (CartModel.CalculateTotal)
  6. Persistir e retornar 200

Saida

  • 200 — item adicionado com sucesso
  • 400:
    • Cart nao encontrado
    • Recomendacao nao encontrada ou invalida (nao existe, nao pertence ao cart, ou StoreId diverge)
    • Produto sem estoque na loja

Arquivos desta pasta

ArquivoDescricao
task-194881-cart-api-add-item.mdEste arquivo — sumario, indice da task e fluxo do endpoint
task-194881-cart-api-add-item-requisitos.mdDocumento de requisitos EARS (pt-BR): REQs, respostas HTTP, questoes fechadas

Questoes abertas

Nenhuma identificada ate o momento. Refinar com Anderson e Nicolas antes de implementar.