Class RegisterController

java.lang.Object
com.modulink.Controller.Register.RegisterController

@Controller @SessionAttributes("registerAziendaForm") public class RegisterController extends Object
Controller Spring MVC che gestisce il flusso di registrazione (Onboarding) di una nuova Azienda e del suo Responsabile.

Il processo è strutturato come un Wizard in due passaggi:

  1. Registrazione dati Azienda (Anagrafica, Logo, P.IVA, Contatti).
  2. Registrazione dati Utente Responsabile (Credenziali, Profilo).

La classe utilizza l'annotazione SessionAttributes per mantenere persistente l'oggetto RegisterAziendaForm tra le varie richieste HTTP finché l'intero processo non viene completato.

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

  • Constructor Details

    • RegisterController

      public RegisterController(CustomUserDetailsService userDetailsService, AziendaService aziendaService, RuoloService ruoloService, AssociazioneService associazioneService, AttivazioneService attivazioneService, PertinenzaService pertinenzaService)
      Costruttore per l'iniezione delle dipendenze.
      Parameters:
      userDetailsService - Servizio gestione utenti.
      aziendaService - Servizio gestione aziende.
      ruoloService - Servizio gestione ruoli.
      associazioneService - Servizio associazione utente-ruolo.
      attivazioneService - Servizio attivazione moduli.
      pertinenzaService - Servizio permessi moduli.
      Since:
      1.0.0
  • Method Details

    • showRegistrationForm

      @GetMapping("/register") public String showRegistrationForm(org.springframework.ui.Model model, Principal principal)
      Inizializza il processo di registrazione (Step 1).

      Se l'utente è già autenticato, viene reindirizzato alla home. Altrimenti, inizializza il form per i dati aziendali.

      Parameters:
      model - Il modello per la vista.
      principal - L'utente attualmente loggato (se presente).
      Returns:
      Il nome della vista Thymeleaf per la registrazione azienda.
      Since:
      1.0.0
    • registerAzienda

      @PostMapping("/register") public String registerAzienda(org.springframework.ui.Model model, Principal principal, @Valid @ModelAttribute("registerAziendaForm") @Valid RegisterAziendaForm registerAziendaForm, org.springframework.validation.BindingResult bindingResult) throws IOException
      Elabora i dati dell'Azienda inviati (Step 1 -> Step 2).

      Esegue le seguenti operazioni:

      • Validazione formale dei dati (JSR-380).
      • Verifica univocità della Partita IVA nel database.
      • Normalizzazione del numero di telefono (rimozione spazi bianchi) e verifica della sua univocità nel sistema.
      • Conversione temporanea del file Logo in array di byte per conservarlo in sessione.
      Se tutto è corretto, prepara il model per il secondo step (Registrazione Utente).
      Parameters:
      model - Il modello per la vista.
      principal - L'utente loggato.
      registerAziendaForm - Il DTO popolato con i dati dell'azienda.
      bindingResult - Risultato della validazione.
      Returns:
      La vista successiva (RegistraUtente) o la stessa in caso di errori.
      Throws:
      IOException - Se si verifica un errore nella lettura del file logo.
      Since:
      1.0.0
    • redirectToRegisterUtente

      @GetMapping("/register-utente") public String redirectToRegisterUtente()
      Gestisce i tentativi di accesso diretto allo Step 2 via GET.

      Reindirizza sempre all'inizio del processo per garantire che i dati aziendali siano presenti.

      Returns:
      Redirect alla pagina di registrazione principale.
      Since:
      1.0.0
    • registerUtente

      @PostMapping("/register-utente") public String registerUtente(@ModelAttribute("registerAziendaForm") RegisterAziendaForm registerAziendaForm, org.springframework.ui.Model model, Principal principal, @Valid @ModelAttribute("registerUtenteForm") @Valid RegisterResponsabileForm registerUtenteForm, org.springframework.validation.BindingResult bindingResult, org.springframework.web.bind.support.SessionStatus sessionStatus) throws IOException
      Finalizza la registrazione completa (Azienda + Responsabile).

      Metodo annotato come Transactional: garantisce che il salvataggio di Azienda, Utente, Ruolo e Associazione avvenga in modo atomico (tutto o niente).

      Flusso operativo:

      1. Verifica congruenza password e univocità email.
      2. Salvataggio fisico del logo Azienda su filesystem.
      3. Persistenza AziendaEntity.
      4. Salvataggio fisico foto profilo Utente su filesystem.
      5. Persistenza UtenteEntity (con password hashata).
      6. Creazione e assegnazione automatica del ruolo "Responsabile".
      7. Pulizia della sessione (rimozione attributi temporanei).
      Parameters:
      registerAziendaForm - DTO Azienda recuperato dalla sessione.
      model - Il modello.
      principal - L'utente loggato.
      registerUtenteForm - DTO Utente inviato dal form.
      bindingResult - Risultati validazione utente.
      sessionStatus - Oggetto per segnare la sessione come completata.
      Returns:
      Redirect alla pagina di login in caso di successo.
      Throws:
      IOException - Se fallisce la scrittura dei file su disco.
      Since:
      1.0.0