Class ModuloService

java.lang.Object
com.modulink.Model.Modulo.ModuloService

@Service public class ModuloService extends Object
Service Layer responsabile della logica di business e della gestione dell'accesso ai Moduli.

Questa classe orchestra le operazioni relative ai moduli funzionali del sistema, integrando controlli di sicurezza (RBAC), gestione della cache per performance e sincronizzazione delle relazioni di pertinenza tra Aziende e Ruoli.

Fa ampio uso delle astrazioni di Caching di Spring (Cacheable, CacheEvict) per ridurre il carico sul database durante i frequenti controlli di autorizzazione.

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

  • Constructor Details

    • ModuloService

      public ModuloService(ModuloRepository moduloRepository, PertinenzaService pertinenzaService, AttivazioneService attivazioneService)
      Costruttore per Dependency Injection.
      Parameters:
      moduloRepository - Repository principale Moduli.
      pertinenzaService - Service per gestione pertinenze.
      attivazioneService - Service per gestione attivazioni.
      Since:
      1.0.0
  • Method Details

    • findModuliByUtente

      @Cacheable(value="moduliByUtente", key="#utente.email") public List<ModuloEntity> findModuliByUtente(UtenteEntity utente)
      Recupera la lista dei moduli accessibili da un utente, con supporto caching.

      Il risultato viene memorizzato nella cache moduliByUtente indicizzata dall'email utente. Questo evita di rieseguire la complessa query di join ad ogni visualizzazione della dashboard.

      Parameters:
      utente - L'utente richiedente.
      Returns:
      Lista di moduli abilitati.
      Since:
      1.2.0
    • isAccessibleModulo

      @Cacheable(value="moduloAccess", key="{#id, #utente.email}") public boolean isAccessibleModulo(int id, UtenteEntity utente)
      Verifica l'accessibilità puntuale di un modulo, con caching.

      Metodo ad alta frequenza di chiamata (es. nei filtri di sicurezza web). Il risultato booleano è cachato in moduloAccess con chiave composta {idModulo, email}.

      Parameters:
      id - ID del modulo.
      utente - L'utente da verificare.
      Returns:
      true se l'accesso è consentito, false altrimenti.
      Since:
      1.2.5
    • getModuloById

      @Cacheable(value="modulo", key="#idModulo") public ModuloEntity getModuloById(int idModulo)
      Recupera un modulo per ID, con caching.

      Poiché i metadati dei moduli (nome, descrizione, url) cambiano raramente, il caching riduce significativamente gli accessi al DB.

      Parameters:
      idModulo - ID del modulo.
      Returns:
      L'entità modulo.
      Throws:
      IllegalArgumentException - se l'ID non corrisponde a nessun modulo.
      Since:
      1.0.0
    • updateModuloAffiliations

      @Transactional @CacheEvict(value={"moduliByUtente","moduloAccess","modulo"}, allEntries=true) public void updateModuloAffiliations(AziendaEntity azienda, int idModulo, List<RuoloEntity> ruoli)
      Aggiorna le associazioni (Pertinenze) tra un Modulo e i Ruoli di un'Azienda.

      Questo metodo implementa una logica differenziale (Sync): 1. Identifica le associazioni esistenti. 2. Rimuove quelle non più presenti nella lista ruoli target. 3. Aggiunge le nuove associazioni mancanti.

      Gestione Cache: Essendo un'operazione che modifica i permessi, annotata con CacheEvict per invalidare tutte le entry delle cache correlate (moduliByUtente, moduloAccess, modulo), forzando il ricalcolo dei permessi al prossimo accesso.

      Parameters:
      azienda - L'azienda contesto dell'operazione.
      idModulo - L'ID del modulo da configurare.
      ruoli - La nuova lista completa dei ruoli abilitati per quel modulo in quell'azienda.
      Since:
      1.5.0