Class OrdineService

java.lang.Object
it.unicam.cs.ids2425.FilieraAgricola.service.OrdineService

@Service public class OrdineService extends Object
Service per la gestione degli ordini d'acquisto.

Cosa fa: Si occupa di tradurre un carrello (checkout) in un ordine effettivo salvato nel database. Gestisce il recupero dei dati, la creazione delle righe d'ordine (OrderLine) e il calcolo del totale utilizzando il PricingStrategyFactory.

Workflow:

  1. Riceve un DTO di checkout contenente liste di ID (item e pacchetti) e quantità.
  2. Recupera le entità corrispondenti dal database.
  3. Crea per ciascuna entrata una OrderLine, "congelando" il prezzo attuale.
  4. Calcola il totale progressivo delegando alla Factory dei prezzi.
  5. Salva l'ordine completo con tutte le sue righe.
  • Constructor Details

    • OrdineService

      public OrdineService()
  • Method Details

    • creaOrdineDaCheckout

      @Transactional public OrdineResponse creaOrdineDaCheckout(Long utenteId, CarrelloCheckoutDTO request)
      Trasforma i dati provenienti dal carrello (frontend) in un Ordine persistente.

      Cosa succede: Il metodo itera separatamente sugli articoli singoli e sui pacchetti presenti nel DTO. Per ogni elemento:

      • Recupera l'entità dal DB.
      • Istanzia una OrderLine associandola all'ordine in creazione.
      • Imposta il prezzo d'acquisto corrente (snapshot storico).
      • Usa PricingStrategyFactory per calcolare il subtotale della riga in base al tipo (Item o Pacchetto).
      Infine, somma i subtotali nel totale dell'ordine e salva tutto.
      Parameters:
      utenteId - ID dell'acquirente che sta effettuando l'ordine.
      request - DTO contenente gli articoli e i pacchetti selezionati nel carrello.
      Returns:
      DTO dell'ordine appena creato e salvato.
      Throws:
      RuntimeException - Se l'utente, un articolo o un pacchetto non esistono.
    • getOrdiniByUtente

      public List<OrdineResponse> getOrdiniByUtente(Long id)
      Recupera lo storico degli ordini effettuati da un utente specifico.
      Parameters:
      id - ID dell'acquirente.
      Returns:
      Lista di ordini.
    • aggiornaStato

      @Transactional public void aggiornaStato(Long idOrdine, String nuovoStato)
      Modifica lo stato di avanzamento di un ordine (es. DA PAGATO a SPEDITO).
      Parameters:
      idOrdine - ID dell'ordine.
      nuovoStato - Stringa rappresentante il valore dell'enum StatoOrdine.
      Throws:
      RuntimeException - Se l'ordine non esiste o lo stato non è valido.