Logica di Notifica: Input & Permessi
Il microservizio Notification gestisce l'invio multicanale reagendo agli eventi generati dal sistema.
1. Il Flusso "Trigger"
-
Analisi a Monte (Events Service)
- Il servizio Events analizza costantemente il flusso GPS.
- Se rileva un problema (es. Overspeed > 130km/h), crea un oggetto evento.
- SCRITTURA: Scrive l'evento sullo stream Redis
events(XADD).
-
Ricezione Immediata (Notification Service)
- Il servizio Notification ascolta lo stream
events(Consumer Groupnotification-consumers). - LETTURA: Appena appare un messaggio, si attiva (
_process_event).
- Il servizio Notification ascolta lo stream
-
Verifica Permessi e Invio
- Il servizio controlla le impostazioni specifiche del dispositivo (
DeviceNotificationSettings). - Se un canale (Email, Push, Call) è disabilitato per quel dispositivo, l'invio viene saltato.
- Se abilitato, procede all'invio tramite il provider esterno (Firebase, SMTP, Bland AI).
- Il servizio controlla le impostazioni specifiche del dispositivo (
2. Gerarchia delle Impostazioni
Il sistema applica una logica "a imbuto" per decidere se inviare:
- Accesso Dispositivo: L'utente ha accesso a questo dispositivo? (Tabella
user_device_permissions) - Impostazioni Utente Globali: L'utente ha abilitato le notifiche in generale? (
NotificationSettings) - Impostazioni Dispositivo Specifiche: L'utente ha silenziato questo dispositivo specifico per questo canale? (
DeviceNotificationSettings- FIXED)- Email: Controlla
email_enabled - Push: Controlla
push_enabled - Call: Controlla
call_enabled
- Email: Controlla
3. Perchè Redis?
Usare Redis qui è fondamentale per la velocità:
- Meccanismo Push: l'evento arriva in millisecondi.
- Disaccoppiamento totale tra chi genera l'allarme (Events) e chi lo spedisce (Notification).