Class PacchettoService

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

@Service public class PacchettoService extends Object
Service che gestisce il ciclo di vita dei Pacchetti (bundle).

Cosa fa: Fornisce metodi transazionali per creare, aggiornare, eliminare, recuperare e approvare pacchetti di prodotti.

Workflow e Logica:

  • Creazione: Un distributore può creare un pacchetto raggruppando più item. Il pacchetto viene creato in stato di "bozza" o "in revisione" (tramite ContentSubmission) e richiede l'approvazione di un Curatore per essere visibile nel catalogo pubblico.
  • Validazione: Si verifica che gli item inseriti nel pacchetto siano già stati approvati. Non è possibile vendere item non approvati all'interno di un pacchetto.
  • Aggiornamento: Se un pacchetto approvato viene modificato, il suo stato torna a essere "non approvato" (o in revisione) per richiedere una nuova validazione delle modifiche.
  • Sicurezza: Viene applicato un controllo di ownership tramite checkOwnershipOrAdmin per garantire che solo il proprietario (o un admin) possa modificare i propri pacchetti.
  • Constructor Details

    • PacchettoService

      public PacchettoService()
  • Method Details

    • creaPacchetto

      @Transactional public PacchettoResponse creaPacchetto(PacchettoRequest request)
      Crea un nuovo pacchetto e lo sottomette per l'approvazione.

      Cosa succede:

      1. Recupera il distributore e verifica i permessi.
      2. Crea l'entità Pacchetto con i dati di base (nome, descrizione, prezzo).
      3. Genera una ContentSubmission associata per gestire il workflow di approvazione.
      4. Itera sugli ID degli item forniti, verificando che ciascuno sia approvato, e crea le associazioni MarketplaceItemPacchetto.
      Parameters:
      request - DTO con i dati del nuovo pacchetto.
      Returns:
      DTO del pacchetto creato.
      Throws:
      RuntimeException - Se il distributore o un item non esistono.
      IllegalStateException - Se si tenta di inserire un item non approvato.
    • getAllPacchetti

      public List<PacchettoResponse> getAllPacchetti()
      Restituisce tutti i pacchetti approvati visibili nel marketplace.
      Returns:
      Lista di pacchetti approvati.
    • aggiornaPacchetto

      @Transactional public PacchettoResponse aggiornaPacchetto(Long id, PacchettoRequest request)
      Aggiorna un pacchetto esistente.

      Nota importante: Se il pacchetto era già approvato, la modifica ne invalida lo stato riportandolo in BOZZA (o IN_REVISIONE), richiedendo una nuova approvazione da parte di un Curatore.

      Parameters:
      id - ID del pacchetto da aggiornare.
      request - Nuovi dati del pacchetto.
      Returns:
      Il pacchetto aggiornato.
    • eliminaPacchetto

      @Transactional public void eliminaPacchetto(Long id)
      Elimina un pacchetto dal sistema.
      Parameters:
      id - ID del pacchetto.
    • getByDistributore

      public List<PacchettoResponse> getByDistributore(Long distributoreId)
      Recupera i pacchetti creati da un determinato distributore.
      Parameters:
      distributoreId - ID del distributore.
      Returns:
      Lista dei suoi pacchetti.
    • getPacchettiDaApprovare

      @Transactional(readOnly=true) public List<PacchettoResponse> getPacchettiDaApprovare()
      Recupera la lista dei pacchetti in attesa di approvazione per i Curatori.
      Returns:
      Lista di pacchetti in stato IN_REVISIONE.
    • approvaPacchetto

      @Transactional public void approvaPacchetto(Long id)
      Approva un pacchetto, rendendolo pubblico. Delega la logica al CurationService.
      Parameters:
      id - ID del pacchetto da approvare.