Skip to content

DoubleStar93/LunaExample

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌙 LunaRecruiting - Sistema di Gestione del Recruiting

Sistema completo per la gestione del processo di recruiting sviluppato con Spring Boot. Permette di gestire posizioni lavorative, candidati, requisiti strutturati e valutazioni pesate per identificare il miglior candidato per ogni posizione.

📋 Indice

✨ Caratteristiche Principali

🔐 Autenticazione e Autorizzazione

  • Sistema di login con Spring Security
  • Gestione ruoli: ADMIN, USER, CANDIDATE
  • Password crittografate con BCrypt
  • Protezione delle route basata sui ruoli
  • Form di registrazione pubblica (crea utenti con ruolo USER)

👥 Gestione Candidati

  • CRUD completo per i candidati
  • Creazione automatica di utenti con ruolo CANDIDATE quando un admin aggiunge manualmente un candidato
  • Associazione candidati a posizioni lavorative
  • Filtri per stato (PENDING, REVIEWING, ACCEPTED, REJECTED)
  • Visualizzazione dettagliata con posizioni associate

💼 Gestione Posizioni Lavorative

  • Creazione e modifica di posizioni lavorative
  • Requisiti strutturati con peso (1-10) e categoria
  • Requisiti in testo libero per compatibilità
  • Informazioni complete: dipartimento, località, tipo di lavoro, stipendio, benefici
  • Filtri per stato (OPEN, CLOSED, ON_HOLD)

📊 Sistema di Valutazione

  • Tabella di valutazione interattiva per valutare tutti i candidati su tutti i requisiti
  • Sistema di punteggio pesato: somma(score × peso) / somma(pesi)
  • Valutazione da 0 a 10 per ogni requisito
  • Note aggiuntive per ogni valutazione
  • Salvataggio multiplo delle valutazioni

🏆 Recap e Analisi

  • Calcolo automatico del punteggio totale per ogni candidato
  • Identificazione del miglior candidato (punteggio più alto)
  • Visualizzazione del numero di requisiti valutati vs totali
  • Ordinamento automatico per punteggio decrescente

🛠 Tecnologie Utilizzate

  • Java 17 - Linguaggio di programmazione
  • Spring Boot 3.2.0 - Framework principale
  • Spring Security - Autenticazione e autorizzazione
  • Spring Data JPA - Persistenza dei dati
  • MySQL - Database relazionale
  • Thymeleaf - Template engine per le viste
  • Maven - Gestione dipendenze e build
  • BCrypt - Crittografia password
  • Hibernate - ORM per JPA

📦 Prerequisiti

  • Java 17 o superiore
  • Maven 3.6+ (o Maven Daemon - mvnd)
  • MySQL 8.0+ installato e configurato
  • IDE (IntelliJ IDEA, Eclipse, VS Code) - opzionale

⚙️ Installazione e Configurazione

1. Clonare il Repository

git clone <repository-url>
cd LunaExample

2. Configurare MySQL

Creare un database MySQL:

CREATE DATABASE luna_recruiting CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3. Configurare application.properties

Il file src/main/resources/application.properties contiene già la configurazione per MySQL. Verificare che le credenziali corrispondano al tuo ambiente:

spring.datasource.url=jdbc:mysql://localhost:3306/luna_recruiting
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

4. Configurare Variabili d'Ambiente (Windows PowerShell)

$env:JAVA_HOME = "C:\Program Files\Java\jdk-25"
$env:MAVEN_HOME = "C:\Program Files\maven-mvnd-1.0.3-windows-amd64"
$env:PATH = "$env:MAVEN_HOME\bin;$env:PATH"

🚀 Avvio dell'Applicazione

Con Maven Daemon (mvnd) - Consigliato

mvnd spring-boot:run

Con Maven Standard

mvn clean install
mvn spring-boot:run

Da IDE

Eseguire la classe principale: com.example.luna.LunaExampleApplication

L'applicazione sarà disponibile su: http://localhost:8080

📁 Struttura del Progetto

src/
├── main/
│   ├── java/com/example/luna/
│   │   ├── LunaExampleApplication.java          # Classe principale
│   │   ├── config/
│   │   │   ├── SecurityConfig.java              # Configurazione Spring Security
│   │   │   └── DataInitializer.java             # Inizializzazione dati di default
│   │   ├── controller/
│   │   │   ├── LoginController.java             # Gestione login/home
│   │   │   ├── SignupController.java           # Registrazione utenti
│   │   │   ├── CandidateController.java        # CRUD candidati
│   │   │   ├── JobPositionController.java      # CRUD posizioni lavorative
│   │   │   ├── EvaluationController.java       # Gestione valutazioni
│   │   │   └── CandidateJobPositionController.java # Associazioni candidato-posizione
│   │   ├── service/
│   │   │   ├── UserService.java                 # Logica utenti
│   │   │   ├── CandidateService.java            # Logica candidati
│   │   │   ├── JobPositionService.java          # Logica posizioni
│   │   │   ├── EvaluationService.java           # Logica valutazioni
│   │   │   ├── CandidateJobPositionService.java # Logica associazioni
│   │   │   └── CustomUserDetailsService.java    # UserDetailsService personalizzato
│   │   ├── repository/
│   │   │   ├── UserRepository.java
│   │   │   ├── RoleRepository.java
│   │   │   ├── CandidateRepository.java
│   │   │   ├── JobPositionRepository.java
│   │   │   ├── RequirementRepository.java
│   │   │   ├── EvaluationRepository.java
│   │   │   └── CandidateJobPositionRepository.java
│   │   ├── model/entity/
│   │   │   ├── User.java                        # Entità utente
│   │   │   ├── Role.java                        # Entità ruolo
│   │   │   ├── Candidate.java                   # Entità candidato
│   │   │   ├── JobPosition.java                 # Entità posizione lavorativa
│   │   │   ├── Requirement.java                 # Entità requisito
│   │   │   ├── Evaluation.java                  # Entità valutazione
│   │   │   └── CandidateJobPosition.java        # Entità associazione
│   │   └── dto/
│   │       ├── SignupRequest.java               # DTO registrazione
│   │       ├── CandidateRequest.java             # DTO candidato
│   │       ├── JobPositionRequest.java          # DTO posizione
│   │       ├── EvaluationRequest.java           # DTO valutazione
│   │       └── CandidateScoreDTO.java          # DTO punteggio candidato
│   └── resources/
│       ├── application.properties                # Configurazione applicazione
│       └── templates/                           # Template Thymeleaf
│           ├── login.html
│           ├── signup.html
│           ├── home.html
│           ├── candidates/
│           │   ├── list.html
│           │   ├── view.html
│           │   ├── form.html
│           │   └── evaluate.html
│           └── job-positions/
│               ├── list.html
│               ├── view.html
│               └── form.html
└── test/
    └── java/com/example/luna/                   # Test (da implementare)

🗄 Entità del Database

User (Utenti)

  • Gestisce gli utenti del sistema
  • Implementa UserDetails per Spring Security
  • Relazione Many-to-Many con Role

Role (Ruoli)

  • ADMIN: Accesso completo al sistema
  • USER: Utente registrato (diventa automaticamente candidato)
  • CANDIDATE: Candidato aggiunto manualmente da admin

Candidate (Candidati)

  • Informazioni personali (nome, cognome, email, telefono, indirizzo)
  • CV/Resume
  • Stato (PENDING, REVIEWING, ACCEPTED, REJECTED)
  • Note aggiuntive

JobPosition (Posizioni Lavorative)

  • Titolo, descrizione, dipartimento, località
  • Tipo di lavoro (FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP)
  • Stato (OPEN, CLOSED, ON_HOLD)
  • Stipendio minimo/massimo
  • Benefici
  • Relazione Many-to-Many con Requirement

Requirement (Requisiti)

  • Nome e descrizione
  • Categoria (TECHNICAL, SOFT_SKILLS, EDUCATION, EXPERIENCE, CERTIFICATION)
  • Peso (1-10) per il calcolo del punteggio pesato

Evaluation (Valutazioni)

  • Associa Candidato, Posizione Lavorativa e Requisito
  • Score (0-10)
  • Note aggiuntive
  • Data e autore della valutazione

CandidateJobPosition (Associazioni)

  • Associa un Candidato a una Posizione Lavorativa
  • Stato dell'applicazione (APPLIED, SHORTLISTED, INTERVIEWED, OFFERED, REJECTED)
  • Note aggiuntive
  • Data di applicazione

🎯 Funzionalità Implementate

1. Autenticazione e Registrazione

  • ✅ Pagina di login con form-based authentication
  • ✅ Form di registrazione pubblica
  • ✅ Creazione automatica di Candidate quando un USER si registra
  • ✅ Dashboard personalizzata per ruolo ADMIN

2. Gestione Candidati

  • ✅ Lista candidati con filtri per stato
  • ✅ Creazione nuovo candidato (crea anche User con ruolo CANDIDATE)
  • ✅ Visualizzazione dettagli candidato
  • ✅ Associazione candidato a posizioni lavorative
  • ✅ Visualizzazione posizioni associate

3. Gestione Posizioni Lavorative

  • ✅ Lista posizioni con filtri per stato
  • ✅ Creazione posizione con requisiti strutturati dinamici
  • ✅ Modifica posizione esistente
  • ✅ Visualizzazione dettagli con requisiti e peso
  • ✅ Gestione candidati associati direttamente dalla pagina posizione

4. Sistema di Valutazione

  • ✅ Tabella interattiva per valutare tutti i candidati su tutti i requisiti
  • ✅ Input score (0-10) e note per ogni combinazione candidato-requisito
  • ✅ Salvataggio multiplo di tutte le valutazioni
  • ✅ Calcolo automatico punteggio pesato: Σ(score × peso) / Σ(pesi)
  • ✅ Visualizzazione valutazioni esistenti precompilate

5. Recap e Analisi

  • ✅ Sezione recap con punteggio totale per ogni candidato
  • ✅ Identificazione automatica del miglior candidato
  • ✅ Visualizzazione numero requisiti valutati vs totali
  • ✅ Ordinamento automatico per punteggio decrescente
  • ✅ Badge visivi per il miglior candidato

🔑 Credenziali di Default

All'avvio dell'applicazione vengono creati automaticamente:

Admin

  • Username: admin
  • Password: admin123
  • Ruolo: ADMIN

User Demo

  • Username: user
  • Password: user123
  • Ruolo: USER

🌐 URL e Endpoint

Pagine Web (Thymeleaf)

API REST

  • Hello: GET /api/hello - Endpoint di test
  • Test Database: GET /api/test/database - Test connessione database

Endpoint Protetti (Richiedono autenticazione ADMIN)

  • Tutti gli endpoint di gestione candidati (/candidates/**)
  • Tutti gli endpoint di gestione posizioni (/job-positions/**)
  • Endpoint di valutazione (/evaluations/**)
  • Endpoint di associazione (/candidate-job-positions/**)

🔒 Sicurezza

  • Spring Security configurato con form-based authentication
  • BCrypt per hash delle password
  • Protezione CSRF abilitata
  • Autorizzazione basata su ruoli con @PreAuthorize
  • UserDetailsService personalizzato per autenticazione database-backed
  • Session management configurato

Route Pubbliche

  • /login - Pagina di login
  • /signup - Registrazione utenti
  • /api/test/** - Endpoint di test
  • /api/db/** - Endpoint di test database

Route Protette

  • /home - Dashboard (richiede autenticazione)
  • /candidates/** - Gestione candidati (richiede ruolo ADMIN)
  • /job-positions/** - Gestione posizioni (richiede ruolo ADMIN)
  • /evaluations/** - Valutazioni (richiede ruolo ADMIN)

💡 Sviluppo e Best Practices

Comandi Maven Utili

# Compilare il progetto
mvnd clean compile

# Eseguire i test
mvnd test

# Creare il JAR
mvnd clean package

# Avviare l'applicazione
mvnd spring-boot:run

Riavvio Server dopo Modifiche Grafiche

IMPORTANTE: Dopo ogni modifica a file HTML/Template/Thymeleaf, è necessario riavviare il server:

# 1. Ferma il processo sulla porta 8080
netstat -ano | findstr :8080 | Select-Object -First 1 | ForEach-Object { $_.Split()[-1] } | ForEach-Object { taskkill /PID $_ /F }

# 2. Attendi qualche secondo
Start-Sleep -Seconds 3

# 3. Riavvia l'applicazione
mvnd spring-boot:run

Struttura del Codice

  • Controller: Gestiscono le richieste HTTP e restituiscono viste o JSON
  • Service: Contengono la logica di business
  • Repository: Interfacce Spring Data JPA per accesso ai dati
  • Entity: Modelli JPA per le tabelle del database
  • DTO: Data Transfer Objects per trasferire dati tra layer
  • Config: Classi di configurazione (Security, Data initialization)

Convenzioni

  • Naming: PascalCase per classi, camelCase per metodi e variabili
  • Package: Struttura gerarchica per organizzazione logica
  • Validazione: Uso di @Valid e annotazioni Bean Validation
  • Transazioni: @Transactional per operazioni database
  • Sicurezza: @PreAuthorize per controllo accesso a livello metodo

📝 Note Importanti

  1. Database: Il sistema usa MySQL. Assicurarsi che il database sia creato prima dell'avvio.
  2. Migrazione: Le tabelle vengono create automaticamente con spring.jpa.hibernate.ddl-auto=update
  3. Password: Le password vengono hashate con BCrypt prima del salvataggio
  4. Ruoli: I ruoli vengono inizializzati automaticamente all'avvio
  5. Candidati: Quando un USER si registra, viene creato automaticamente un Candidate associato

🚧 Funzionalità Future (Da Implementare)

  • Export valutazioni in PDF/Excel
  • Notifiche email per candidati
  • Dashboard con statistiche avanzate
  • Ricerca avanzata candidati e posizioni
  • Upload e gestione CV/Resume
  • Sistema di commenti e note temporali
  • API REST complete per integrazione esterna
  • Test unitari e di integrazione
  • Logging avanzato e monitoring
  • Supporto multi-lingua

📄 Licenza

Questo progetto è stato sviluppato per scopi educativi e dimostrativi.

👥 Autore

Sviluppato con Spring Boot 3.2.0 e Java 17.


LunaRecruiting - Sistema completo per la gestione del processo di recruiting 🚀

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors