File size: 3,649 Bytes
fe4792e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# 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)