Skip to content

[US-005] Wishlist / Lista dei desideri #17

Description

@turibbio

[US-005] Wishlist / Lista dei desideri

As a Customer,
I want salvare i capi che mi piacciono in una lista dei desideri,
So that posso ritrovarli facilmente in futuro e decidere con calma cosa acquistare.

Acceptance Criteria

  • Given che sono autenticato e visualizzo un capo, When clicco l'icona cuore/wishlist, Then il capo viene aggiunto alla mia lista dei desideri e l'icona diventa piena/colorata
  • Given che un capo è nella mia wishlist, When clicco nuovamente l'icona cuore, Then il capo viene rimosso dalla wishlist e l'icona torna vuota
  • Given che sono autenticato, When accedo a "La mia Wishlist", Then vedo la lista dei capi salvati con nome, prezzo e link al dettaglio
  • Given che sono nella pagina wishlist, When clicco "Aggiungi al carrello" su un capo, Then il capo viene aggiunto al carrello
  • Given che sono nella pagina wishlist, When clicco "Rimuovi" su un capo, Then il capo viene rimosso dalla lista
  • Given che la wishlist è vuota, When accedo alla pagina, Then vedo un messaggio "La tua wishlist è vuota" con link al catalogo
  • Given che non sono autenticato, When clicco l'icona wishlist su un capo, Then vengo reindirizzato alla pagina di login

Notes

  • Dipendenze: richiede US-003 (autenticazione)
  • La wishlist deve essere persistita su database (a differenza del carrello)
  • L'icona wishlist deve essere visibile sia nella card del catalogo che nella pagina dettagli
  • Considerare l'uso di un'icona cuore (bi-heart / bi-heart-fill) per coerenza UX

Story Points: 5


Task Breakdown

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

  • Creare modello WishlistItem con: Id, UserId, ClothingItemId, AddedAt
  • Creare interfaccia IWishlistService con metodi: AddToWishlistAsync, RemoveFromWishlistAsync, GetWishlistAsync, IsInWishlistAsync
  • File coinvolti: src/ClaudeClothes.Core/Models/WishlistItem.cs (nuovo), src/ClaudeClothes.Core/Interfaces/IWishlistService.cs (nuovo)
  • Stima: S

2. [TASK-025] Implementare il servizio wishlist (Layer: Infrastructure)

  • Implementare WishlistService con operazioni CRUD su database
  • Configurare entity WishlistItem nel DbContext con relazione a ApplicationUser e ClothingItem
  • Creare migration
  • File coinvolti: src/ClaudeClothes.Infrastructure/Services/WishlistService.cs (nuovo), src/ClaudeClothes.Infrastructure/Data/ClaudeClothesDbContext.cs
  • Stima: M

3. [TASK-026] Aggiungere toggle wishlist alle card e alla pagina dettagli (Layer: Web)

  • Aggiungere icona cuore cliccabile nelle card prodotto (Index.razor)
  • Aggiungere icona cuore cliccabile nella pagina dettagli (ClothingItemDetails.razor)
  • Toggle visuale tra cuore vuoto e pieno in base allo stato
  • Redirect a login se non autenticato
  • File coinvolti: src/ClaudeClothes.Web/Pages/Index.razor, src/ClaudeClothes.Web/Pages/ClothingItemDetails.razor
  • Stima: M

4. [TASK-027] Creare la pagina wishlist (Layer: Web)

  • Creare pagina /wishlist con lista capi salvati
  • Per ogni capo: nome, prezzo, link al dettaglio, bottone "Aggiungi al carrello", bottone "Rimuovi"
  • Stato vuoto con messaggio e link al catalogo
  • Proteggere con [Authorize]
  • File coinvolti: src/ClaudeClothes.Web/Pages/Wishlist.razor (nuovo)
  • Stima: M

5. [TASK-028] Aggiungere link wishlist al navbar (Layer: Web)

  • Aggiungere icona cuore con contatore nella navbar per utenti autenticati
  • File coinvolti: src/ClaudeClothes.Web/Shared/NavMenu.razor
  • Stima: S

6. [TASK-029] Test per il servizio wishlist (Layer: Tests)

  • Test per aggiunta e rimozione dalla wishlist
  • Test per verifica presenza capo in wishlist
  • Test per recupero wishlist per utente
  • Test per aggiunta duplicata (deve essere idempotente)
  • File coinvolti: tests/ClaudeClothes.Tests/WishlistServiceTests.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