5.7 KiB
5.7 KiB
👷 CONCEPT: EMPLOYE
📌 Vue d'ensemble
Le concept EMPLOYE gère les ressources humaines : employés, compétences, équipes, et affectations aux chantiers.
Importance: ⭐⭐⭐⭐ (Concept stratégique)
🗂️ Fichiers concernés
Entités JPA
| Fichier | Description |
|---|---|
Employe.java |
Entité principale employé |
EmployeCompetence.java |
Compétences d'un employé |
FonctionEmploye.java |
Enum fonctions |
StatutEmploye.java |
Enum (ACTIF, CONGE, ARRET_MALADIE, FORMATION, INACTIF) |
NiveauCompetence.java |
Enum niveaux de compétence |
Equipe.java |
Entité équipe |
StatutEquipe.java |
Enum (ACTIVE, INACTIVE, EN_MISSION, DISPONIBLE) |
Services
| Fichier | Description |
|---|---|
EmployeService.java |
Service métier employés |
EquipeService.java |
Service métier équipes |
Resources
| Fichier | Description |
|---|---|
EmployeResource.java |
API REST employés |
EquipeResource.java |
API REST équipes |
📊 Modèle de données
Entité Employe
@Entity
@Table(name = "employes")
public class Employe extends PanacheEntityBase {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@Column(name = "nom", nullable = false)
private String nom;
@Column(name = "prenom", nullable = false)
private String prenom;
@Column(name = "email", unique = true)
private String email;
@Column(name = "telephone")
private String telephone;
@Enumerated(EnumType.STRING)
@Column(name = "fonction")
private FonctionEmploye fonction;
@Enumerated(EnumType.STRING)
@Column(name = "statut")
private StatutEmploye statut = StatutEmploye.ACTIF;
@Column(name = "date_embauche")
private LocalDate dateEmbauche;
@Column(name = "taux_horaire", precision = 10, scale = 2)
private BigDecimal tauxHoraire;
@ManyToOne
@JoinColumn(name = "equipe_id")
private Equipe equipe;
@OneToMany(mappedBy = "employe", cascade = CascadeType.ALL)
private List<EmployeCompetence> competences;
}
Enum FonctionEmploye
public enum FonctionEmploye {
CHEF_CHANTIER,
CONDUCTEUR_TRAVAUX,
MACON,
ELECTRICIEN,
PLOMBIER,
CHARPENTIER,
COUVREUR,
PEINTRE,
CARRELEUR,
MENUISIER,
TERRASSIER,
GRUTIER,
MANOEUVRE,
AUTRE
}
Enum StatutEmploye
public enum StatutEmploye {
ACTIF, // Actif et disponible
CONGE, // En congé
ARRET_MALADIE, // Arrêt maladie
FORMATION, // En formation
INACTIF // Inactif (démission, licenciement)
}
🔌 API REST
Endpoints Employés
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /api/v1/employes |
Liste employés |
| GET | /api/v1/employes/{id} |
Détails |
| POST | /api/v1/employes |
Créer |
| PUT | /api/v1/employes/{id} |
Modifier |
| DELETE | /api/v1/employes/{id} |
Supprimer |
| GET | /api/v1/employes/disponibles |
Employés disponibles |
| GET | /api/v1/employes/fonction/{fonction} |
Par fonction |
| GET | /api/v1/employes/stats |
Statistiques |
Endpoints Équipes
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /api/v1/equipes |
Liste équipes |
| GET | /api/v1/equipes/{id} |
Détails |
| POST | /api/v1/equipes |
Créer |
| PUT | /api/v1/equipes/{id} |
Modifier |
| POST | /api/v1/equipes/{id}/membres |
Ajouter membre |
| DELETE | /api/v1/equipes/{id}/membres/{employeId} |
Retirer membre |
💻 Exemples
Créer un employé
curl -X POST http://localhost:8080/api/v1/employes \
-H "Content-Type: application/json" \
-d '{
"nom": "Martin",
"prenom": "Pierre",
"email": "pierre.martin@btpxpress.fr",
"telephone": "+33 6 12 34 56 78",
"fonction": "MACON",
"dateEmbauche": "2025-01-15",
"tauxHoraire": 25.00,
"competences": [
{
"nom": "Maçonnerie traditionnelle",
"niveau": "EXPERT"
},
{
"nom": "Coffrage",
"niveau": "CONFIRME"
}
]
}'
Créer une équipe
curl -X POST http://localhost:8080/api/v1/equipes \
-H "Content-Type: application/json" \
-d '{
"nom": "Équipe Gros Œuvre A",
"chefEquipeId": "employe-uuid",
"membreIds": ["uuid1", "uuid2", "uuid3"]
}'
Employés disponibles
curl -X GET http://localhost:8080/api/v1/employes/disponibles
Réponse:
[
{
"id": "uuid",
"nom": "Martin",
"prenom": "Pierre",
"fonction": "MACON",
"statut": "ACTIF",
"equipe": "Équipe Gros Œuvre A",
"competences": ["Maçonnerie", "Coffrage"]
}
]
🔧 Services métier
EmployeService
Méthodes principales:
findAll()- Tous les employésfindDisponibles()- Employés disponiblesfindByFonction(FonctionEmploye)- Par fonctioncreate(EmployeDTO)- Créerupdate(UUID id, EmployeDTO)- ModifierchangerStatut(UUID id, StatutEmploye)- Changer statut
EquipeService
Méthodes principales:
create(EquipeDTO)- Créer équipeajouterMembre(UUID equipeId, UUID employeId)- Ajouter membreretirerMembre(UUID equipeId, UUID employeId)- Retirer membre
📈 Relations
- EQUIPE ⬅️ Un employé appartient à une équipe
- CHANTIER ➡️ Un employé peut être affecté à des chantiers
- USER ⬅️ Un employé peut avoir un compte utilisateur
✅ Validations
- ✅ Nom et prénom obligatoires
- ✅ Email unique
- ✅ Fonction obligatoire
- ✅ Taux horaire positif
- ✅ Date d'embauche cohérente
Dernière mise à jour: 2025-09-30
Version: 1.0