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,33 @@
<ui:composition 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">
<ui:param name="formId" value="filtresForm"/>
<ui:param name="viewBean" value=""/>
<ui:param name="tableId" value=""/>
<div class="card">
<h5>Recherche et filtres</h5>
<h:form id="#{formId}">
<ui:insert name="filter-fields">
<!-- Les champs de filtre spécifiques à chaque page -->
</ui:insert>
<div class="col-12">
<p:commandButton value="Rechercher"
icon="pi pi-search"
action="#{viewBean.search()}"
update="#{tableId}"
styleClass="ui-button-primary"/>
<p:commandButton value="Réinitialiser"
icon="pi pi-refresh"
action="#{viewBean.resetFilters()}"
update="#{tableId} #{formId}"
styleClass="ui-button-secondary"/>
</div>
</h:form>
</div>
</ui:composition>

View File

@@ -0,0 +1,43 @@
<ui:composition 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">
<div class="card">
<div class="flex align-items-center justify-content-between mb-3">
<h5>#{title}</h5>
<p:commandButton value="Nouveau"
icon="pi pi-plus"
action="#{viewBean.createNew()}"
styleClass="ui-button-primary"
rendered="#{not empty createPath}"/>
</div>
<h:form id="#{formId}">
<p:dataTable id="#{tableId}"
value="#{viewBean.items}"
var="#{var}"
paginator="true"
rows="10"
rowsPerPageTemplate="10,20,50"
emptyMessage="Aucun résultat trouvé"
loading="#{viewBean.loading}"
selection="#{viewBean.selectedItem}"
selectionMode="single">
<f:facet name="header">
<div class="flex align-items-center justify-content-between">
<span>Total : #{viewBean.items.size()} élément(s)</span>
<p:commandButton icon="pi pi-trash"
title="Supprimer"
disabled="#{empty viewBean.selectedItem}"
action="#{viewBean.delete()}"
update="#{tableId}"
styleClass="ui-button-danger ui-button-text"/>
</div>
</f:facet>
<ui:insert name="columns"/>
</p:dataTable>
</h:form>
</div>
</ui:composition>