Class AziendaService

java.lang.Object
com.modulink.Model.Azienda.AziendaService

@Service public class AziendaService extends Object
Service Layer incaricato dell'implementazione della logica di business per il dominio Azienda.

Questa classe orchestra le interazioni tra i controller REST/MVC e il layer di persistenza (AziendaRepository). Gestisce i confini transazionali, l'aggregazione dei dati e l'applicazione di regole di validazione business-specific (es. unicità P.IVA, formati contatti).

Le operazioni di modifica (scrittura/aggiornamento/cancellazione) sono annotate con Transactional per garantire l'atomicità e la coerenza (ACID properties), delegando al container Spring la gestione del rollback in caso di eccezioni runtime.

Since:
1.0.0
Version:
1.6.0
Author:
Modulink Team
  • Field Details

  • Constructor Details

    • AziendaService

      public AziendaService(AziendaRepository aziendaRepository)
      Costruttore per Dependency Injection (Constructor Injection).

      Spring IoC Container inietta automaticamente l'istanza singleton di AziendaRepository. Questo approccio favorisce l'immutabilità e facilita il testing unitario tramite mock.

      Parameters:
      aziendaRepository - L'interfaccia DAO per l'accesso ai dati.
      Since:
      1.0.0
  • Method Details

    • getAziendaByPIVA

      public AziendaEntity getAziendaByPIVA(String piva)
      Recupera un'entità azienda in base alla Partita IVA.

      Esegue una lookup ottimizzata tramite indice univoco. Il metodo effettua l'unwrapping dell'Optional restituito dal repository.

      Parameters:
      piva - La stringa contenente la P.IVA target.
      Returns:
      L'istanza di AziendaEntity se presente, altrimenti null.
      Since:
      1.0.0
      See Also:
    • registraAzienda

      @Transactional public AziendaEntity registraAzienda(AziendaEntity azienda)
      Persiste una nuova anagrafica aziendale nel sistema.

      L'operazione è transazionale: in caso di violazione di vincoli (es. duplicate key exception su P.IVA) l'intera transazione viene annullata. L'ID viene generato automaticamente dal database (IDENTITY strategy) al momento del flush.

      Parameters:
      azienda - L'oggetto DTO/Entity popolato con i dati di registrazione.
      Returns:
      L'entità persistita (attached state) aggiornata con l'ID generato.
      Since:
      1.0.0
    • findByTelefono

      public boolean findByTelefono(String telefono)
      Verifica l'esistenza di un vincolo di unicità sul numero di telefono.

      Utilizzato tipicamente dai validator dei form di registrazione per fornire feedback immediato all'utente (fail-fast).

      Parameters:
      telefono - Il recapito telefonico da controllare.
      Returns:
      true se il telefono è già presente in DB, false altrimenti.
      Since:
      1.2.5
    • getAllAziende

      public List<AziendaEntity> getAllAziende()
      Recupera l'elenco completo di tutte le aziende registrate nel sistema.

      Attenzione: Questo metodo può generare carichi elevati su database popolati. Considerare l'uso di paginazione per dataset estesi.

      Returns:
      Una List contenente tutte le entità azienda.
      Since:
      1.1.0
    • getAziendaById

      public Optional<AziendaEntity> getAziendaById(int id)
      Lookup di un'azienda tramite la sua chiave primaria (ID).
      Parameters:
      id - L'identificativo intero dell'azienda.
      Returns:
      Un Optional popolato se l'ID è valido, vuoto altrimenti.
      Since:
      1.0.0
    • updateAzienda

      @Transactional public AziendaEntity updateAzienda(AziendaEntity azienda)
      Esegue l'aggiornamento (UPDATE) dei dati aziendali.

      Il metodo utilizza CrudRepository.save(Object) che, in contesto JPA, esegue un merge se l'entità possiede un ID esistente. Richiede un contesto transazionale attivo.

      Parameters:
      azienda - L'entità con i dati modificati.
      Returns:
      L'entità aggiornata e sincronizzata col DB.
      Since:
      1.4.0
    • deleteAzienda

      @Transactional public void deleteAzienda(int id)
      Rimuove fisicamente (HARD DELETE) un'azienda dal sistema.

      Questa operazione è irreversibile e potrebbe scatenare cancellazioni a cascata se configurate a livello di database (FK constraints con ON DELETE CASCADE).

      Parameters:
      id - L'ID dell'azienda da eliminare.
      Throws:
      org.springframework.dao.EmptyResultDataAccessException - se l'entità non esiste.
      Since:
      1.5.0