Class ProdottoService

java.lang.Object
com.modulink.Model.Prodotto.ProdottoService

@Service public class ProdottoService extends Object
Service Layer responsabile della logica di business relativa alla gestione del magazzino prodotti.

Questa classe orchestra le operazioni CRUD sui prodotti, implementando regole specifiche per il multi-tenancy, come la generazione sequenziale degli ID per singola azienda e la validazione dell'appartenenza delle risorse.

Since:
1.2.0
Version:
1.6.2
Author:
Modulink Team
  • Field Details

    • prodottoRepository

      private final ProdottoRepository prodottoRepository
      Repository per l'accesso ai dati persistenti.
      Since:
      1.2.0
  • Constructor Details

    • ProdottoService

      public ProdottoService(ProdottoRepository prodottoRepository)
      Costruttore per Dependency Injection.
      Parameters:
      prodottoRepository - L'istanza iniettata del repository prodotti.
      Since:
      1.2.0
  • Method Details

    • save

      @Transactional public void save(ProdottoEntity prodotto)
      Crea e persiste un nuovo prodotto, calcolando automaticamente il prossimo ID disponibile.

      Questo metodo implementa una logica di autoincremento personalizzata per tenant. Esegue una query per trovare l'ID massimo corrente per l'azienda specificata e assegna al nuovo prodotto il valore MAX(ID) + 1. Se non esistono prodotti, l'ID parte da 0. L'operazione è atomica grazie all'annotazione Transactional.

      Parameters:
      prodotto - L'entità prodotto da salvare (con ID ancora non assegnato).
      Since:
      1.2.0
    • delete

      @Transactional public void delete(int idProdotto, AziendaEntity azienda) throws ProdottoNotFoundException
      Elimina un prodotto specifico dal sistema.

      Verifica preventivamente l'esistenza del prodotto tramite la chiave composta (ID + Azienda). Se il prodotto non viene trovato, viene sollevata un'eccezione controllata.

      Parameters:
      idProdotto - L'ID locale del prodotto da eliminare.
      azienda - L'azienda proprietaria (necessaria per completare la chiave primaria).
      Throws:
      ProdottoNotFoundException - Se il prodotto specificato non esiste per l'azienda data.
      Since:
      1.2.0
    • updateProdotto

      @Transactional public void updateProdotto(ProdottoEntity prodotto)
      Aggiorna i dati di un prodotto esistente.

      Utilizza CrudRepository.save(Object) che, in presenza di una chiave primaria valorizzata, esegue un merge dell'entità nel contesto di persistenza.

      Parameters:
      prodotto - L'entità prodotto con i dati aggiornati.
      Since:
      1.2.0
    • findAllByAzienda

      public List<ProdottoEntity> findAllByAzienda(AziendaEntity azienda)
      Recupera l'inventario completo dei prodotti di un'azienda.
      Parameters:
      azienda - L'azienda di riferimento.
      Returns:
      Lista di tutte le entità prodotto associate.
      Since:
      1.2.0
    • findAllCategoriesByAzienda

      public List<String> findAllCategoriesByAzienda(AziendaEntity azienda)
      Recupera l'elenco delle categorie merceologiche definite da un'azienda.
      Parameters:
      azienda - L'azienda di riferimento.
      Returns:
      Lista di stringhe univoche rappresentanti le categorie.
      Since:
      1.3.0
    • findById

      Cerca un singolo prodotto tramite la sua chiave primaria composta.
      Parameters:
      id - L'oggetto ProdottoID contenente ID locale e ID azienda.
      Returns:
      L'entità trovata.
      Throws:
      ProdottoNotFoundException - Se nessun record corrisponde alla chiave fornita.
      Since:
      1.2.0
    • deleteAllByAzienda

      @Transactional public void deleteAllByAzienda(AziendaEntity azienda)
      Rimuove tutti i prodotti associati a un'azienda.

      Esegue una cancellazione massiva e forza il flush del contesto di persistenza per rendere effettive le modifiche immediatamente.

      Parameters:
      azienda - L'azienda target della pulizia.
      Since:
      1.4.0