Skip to content

[US-002] Carrello della spesa #14

Description

@turibbio

[US-002] Carrello della spesa

As a Customer,
I want aggiungere capi di abbigliamento al carrello e gestire le quantità,
So that posso raccogliere i prodotti che desidero acquistare prima di procedere al checkout.

Acceptance Criteria

  • Given che sto visualizzando un capo, When clicco "Aggiungi al carrello", Then il capo viene aggiunto al carrello con quantità 1
  • Given che un capo è già nel carrello, When clicco nuovamente "Aggiungi al carrello", Then la quantità viene incrementata di 1
  • Given che il carrello contiene prodotti, When accedo alla pagina carrello, Then vedo la lista dei prodotti con nome, taglia, prezzo unitario, quantità e subtotale
  • Given che il carrello contiene prodotti, When modifico la quantità di un prodotto, Then il subtotale e il totale si aggiornano in tempo reale
  • Given che il carrello contiene prodotti, When rimuovo un prodotto, Then il prodotto scompare dalla lista e il totale si aggiorna
  • Given che sono su qualsiasi pagina, When guardo la navbar, Then vedo l'icona del carrello con il numero di articoli presenti
  • Given che il carrello è vuoto, When accedo alla pagina carrello, Then vedo un messaggio "Il tuo carrello è vuoto" con link al catalogo

Notes

  • Il carrello deve persistere nella sessione utente (session storage o server-side per Blazor Server)
  • Non è necessaria la persistenza su database per questa story (verrà con l'autenticazione)
  • La taglia deve essere selezionata prima di aggiungere al carrello
  • Considerare il pattern di stato con CascadingParameter per il contatore nel navbar

Story Points: 8


Task Breakdown

1. [TASK-006] Creare il modello CartItem e l'interfaccia del servizio (Layer: Core)

  • Creare modello CartItem con: ClothingItemId, Name, Size, Price, Quantity
  • Creare modello Cart con: lista di CartItem, proprietà calcolate TotalItems e TotalPrice
  • Creare interfaccia ICartService con metodi: AddToCart, RemoveFromCart, UpdateQuantity, GetCart, ClearCart
  • File coinvolti: src/ClaudeClothes.Core/Models/CartItem.cs (nuovo), src/ClaudeClothes.Core/Models/Cart.cs (nuovo), src/ClaudeClothes.Core/Interfaces/ICartService.cs (nuovo)
  • Stima: S

2. [TASK-007] Implementare il servizio carrello in-memory (Layer: Infrastructure)

  • Implementare CartService con storage in-memory (scoped per sessione Blazor Server)
  • Registrare come servizio Scoped nella DI
  • File coinvolti: src/ClaudeClothes.Infrastructure/Services/CartService.cs (nuovo), src/ClaudeClothes.Web/Program.cs
  • Stima: M

3. [TASK-008] Aggiungere bottone "Aggiungi al carrello" alla pagina dettagli (Layer: Web)

  • Aggiungere selezione taglia obbligatoria prima dell'aggiunta
  • Aggiungere bottone "Aggiungi al carrello" con feedback visivo
  • File coinvolti: src/ClaudeClothes.Web/Pages/ClothingItemDetails.razor
  • Stima: S

4. [TASK-009] Creare la pagina carrello (Layer: Web)

  • Creare pagina /cart con lista prodotti, gestione quantità, rimozione e totale
  • Gestire lo stato vuoto con messaggio e link al catalogo
  • Aggiungere bottone "Procedi al checkout" (placeholder per US-004)
  • File coinvolti: src/ClaudeClothes.Web/Pages/Cart.razor (nuovo)
  • Stima: M

5. [TASK-010] Aggiungere indicatore carrello al navbar (Layer: Web)

  • Aggiungere icona carrello con badge contatore nella navbar
  • Usare CascadingParameter o evento per aggiornare il contatore in tempo reale
  • File coinvolti: src/ClaudeClothes.Web/Shared/NavMenu.razor, src/ClaudeClothes.Web/Shared/MainLayout.razor
  • Stima: M

6. [TASK-011] Test per il servizio carrello (Layer: Tests)

  • Test per aggiunta, rimozione, aggiornamento quantità
  • Test per calcolo totali
  • Test per carrello vuoto
  • Test per aggiunta dello stesso prodotto (incremento quantità)
  • File coinvolti: tests/ClaudeClothes.Tests/CartServiceTests.cs (nuovo)
  • Stima: M

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions