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

View File

@@ -0,0 +1,85 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
lang="fr">
<h:head>
<f:facet name="first">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
<link rel="icon" href="#{request.contextPath}/resources/freya-layout/images/favicon.ico" type="image/x-icon"/>
</f:facet>
<title>Connexion - BTP Xpress</title>
<h:outputStylesheet name="css/primeicons.css" library="freya-layout" />
<h:outputStylesheet name="css/primeflex.min.css" library="freya-layout" />
<h:outputStylesheet name="css/layout-light.css" library="freya-layout" />
<h:outputStylesheet name="css/freya-purple-light.css" library="freya-layout" />
</h:head>
<h:body class="login-body">
<div class="login-wrapper">
<div class="login-container">
<div class="login-left">
<div class="login-content">
<h1>BTP Xpress</h1>
<p class="subtitle">Votre plateforme de gestion BTP</p>
<p>Gérez vos projets, clients, matériels et équipes en toute simplicité.</p>
</div>
</div>
<div class="login-right">
<div class="login-box">
<h2>Connexion</h2>
<p class="login-subtitle">Connectez-vous à votre compte</p>
<h:form id="loginForm">
<div class="login-input-group">
<label for="username">Nom d'utilisateur ou email</label>
<p:inputText id="username"
value="#{loginView.username}"
placeholder="Votre nom d'utilisateur"
required="true"
requiredMessage="Le nom d'utilisateur est requis"
styleClass="ui-input-filled"
style="width: 100%;"/>
</div>
<div class="login-input-group">
<label for="password">Mot de passe</label>
<p:password id="password"
value="#{loginView.password}"
placeholder="Votre mot de passe"
required="true"
requiredMessage="Le mot de passe est requis"
feedback="false"
toggleMask="true"
styleClass="ui-input-filled"
style="width: 100%;"/>
</div>
<div class="login-options">
<p:selectBooleanCheckbox id="rememberMe"
value="#{loginView.rememberMe}"
label="Se souvenir de moi"/>
<a href="#" style="text-decoration: none; color: var(--primary-color);">Mot de passe oublié ?</a>
</div>
<p:commandButton value="Se connecter"
icon="pi pi-sign-in"
action="#{loginView.login()}"
style="width: 100%; margin-top: 1rem;"
update="@form"
process="@form"/>
<p:messages id="messages" showDetail="true" closable="true"/>
</h:form>
</div>
</div>
</div>
</div>
</h:body>
</html>