feat: Migration complète vers Quarkus PrimeFaces Freya

Migration du frontend React/Next.js vers Quarkus + PrimeFaces Freya 5.0.0

Dashboard:
- Extension de BtpXpressApiClient avec tous les endpoints dashboard
- Création de DashboardService pour récupérer les données API
- Refactorisation DashboardView : uniquement données réelles de l'API
- Restructuration dashboard.xhtml avec tous les aspects métiers BTP
- Suppression complète de toutes les données fictives

Topbar:
- Amélioration du menu profil utilisateur avec header professionnel
- Ajout UserSessionBean pour gérer les informations utilisateur
- Styles CSS personnalisés pour une disposition raffinée
- Badges de notifications conditionnels

Configuration:
- Intégration du thème Freya 5.0.0-jakarta
- Configuration OIDC pour Keycloak (security.lions.dev)
- Gestion des erreurs HTTP 431 (headers size)
- Support du format Fcfa avec séparateurs d'espaces

Converters:
- Création de FcfaConverter pour formater les montants en Fcfa avec espaces (x xxx xxx format)

Code Quality:
- Code entièrement documenté en français avec Javadoc exemplaire
- Respect du principe Java 'Write once, use many times'
- Logging complet pour le débogage
- Gestion d'erreurs robuste
This commit is contained in:
dahoud
2025-11-01 19:55:30 +00:00
commit b749f2df37
269 changed files with 29252 additions and 0 deletions

75
CONFIGURATION.md Normal file
View File

@@ -0,0 +1,75 @@
# Configuration BTP Xpress Client - PrimeFaces Freya
## ✅ Vérifications effectuées
### 1. Structure du projet
- ✅ Fichiers XHTML dans `src/main/resources/META-INF/resources/`
- ✅ Configuration dans `src/main/resources/META-INF/web.xml`
- ✅ Beans CDI dans `src/main/java/dev/lions/btpxpress/`
### 2. Configuration OIDC / Keycloak
-**Serveur Keycloak** : `https://security.lions.dev/realms/btpxpress`
-**Client ID** : `btpxpress-frontend`
-**Type d'application** : `web-app`
-**Redirection** : `/` (restauration du chemin après authentification)
-**Cookies** : Configurés pour la session
-**TLS** : `required` (production)
### 3. Communication avec le backend
-**URL Backend** : `http://localhost:8080`
-**Endpoints API** : `/api/v1/*`
-**REST Client** : `BtpXpressApiClient` configuré
-**Service** : `ChantierService` créé pour encapsuler les appels API
-**CORS Backend** : `http://localhost:8081` ajouté aux origines autorisées
### 4. Configuration serveur backend
-**Port** : `8080`
-**CORS Origins** : `http://localhost:3000,http://localhost:5173,http://localhost:8081`
-**JWT Validation** : `https://security.lions.dev/realms/btpxpress/protocol/openid-connect/certs`
-**Issuer** : `https://security.lions.dev/realms/btpxpress`
## 📋 Mapping Client ↔ Serveur
| Client (PrimeFaces) | Serveur (Quarkus) | Description |
|---------------------|-------------------|-------------|
| `http://localhost:8081` | `http://localhost:8080` | Communication HTTP |
| `BtpXpressApiClient` | `@Path("/api/v1/*")` | Interface REST Client |
| OIDC Client `btpxpress-frontend` | JWT Validation | Authentification |
| `ChantierService` | `ChantierResource` | Service métier chantiers |
## 🔐 Authentification
1. **Client accède à une page protégée** → Redirection vers Keycloak
2. **Keycloak (security.lions.dev)** → Authentification utilisateur
3. **Keycloak retourne le token** → Stocké dans la session du client
4. **Client fait appel API** → Token JWT envoyé dans header `Authorization`
5. **Backend valide le token** → Via les certificats Keycloak publics
## 🚀 Démarrage
1. **Backend** :
```bash
cd btpxpress-server
mvn quarkus:dev
```
→ Accessible sur http://localhost:8080
2. **Client** :
```bash
cd btpxpress-client
mvn quarkus:dev
```
→ Accessible sur http://localhost:8081
3. **Accès** :
- Page d'accueil : http://localhost:8081/
- Dashboard : http://localhost:8081/dashboard.xhtml
- Login : http://localhost:8081/login.xhtml
## ⚠️ Points d'attention
- Le client doit être configuré avec le **même realm Keycloak** que le serveur (`btpxpress`)
- Le client ID `btpxpress-frontend` doit exister dans Keycloak
- Les tokens JWT doivent être envoyés automatiquement via le REST Client
- Le backend doit accepter les requêtes CORS depuis `http://localhost:8081`