Class AttivazioneService

java.lang.Object
com.modulink.Model.Relazioni.Attivazione.AttivazioneService

@Service public class AttivazioneService extends Object
Service Layer responsabile della gestione del ciclo di vita delle attivazioni dei moduli.

Gestisce l'attivazione predefinita per i nuovi utenti, l'acquisto di nuovi moduli (con relativa assegnazione dei permessi al responsabile) e la dismissione (vendita) dei moduli con pulizia delle dipendenze. Integra la gestione della cache per garantire performance ottimali.

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

  • Constructor Details

    • AttivazioneService

      public AttivazioneService(AttivazioneRepository attivazioneRepository, ModuloRepository moduloRepository, PertinenzaRepository pertinenzaRepository, RuoloService ruoloService, AziendaRepository aziendaRepository)
      Costruttore per l'iniezione delle dipendenze.
      Parameters:
      attivazioneRepository - Repository delle attivazioni.
      moduloRepository - Repository dei moduli.
      pertinenzaRepository - Repository delle pertinenze (permessi).
      ruoloService - Service per la gestione ruoli.
      aziendaRepository - Repository delle aziende.
      Since:
      1.2.0
  • Method Details

    • getAttivazioneById

      public AttivazioneEntity getAttivazioneById(AttivazioneID attivazioneID)
      Recupera un'attivazione specifica tramite il suo ID composto.
      Parameters:
      attivazioneID - L'ID composto dell'attivazione.
      Returns:
      L'entità AttivazioneEntity trovata.
      Throws:
      IllegalArgumentException - se l'attivazione non viene trovata.
      Since:
      1.2.0
    • attivazioneDefault

      @Transactional public void attivazioneDefault(AziendaEntity aziendaEntity)
      Esegue l'attivazione dei moduli predefiniti (Core) per una nuova azienda.

      Viene chiamata tipicamente durante la fase di registrazione di un nuovo tenant. I moduli con ID 0, 1, 2, 3 e 9999 vengono assegnati automaticamente.

      Parameters:
      aziendaEntity - L'azienda appena creata.
      Since:
      1.2.0
    • getNotPurchased

      public List<ModuloEntity> getNotPurchased(AziendaEntity aziendaEntity)
      Restituisce la lista dei moduli disponibili per l'acquisto da parte di un'azienda.
      Parameters:
      aziendaEntity - L'azienda cliente.
      Returns:
      Lista di moduli non ancora attivi.
      Since:
      1.3.0
    • getAllPurchased

      public List<ModuloEntity> getAllPurchased(AziendaEntity aziendaEntity)
      Restituisce la lista dei moduli "Premium" acquistati dall'azienda (escludendo quelli core).
      Parameters:
      aziendaEntity - L'azienda cliente.
      Returns:
      Lista di moduli acquistati (filtrata dai moduli di sistema).
      Since:
      1.3.0
    • purchaseModulo

      @Transactional @CacheEvict(value={"moduliByUtente","moduloAccess","modulo"}, allEntries=true) public boolean purchaseModulo(AziendaEntity azienda, int moduloId)
      Gestisce la logica di acquisto di un nuovo modulo.

      Esegue i seguenti passaggi in transazione:

      1. Verifica l'esistenza e la visibilità del modulo.
      2. Controlla che non sia già attivo.
      3. Crea e salva l'entità AttivazioneEntity.
      4. Assegna automaticamente i permessi di gestione (Pertinenza) al Ruolo Responsabile dell'azienda.
      Invalida le cache relative ai moduli utente.
      Parameters:
      azienda - L'azienda acquirente.
      moduloId - L'ID del modulo da acquistare.
      Returns:
      true se l'operazione ha successo, false altrimenti.
      Since:
      2.0.0
    • sellModulo

      @Transactional @CacheEvict(value={"moduliByUtente","moduloAccess","modulo"}, allEntries=true) public boolean sellModulo(AziendaEntity azienda, int moduloId)
      Gestisce la dismissione (vendita/rimozione) di un modulo.

      Esegue una pulizia profonda per mantenere la coerenza dei dati:

      1. Verifica che il modulo sia effettivamente attivo.
      2. Rimuove tutte le PertinenzaEntity (permessi) associate a quel modulo per quell'azienda.
      3. Rimuove l'attivazione stessa.
      Gestisce con attenzione le collezioni Hibernate per evitare TransientObjectException.
      Parameters:
      azienda - L'azienda che dismette il modulo.
      moduloId - L'ID del modulo da rimuovere.
      Returns:
      true se l'operazione ha successo, false altrimenti.
      Since:
      2.1.0