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é. * *

Ce bean stocke les informations de session de l'utilisateur authentifié, * telles que le nom, l'email, l'avatar, et les statistiques rapides.

* * @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"; } }