Class DataInitializerService

java.lang.Object
com.modulink.DatabasePopulator.DataInitializerService

@Service public class DataInitializerService extends Object
Servizio di dominio responsabile dell'inizializzazione e del popolamento del database con dati di seed.

Questa classe agisce come un Seeder applicativo, orchestrando la creazione di entità complesse come aziende, utenti, ruoli e moduli preconfigurati. È progettata per essere eseguita in fase di startup (tipicamente in ambienti di sviluppo o per la prima installazione) per garantire la presenza di un set minimo di dati coerenti necessari per il funzionamento e il collaudo della piattaforma Modulink.

La classe gestisce dipendenze multiple verso repository e servizi di dominio per assicurare che le relazioni tra entità (es. associazioni utente-ruolo, attivazioni moduli-azienda) siano persistite rispettando i vincoli di integrità referenziale.

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

  • Constructor Details

    • DataInitializerService

      public DataInitializerService(AziendaService aziendaService, CustomUserDetailsService customUserDetailsService, RuoloRepository ruoloRepository, AssociazioneRepository associazioneRepository, ModuloRepository moduloRepository, AttivazioneRepository attivazioneRepository, PertinenzaRepository pertinenzaRepository, EventoService eventoService, PartecipazioneRepository partecipazioneRepository, AttivazioneService attivazioneService, TaskService taskService, ProdottoService prodottoService)
      Costruttore per l'iniezione delle dipendenze richieste dal contesto Spring.

      Utilizza la Constructor Injection per garantire che il servizio sia istanziato solo quando tutti i collaboratori necessari (Service e Repository) sono disponibili.

      Parameters:
      aziendaService - Servizio per la gestione delle anagrafiche aziendali.
      customUserDetailsService - Servizio per la gestione e autenticazione degli utenti.
      ruoloRepository - Repository per la persistenza dei ruoli aziendali.
      associazioneRepository - Repository per associare utenti ai ruoli.
      moduloRepository - Repository per la gestione del catalogo moduli.
      attivazioneRepository - Repository per attivare moduli specifici per le aziende.
      pertinenzaRepository - Repository per definire i permessi (pertinenze) ruolo-modulo.
      eventoService - Servizio per la gestione del calendario ed eventi.
      partecipazioneRepository - Repository per gestire i partecipanti agli eventi.
      attivazioneService - Servizio di dominio per logiche complesse di attivazione moduli.
      taskService - Servizio per la gestione delle attività (Task).
      prodottoService - Servizio per la gestione del magazzino prodotti.
  • Method Details

    • addDemoAzienda

      public void addDemoAzienda()
      Genera e persiste un set di dati dimostrativi per aziende fittizie ("Tech Solutions" e "Green Energy").

      Questo metodo simula uno scenario operativo realistico creando:

      • Aziende con profili completi.
      • Utenti con diversi livelli di accesso (Admin, User, Manager, Tech).
      • Ruoli specifici per azienda con colori e descrizioni personalizzate.
      • Attivazione di sottoinsiemi di moduli (GTM, GDM, Calendario) differenziati per azienda.
      • Dati operativi come Prodotti di magazzino, Task assegnati e Eventi in calendario.
      È utile per verificare il comportamento dell'applicazione in scenari multi-tenant.
      Since:
      1.0.0
    • addModulinkAzienda

      public void addModulinkAzienda()
      Inizializza l'azienda principale "ModuLink" con la configurazione completa di sistema.

      Questo metodo crea l'entità aziendale master e registra gli utenti amministratori/fondatori (es. team di sviluppo). Inoltre:

      • Definisce il catalogo completo dei moduli disponibili nel sistema (News, Supporto, Admin, GDU, GRU, GMA, ecc.).
      • Configura i ruoli gerarchici di base (Responsabile, Utente Nuovo, Utente Standard).
      • Attiva tutti i moduli per l'azienda master per scopi di amministrazione globale.
      • Assegna le pertinenze complete al ruolo Responsabile per la gestione totale della piattaforma.
      Questa configurazione è essenziale per il funzionamento del pannello di controllo Super-Admin.
      Since:
      1.0.0
    • runInitialization

      @Transactional public void runInitialization()
      Esegue la sequenza completa di inizializzazione dei dati.

      Questo metodo agisce come entry point transazionale per il popolamento del DB. L'annotazione Transactional assicura che l'intera procedura sia atomica: in caso di errore runtime durante una qualsiasi delle fasi (creazione Modulink o aziende demo), viene eseguito il rollback completo per evitare stati inconsistenti del database.

      Sequenza operativa:

      1. Creazione azienda Modulink e moduli di sistema.
      2. Creazione aziende demo e dati operativi correlati.
      Since:
      1.0.0