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
- Buscar o cart pelo
cartId- Retornar
400se nao encontrado
- Retornar
- Buscar o
CartItempelocartItemIddentro da colecao do cart (restrito ao cart carregado)- Retornar
400se nao encontrado
- Retornar
- Validar que
item.IsFromRecommendation == true- Retornar
400se o item nao e originado de recomendacao
- Retornar
- Aplicar soft-delete no item (
item.Delete()viaCartModel.RemoveItem(cartItemId)) - Recalcular totais do cart (
CartModel.CalculateTotal— filtrando itens comDateDeleted == null) - Persistir via
Update(cart)+SaveAsync()e retornar200
A validacao de
PaymentStatus(cart nao pago) nao e responsabilidade da Cart API — e feita pelo checkout service antes de chamar este endpoint. OCartStatusdo 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
| Dependencia | Status |
|---|---|
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 == null | A implementar |
RemoveCartItemCommand — novo command em Cart.Domain/Commands/ | A implementar |
ICartService.Handle(RemoveCartItemCommand) — nova assinatura | A implementar |
CartService.Handle(RemoveCartItemCommand) — nova implementacao | A implementar |
CartController — novo endpoint DELETE api/cart/{cartId}/items/{cartItemId} | A implementar |
Arquivos desta pasta
| Arquivo | Descricao |
|---|---|
task-194883-cart-api-remove-item.md | Este arquivo — sumario, indice da task e fluxo do endpoint |
task-194883-cart-api-remove-item-requisitos.md | Documento de requisitos EARS (pt-BR): REQs, respostas HTTP, questoes fechadas |