Initial commit

This commit is contained in:
dahoud
2025-10-01 01:37:34 +00:00
commit f2bb633142
310 changed files with 86051 additions and 0 deletions

144
docs/concepts/17-USER.md Normal file
View File

@@ -0,0 +1,144 @@
# 👤 CONCEPT: USER
## 📌 Vue d'ensemble
Le concept **USER** gère les utilisateurs, authentification, rôles et permissions via Keycloak.
**Importance**: ⭐⭐⭐⭐⭐ (Concept fondamental)
---
## 🗂️ Fichiers concernés
### **Entités JPA**
| Fichier | Description |
|---------|-------------|
| `User.java` | Entité principale utilisateur |
| `UserRole.java` | Enum (ADMIN, MANAGER, CHEF_CHANTIER, COMPTABLE, OUVRIER) |
| `UserStatus.java` | Enum (ACTIVE, INACTIVE, LOCKED, SUSPENDED) |
| `Permission.java` | Enum permissions |
### **Services**
| Fichier | Description |
|---------|-------------|
| `UserService.java` | Service métier utilisateurs |
| `PermissionService.java` | Service permissions |
### **Resources**
| Fichier | Description |
|---------|-------------|
| `UserResource.java` | API REST utilisateurs |
| `AuthResource.java` | API authentification |
---
## 📊 Modèle de données
```java
@Entity
@Table(name = "users")
public class User extends PanacheEntityBase {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@Column(name = "keycloak_id", unique = true)
private String keycloakId;
@Column(name = "username", unique = true, nullable = false)
private String username;
@Column(name = "email", unique = true, nullable = false)
private String email;
@Column(name = "nom")
private String nom;
@Column(name = "prenom")
private String prenom;
@Enumerated(EnumType.STRING)
@Column(name = "role")
private UserRole role;
@Enumerated(EnumType.STRING)
@Column(name = "status")
private UserStatus status = UserStatus.ACTIVE;
@OneToOne
@JoinColumn(name = "employe_id")
private Employe employe;
}
```
### **Enum UserRole**
```java
public enum UserRole {
ADMIN, // Administrateur système
MANAGER, // Manager/Directeur
CHEF_CHANTIER, // Chef de chantier
COMPTABLE, // Comptable
OUVRIER // Ouvrier
}
```
---
## 🔌 API REST
### **Endpoints**
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| GET | `/api/v1/users` | Liste utilisateurs |
| GET | `/api/v1/users/{id}` | Détails |
| POST | `/api/v1/users` | Créer |
| PUT | `/api/v1/users/{id}` | Modifier |
| DELETE | `/api/v1/users/{id}` | Supprimer |
| GET | `/api/v1/users/me` | Utilisateur connecté |
| POST | `/api/v1/auth/login` | Connexion |
| POST | `/api/v1/auth/logout` | Déconnexion |
---
## 💻 Exemples
### **Créer un utilisateur**
```bash
curl -X POST http://localhost:8080/api/v1/users \
-H "Content-Type: application/json" \
-d '{
"username": "jdupont",
"email": "jean.dupont@btpxpress.fr",
"nom": "Dupont",
"prenom": "Jean",
"role": "CHEF_CHANTIER",
"password": "SecurePass123!"
}'
```
### **Utilisateur connecté**
```bash
curl -X GET http://localhost:8080/api/v1/users/me \
-H "Authorization: Bearer $TOKEN"
```
---
## 🔐 Authentification
L'authentification se fait via **Keycloak** avec OAuth2/OIDC :
1. L'utilisateur se connecte via Keycloak
2. Keycloak retourne un JWT token
3. Le token est envoyé dans le header `Authorization: Bearer <token>`
4. Le backend valide le token auprès de Keycloak
---
**Dernière mise à jour**: 2025-09-30
**Version**: 1.0