Class RuoloService

java.lang.Object
com.modulink.Model.Ruolo.RuoloService

@Service public class RuoloService extends Object
Service layer responsabile della gestione della logica di business per l'entità RuoloEntity.

Fornisce metodi per la manipolazione dei ruoli aziendali, la gestione delle associazioni tra ruoli e utenti, e l'inizializzazione dei ruoli predefiniti di sistema durante l'onboarding di una nuova azienda.

La classe gestisce la coerenza dei dati attraverso transazioni database (Transactional) e si interfaccia con CustomUserDetailsService per l'aggiornamento della sicurezza utente.

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

  • Constructor Details

    • RuoloService

      public RuoloService(RuoloRepository ruoloRepository, @Lazy CustomUserDetailsService customUserDetailsService)
      Costruttore per la Dependency Injection.

      Utilizza l'annotazione Lazy per CustomUserDetailsService per evitare problemi di dipendenze circolari durante il bootstrap del contesto Spring.

      Parameters:
      ruoloRepository - Repository per l'accesso ai dati dei ruoli.
      customUserDetailsService - Servizio per la gestione dei dettagli di sicurezza degli utenti.
      Since:
      1.0.0
  • Method Details

    • updateRoleAssociations

      @Transactional public void updateRoleAssociations(AziendaEntity azienda, int idRole, List<UtenteEntity> users)
      Sincronizza le associazioni tra un ruolo specifico e una lista di utenti fornita.

      Il metodo esegue una logica di aggiornamento completa: 1. Rimuove tutte le associazioni preesistenti per il ruolo indicato. 2. Pulisce i riferimenti incrociati nelle entità UtenteEntity. 3. Crea nuove istanze di AssociazioneEntity per ogni utente nella lista. 4. Notifica il servizio di sicurezza per ricaricare i permessi degli utenti coinvolti.

      Parameters:
      azienda - L'azienda in cui opera il ruolo.
      idRole - L'identificativo locale del ruolo da aggiornare.
      users - La lista aggiornata di utenti da associare al ruolo.
      Since:
      1.5.0
    • attivazioneDefault

      @Transactional public RuoloEntity attivazioneDefault(AziendaEntity aziendaEntity)
      Inizializza i ruoli di default necessari per il funzionamento di una nuova azienda.

      Crea i seguenti ruoli predefiniti:

      • ID 0: Responsabile (Amministratore con pieni poteri)
      • ID 1: Utente Nuovo (Profilo limitato per utenti non ancora validati)
      • ID 2: Utente (Profilo operativo standard)
      Parameters:
      aziendaEntity - L'entità dell'azienda appena registrata.
      Returns:
      L'entità del ruolo "Responsabile" appena creato.
      Since:
      1.1.0
    • getResponsabile

      public RuoloEntity getResponsabile(AziendaEntity azienda)
      Recupera il ruolo di "Responsabile" (ID 0) per l'azienda specificata.
      Parameters:
      azienda - L'azienda di riferimento.
      Returns:
      L'entità RuoloEntity corrispondente.
      Since:
      1.0.0
    • getNewUser

      public RuoloEntity getNewUser(AziendaEntity azienda)
      Recupera il ruolo di "Utente Nuovo" (ID 1) per l'azienda specificata.
      Parameters:
      azienda - L'azienda di riferimento.
      Returns:
      L'entità RuoloEntity corrispondente.
      Since:
      1.0.0
    • getStandardUser

      public RuoloEntity getStandardUser(AziendaEntity azienda)
      Recupera il ruolo di "Utente Standard" (ID 2) per l'azienda specificata.
      Parameters:
      azienda - L'azienda di riferimento.
      Returns:
      L'entità RuoloEntity corrispondente.
      Since:
      1.0.0
    • getAllRolesByAzienda

      public List<RuoloEntity> getAllRolesByAzienda(AziendaEntity azienda)
      Restituisce tutti i ruoli definiti all'interno di un contesto aziendale.
      Parameters:
      azienda - L'azienda proprietaria.
      Returns:
      Lista di tutti i ruoli trovati.
      Since:
      1.0.0
    • createRole

      @Transactional public RuoloEntity createRole(AziendaEntity azienda, RuoloEntity ruolo)
      Crea un nuovo ruolo personalizzato generandone l'ID in modo sequenziale.

      Calcola il nuovo ID incrementando il valore massimo attualmente presente per l'azienda.

      Parameters:
      azienda - L'azienda in cui creare il ruolo.
      ruolo - L'entità ruolo parzialmente popolata.
      Returns:
      L'entità del ruolo persistita con il nuovo ID assegnato.
      Since:
      1.3.0
    • updateRole

      @Transactional public RuoloEntity updateRole(AziendaEntity azienda, int idRole, String nome, String colore, String descrizione)
      Aggiorna i metadati di un ruolo esistente.
      Parameters:
      azienda - L'azienda di appartenenza.
      idRole - L'ID del ruolo da modificare.
      nome - Nuovo nome del ruolo.
      colore - Nuovo codice colore.
      descrizione - Nuova descrizione.
      Returns:
      L'entità aggiornata.
      Since:
      1.3.0
    • deleteRole

      @Transactional public void deleteRole(AziendaEntity azienda, int idRole)
      Elimina permanentemente un ruolo dal database.

      Impedisce la cancellazione dei ruoli di sistema (ID <= 2) per garantire la stabilità operativa. Prima dell'eliminazione, rimuove tutte le associazioni con gli utenti per evitare violazioni di integrità referenziale o eccezioni di tipo TransientObjectException.

      Parameters:
      azienda - L'azienda proprietaria.
      idRole - L'ID del ruolo da rimuovere.
      Throws:
      IllegalArgumentException - Se si tenta di eliminare un ruolo protetto di sistema.
      Since:
      1.6.0
    • getRoleById

      public RuoloEntity getRoleById(int idRole, AziendaEntity azienda)
      Cerca un ruolo specifico basandosi sulla chiave primaria composta.
      Parameters:
      idRole - L'identificativo numerico del ruolo.
      azienda - L'azienda associata.
      Returns:
      L'entità RuoloEntity trovata.
      Throws:
      IllegalArgumentException - Se il ruolo non esiste.
      Since:
      1.0.0
    • getAllRolesFromIds

      public List<RuoloEntity> getAllRolesFromIds(List<Integer> ids, int id_azienda) throws RuoloNotFoundException
      Recupera una lista di entità ruolo a partire da una collezione di ID.
      Parameters:
      ids - Collezione di identificativi numerici dei ruoli.
      id_azienda - L'ID dell'azienda di riferimento.
      Returns:
      Lista di RuoloEntity corrispondenti agli ID forniti.
      Throws:
      RuoloNotFoundException - Se anche uno solo degli ID non corrisponde ad alcun ruolo esistente.
      Since:
      1.2.0