Class ProdottoService
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 Summary
FieldsModifier and TypeFieldDescriptionprivate final ProdottoRepositoryRepository per l'accesso ai dati persistenti. -
Constructor Summary
ConstructorsConstructorDescriptionProdottoService(ProdottoRepository prodottoRepository) Costruttore per Dependency Injection. -
Method Summary
Modifier and TypeMethodDescriptionvoiddelete(int idProdotto, AziendaEntity azienda) Elimina un prodotto specifico dal sistema.voiddeleteAllByAzienda(AziendaEntity azienda) Rimuove tutti i prodotti associati a un'azienda.findAllByAzienda(AziendaEntity azienda) Recupera l'inventario completo dei prodotti di un'azienda.findAllCategoriesByAzienda(AziendaEntity azienda) Recupera l'elenco delle categorie merceologiche definite da un'azienda.findById(ProdottoID id) Cerca un singolo prodotto tramite la sua chiave primaria composta.voidsave(ProdottoEntity prodotto) Crea e persiste un nuovo prodotto, calcolando automaticamente il prossimo ID disponibile.voidupdateProdotto(ProdottoEntity prodotto) Aggiorna i dati di un prodotto esistente.
-
Field Details
-
prodottoRepository
Repository per l'accesso ai dati persistenti.- Since:
- 1.2.0
-
-
Constructor Details
-
ProdottoService
Costruttore per Dependency Injection.- Parameters:
prodottoRepository- L'istanza iniettata del repository prodotti.- Since:
- 1.2.0
-
-
Method Details
-
save
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'annotazioneTransactional.- 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
Aggiorna i dati di un prodotto esistente.Utilizza
CrudRepository.save(Object)che, in presenza di una chiave primaria valorizzata, esegue unmergedell'entità nel contesto di persistenza.- Parameters:
prodotto- L'entità prodotto con i dati aggiornati.- Since:
- 1.2.0
-
findAllByAzienda
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
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'oggettoProdottoIDcontenente ID locale e ID azienda.- Returns:
- L'entità trovata.
- Throws:
ProdottoNotFoundException- Se nessun record corrisponde alla chiave fornita.- Since:
- 1.2.0
-
deleteAllByAzienda
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
-