Skip to main content

Task #194883 — Cart API: Endpoint para Remover Item de Cart Existente

Task pai: #194883 — [Back] 05 - Cart API: Remove Item de cart existente Contexto: US 194871 — MVP Upsell (Pedido)

Status do refinamento: concluido Requisitos EARS: task-194883-cart-api-remove-item-requisitos.md Pesquisa tecnica: pesquisa-remove-recommended-item.md ADRs: ADR-008


Contexto

O endpoint DELETE api/payment/v2/{id}/remove-recommended-item do checkout service precisa chamar a Cart API para remover um item do cart. A Cart API nao possui hoje um endpoint de remocao de item individual — a unica remocao existente e o DELETE api/cart que deleta o cart inteiro.

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


Endpoint

DELETE api/cart/{cartId}/items/{cartItemId}
x-api-key: {internal api key}

Sem body.

Autenticacao

[AllowAnonymous] + [UseApiKey("internal")] — mesmo padrao do POST api/cart/assistant e do POST api/cart/{cartId}/items.
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 o CartItem pelo cartItemId dentro da colecao do cart (restrito ao cart carregado)
    • Retornar 400 se nao encontrado
  3. Validar que item.IsFromRecommendation == true
    • Retornar 400 se o item nao e originado de recomendacao
  4. Aplicar soft-delete no item (item.Delete() via CartModel.RemoveItem(cartItemId))
  5. Recalcular totais do cart (CartModel.CalculateTotal — filtrando itens com DateDeleted == null)
  6. Persistir via Update(cart) + SaveAsync() e retornar 200

A validacao de PaymentStatus (cart nao pago) nao e responsabilidade da Cart API — e feita pelo checkout service antes de chamar este endpoint. O CartStatus do cart nao e atualizado de forma confiavel apos pagamento.


Saida

  • 200 — item removido com sucesso
  • 400:
    • Cart nao encontrado
    • Item nao encontrado no cart
    • Item nao originado de recomendacao (IsFromRecommendation == false)
  • 401 — ApiKey ausente ou invalida

Dependencias

DependenciaStatus
CartItemsModel.IsFromRecommendation (bool)Dependencia bloqueante (US separada)
CartModel.RemoveItem(int cartItemId) — novo metodo (soft-delete via item.Delete())A implementar
CartModel.CalculateTotal() — ajuste para filtrar DateDeleted == nullA implementar
RemoveCartItemCommand — novo command em Cart.Domain/Commands/A implementar
ICartService.Handle(RemoveCartItemCommand) — nova assinaturaA implementar
CartService.Handle(RemoveCartItemCommand) — nova implementacaoA implementar
CartController — novo endpoint DELETE api/cart/{cartId}/items/{cartItemId}A implementar

Arquivos desta pasta

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