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
80 lines
2.2 KiB
Java
80 lines
2.2 KiB
Java
package dev.lions.btpxpress.view;
|
|
|
|
import jakarta.annotation.PostConstruct;
|
|
import jakarta.enterprise.context.SessionScoped;
|
|
import jakarta.inject.Named;
|
|
import lombok.Getter;
|
|
import lombok.Setter;
|
|
|
|
import java.io.Serializable;
|
|
|
|
/**
|
|
* Bean de session pour gérer les informations de l'utilisateur connecté.
|
|
*
|
|
* <p>Ce bean stocke les informations de session de l'utilisateur authentifié,
|
|
* telles que le nom, l'email, l'avatar, et les statistiques rapides.</p>
|
|
*
|
|
* @author BTP Xpress Team
|
|
* @version 1.0
|
|
*/
|
|
@Named("userSession")
|
|
@SessionScoped
|
|
@Getter
|
|
@Setter
|
|
public class UserSessionBean implements Serializable {
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
private String nomComplet;
|
|
private String email;
|
|
private String avatarUrl;
|
|
private String role;
|
|
private int nombreNotificationsNonLues;
|
|
private int nombreMessagesNonLus;
|
|
|
|
/**
|
|
* Initialise les données de l'utilisateur connecté.
|
|
*/
|
|
@PostConstruct
|
|
public void init() {
|
|
// TODO: Récupérer depuis le token JWT ou la session OIDC
|
|
nomComplet = "Jean Dupont";
|
|
email = "jean.dupont@btpxpress.com";
|
|
avatarUrl = "/resources/freya-layout/images/avatar-profilemenu.png";
|
|
role = "Gestionnaire de Projets";
|
|
nombreNotificationsNonLues = 5;
|
|
nombreMessagesNonLus = 3;
|
|
}
|
|
|
|
/**
|
|
* Retourne les initiales de l'utilisateur pour l'avatar.
|
|
*
|
|
* @return Les initiales (ex: "JD" pour "Jean Dupont")
|
|
*/
|
|
public String getInitiales() {
|
|
if (nomComplet == null || nomComplet.trim().isEmpty()) {
|
|
return "U";
|
|
}
|
|
|
|
String[] parts = nomComplet.trim().split("\\s+");
|
|
if (parts.length >= 2) {
|
|
return String.valueOf(parts[0].charAt(0)).toUpperCase() +
|
|
String.valueOf(parts[1].charAt(0)).toUpperCase();
|
|
} else if (parts.length == 1) {
|
|
return parts[0].substring(0, Math.min(2, parts[0].length())).toUpperCase();
|
|
}
|
|
return "U";
|
|
}
|
|
|
|
/**
|
|
* Action de déconnexion.
|
|
*
|
|
* @return La page de login
|
|
*/
|
|
public String deconnecter() {
|
|
// TODO: Implémenter la déconnexion OIDC/Keycloak
|
|
return "/login?faces-redirect=true";
|
|
}
|
|
}
|
|
|