# utils/notification_handler.py (fichier en relation avec profile.py) import streamlit as st from utils.email_utils import send_email from utils.admin import supabase from datetime import datetime import pytz import logging def send_user_notification(user_id: int, notification_type: str, message: str) -> bool: """ Envoie une notification à l'utilisateur en respectant ses préférences """ try: logging.info(f"Début de l'envoi de notification pour user_id: {user_id}, type: {notification_type}") # Récupérer les préférences de l'utilisateur user_prefs = supabase.table("notification_preferences").select("*").eq("user_id", user_id).execute() user_info = supabase.table("users").select("email").eq("id", user_id).execute() if not user_prefs.data: logging.error(f"Aucune préférence trouvée pour user_id: {user_id}") return False if not user_info.data: logging.error(f"Aucun utilisateur trouvé pour user_id: {user_id}") return False prefs = user_prefs.data[0] user_email = user_info.data[0]['email'] logging.info(f"Préférences trouvées pour {user_email}: {prefs}") # Vérifier si les notifications sont activées pour ce type if notification_type == "security" and not prefs['security_alerts']: logging.info(f"Alertes de sécurité désactivées pour {user_email}") return False elif notification_type == "assistant" and not prefs['assistant_updates']: logging.info(f"Mises à jour assistant désactivées pour {user_email}") return False elif notification_type == "daily" and not prefs['daily_summary']: logging.info(f"Résumé quotidien désactivé pour {user_email}") return False # Si les notifications par email sont activées logging.info(f"Envoi d'email à {user_email}") success = send_email(user_email, f"Notification - {notification_type.capitalize()}", f"""

Notification {notification_type}

{message}

Date : {datetime.now(pytz.UTC).strftime('%Y-%m-%d %H:%M:%S UTC')}

""") if success: logging.info(f"Email envoyé avec succès à {user_email}") else: logging.error(f"Échec de l'envoi de l'email à {user_email}") return success except Exception as e: logging.error(f"Erreur lors de l'envoi de la notification : {str(e)}") logging.error(f"Traceback complet : ", exc_info=True) return False def notify_security_alert(user_id: int, message: str) -> bool: """Envoie une alerte de sécurité""" return send_user_notification(user_id, "security", message) def notify_assistant_update(user_id: int, message: str) -> bool: """Envoie une notification de mise à jour des assistants""" return send_user_notification(user_id, "assistant", message) def send_daily_summary(user_id: int, summary_data: dict) -> bool: """Envoie le résumé quotidien""" message = f""" Résumé de vos activités : - Nombre de conversations : {summary_data.get('conversations', 0)} - Questions posées : {summary_data.get('questions', 0)} - Temps total d'utilisation : {summary_data.get('usage_time', '0')} minutes """ return send_user_notification(user_id, "daily", message)