Skip to content

[US-004] Checkout e gestione ordini #16

Description

@turibbio

[US-004] Checkout e gestione ordini

As a Customer,
I want completare l'acquisto dei prodotti nel mio carrello e vedere lo storico dei miei ordini,
So that posso acquistare i capi che desidero e tenere traccia delle mie transazioni.

Acceptance Criteria

  • Given che il carrello contiene prodotti e sono autenticato, When clicco "Procedi al checkout", Then vedo il form di checkout con riepilogo ordine e campi per indirizzo di spedizione
  • Given che compilo il form di checkout con dati validi, When clicco "Conferma ordine", Then l'ordine viene creato, il carrello viene svuotato e vedo la pagina di conferma con il numero d'ordine
  • Given che ho completato un ordine, When accedo a "I miei ordini", Then vedo la lista dei miei ordini con data, totale e stato
  • Given che clicco su un ordine, When si apre il dettaglio, Then vedo i prodotti ordinati, quantità, prezzi e indirizzo di spedizione
  • Given che non sono autenticato, When clicco "Procedi al checkout", Then vengo reindirizzato alla pagina di login
  • Given che il carrello è vuoto, When provo ad accedere al checkout, Then vengo reindirizzato al carrello con messaggio "Aggiungi prodotti prima di procedere"

Notes

  • Dipendenze: richiede US-002 (carrello) e US-003 (autenticazione)
  • Per l'MVP non implementare il pagamento reale, simulare solo la conferma ordine
  • Stati ordine: Pending, Confirmed, Shipped, Delivered
  • L'indirizzo di spedizione deve includere: via, città, CAP, provincia
  • Generare un numero ordine univoco (es. ORD-20260225-001)

Story Points: 8


Task Breakdown

1. [TASK-018] Creare i modelli Order e OrderItem (Layer: Core)

  • Creare modello Order con: Id, UserId, OrderNumber, OrderDate, Status, TotalAmount, ShippingAddress, OrderItems
  • Creare modello OrderItem con: Id, OrderId, ClothingItemId, Name, Size, Price, Quantity
  • Creare modello ShippingAddress (value object) con: Street, City, ZipCode, Province
  • Creare enum OrderStatus: Pending, Confirmed, Shipped, Delivered
  • File coinvolti: src/ClaudeClothes.Core/Models/Order.cs (nuovo), src/ClaudeClothes.Core/Models/OrderItem.cs (nuovo), src/ClaudeClothes.Core/Models/ShippingAddress.cs (nuovo), src/ClaudeClothes.Core/Models/OrderStatus.cs (nuovo)
  • Stima: S

2. [TASK-019] Implementare il servizio ordini (Layer: Infrastructure)

  • Creare IOrderService con metodi: CreateOrderAsync, GetOrdersByUserAsync, GetOrderByIdAsync
  • Implementare OrderService con logica di creazione ordine, generazione numero ordine e svuotamento carrello
  • Configurare le entity EF Core nel DbContext e creare migration
  • File coinvolti: src/ClaudeClothes.Core/Interfaces/IOrderService.cs (nuovo), src/ClaudeClothes.Infrastructure/Services/OrderService.cs (nuovo), src/ClaudeClothes.Infrastructure/Data/ClaudeClothesDbContext.cs
  • Stima: M

3. [TASK-020] Creare la pagina di checkout (Layer: Web)

  • Creare pagina /checkout con riepilogo ordine dal carrello e form indirizzo di spedizione
  • Validazione campi indirizzo con DataAnnotations
  • Bottone "Conferma ordine" con loading state
  • Redirect a login se non autenticato ([Authorize])
  • File coinvolti: src/ClaudeClothes.Web/Pages/Checkout.razor (nuovo)
  • Stima: M

4. [TASK-021] Creare le pagine ordini e conferma (Layer: Web)

  • Creare pagina /orders con lista ordini dell'utente autenticato
  • Creare pagina /order/{id} con dettaglio ordine
  • Creare pagina /order-confirmation/{orderNumber} con conferma e riepilogo
  • File coinvolti: src/ClaudeClothes.Web/Pages/Orders.razor (nuovo), src/ClaudeClothes.Web/Pages/OrderDetails.razor (nuovo), src/ClaudeClothes.Web/Pages/OrderConfirmation.razor (nuovo)
  • Stima: M

5. [TASK-022] Aggiornare navbar con link ordini (Layer: Web)

  • Aggiungere link "I miei ordini" nella navbar per utenti autenticati
  • File coinvolti: src/ClaudeClothes.Web/Shared/NavMenu.razor
  • Stima: S

6. [TASK-023] Test per il servizio ordini (Layer: Tests)

  • Test per creazione ordine con dati validi
  • Test per recupero ordini per utente
  • Test per generazione numero ordine univoco
  • Test per checkout con carrello vuoto
  • File coinvolti: tests/ClaudeClothes.Tests/OrderServiceTests.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