package dev.lions.btpxpress.service; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.core.Response; import org.eclipse.microprofile.rest.client.inject.RestClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * Service de gestion des messages côté client. *

* Ce service encapsule la communication avec l'API backend pour les opérations * liées aux messages. *

* * @author BTP Xpress Development Team * @version 1.0.0 * @since 1.0.0 */ @ApplicationScoped public class MessageService { private static final Logger LOG = LoggerFactory.getLogger(MessageService.class); @Inject @RestClient BtpXpressApiClient apiClient; /** * Récupère le nombre de messages non lus pour un utilisateur. * * @param userId L'identifiant de l'utilisateur (UUID en String). * @return Le nombre de messages non lus, ou 0 en cas d'erreur. */ public int getUnreadCount(String userId) { try { LOG.debug("Récupération du nombre de messages non lus pour l'utilisateur : {}", userId); Response response = apiClient.getMessagesNonLus(userId); if (response.getStatus() == Response.Status.OK.getStatusCode()) { @SuppressWarnings("unchecked") List> messages = response.readEntity(List.class); int count = messages != null ? messages.size() : 0; LOG.debug("Nombre de messages non lus : {}", count); return count; } else { LOG.warn("Erreur lors de la récupération des messages non lus. Code HTTP : {}", response.getStatus()); return 0; } } catch (Exception e) { LOG.error("Erreur lors de la communication avec l'API backend pour récupérer les messages : {}", e.getMessage(), e); return 0; } } /** * Récupère tous les messages non lus pour un utilisateur. * * @param userId L'identifiant de l'utilisateur (UUID en String). * @return Liste des messages non lus, ou liste vide en cas d'erreur. */ public List> getUnreadMessages(String userId) { try { LOG.debug("Récupération des messages non lus pour l'utilisateur : {}", userId); Response response = apiClient.getMessagesNonLus(userId); if (response.getStatus() == Response.Status.OK.getStatusCode()) { @SuppressWarnings("unchecked") List> messages = response.readEntity(List.class); LOG.debug("Messages non lus récupérés : {} élément(s)", messages != null ? messages.size() : 0); return messages != null ? messages : new ArrayList<>(); } else { LOG.warn("Erreur lors de la récupération des messages. Code HTTP : {}", response.getStatus()); return new ArrayList<>(); } } catch (Exception e) { LOG.error("Erreur lors de la communication avec l'API backend pour récupérer les messages : {}", e.getMessage(), e); return new ArrayList<>(); } } }