Spaces:
Sleeping
Sleeping
# 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""" | |
<html> | |
<body> | |
<h2>Notification {notification_type}</h2> | |
<p>{message}</p> | |
<p>Date : {datetime.now(pytz.UTC).strftime('%Y-%m-%d %H:%M:%S UTC')}</p> | |
</body> | |
</html> | |
""") | |
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) |