Système de Notifications Push & Email
Ce document décrit le système de notifications push et email pour les positions fermées.📋 Vue d’ensemble
Le système de notification permet d’envoyer des alertes aux utilisateurs lorsque leurs positions swing sont fermées. Les notifications incluent:- Type de position: LONG ou SHORT
- Performance: Profit/Perte en USDT et en pourcentage
- Détails: Prix d’entrée, prix de sortie, raison de fermeture
- État: Position gagnante 🎉 ou perdante ❌
🔧 Architecture
Backend
-
NotificationService (
packages/functions/src/NotificationService.ts)- Service principal gérant l’envoi des notifications
- Support Email (Mailjet) et Push (Web Push API)
- Gestion des préférences utilisateur
- Gestion des souscriptions push
-
SwingPositionService
- Intégration des notifications lors de la fermeture des positions
- Appelle automatiquement
NotificationServicequand une position devientCLOSED
-
Routes tRPC (
packages/functions/src/trpc/router-notifications.ts)getPreferences: Récupérer les préférences utilisateurupdatePreferences: Mettre à jour les préférencessubscribePush: S’abonner aux notifications pushunsubscribePush: Se désabonnergetPushSubscriptions: Lister les souscriptions activesgetVapidPublicKey: Obtenir la clé publique VAPID
Frontend
-
Page de paramètres (
frontend/app/pages/settings/notifications.vue)- Interface pour configurer les préférences de notification
- Activation/désactivation des notifications email et push
- Gestion automatique de l’abonnement push
-
Composable (
frontend/app/composables/usePushNotifications.ts)- API JavaScript pour gérer les notifications push
- Enregistrement du Service Worker
- Gestion des souscriptions
-
Service Worker (
frontend/app/public/sw.js)- Réception et affichage des notifications push
- Gestion des clics sur les notifications
Base de données
-
NotificationPreferences
- Stocke les préférences de chaque utilisateur
- Champs:
emailOnPositionClosed,pushOnPositionClosed, etc.
-
PushSubscription
- Stocke les souscriptions push des utilisateurs
- Permet d’envoyer des notifications à plusieurs appareils
🚀 Configuration
1. Générer les clés VAPID
Les clés VAPID sont nécessaires pour l’authentification avec les services push des navigateurs.2. Configurer les secrets SST
Ajoutez les secrets générés à votre configuration SST:3. Configurer Mailjet (si pas déjà fait)
Les secrets Mailjet sont nécessaires pour l’envoi d’emails:4. Mettre à jour le schéma Prisma
Appliquez les migrations pour créer les nouvelles tables:📱 Utilisation
Pour l’utilisateur
- Configurer les préférences
- Aller dans Paramètres → Notifications
- Activer “Email - Position fermée” pour recevoir des emails
- Activer “Push - Position fermée” pour recevoir des notifications push
- Notifications push
- Lors de l’activation, le navigateur demandera la permission
- Accepter pour recevoir les notifications
- Les notifications apparaîtront même quand l’application est fermée
Format des notifications
Push
🔍 Test
Tester les notifications email
Tester les notifications push
- Activer les notifications push dans les paramètres
- Utiliser l’outil de test dans le navigateur:
🐛 Debugging
Vérifier les logs
Problèmes courants
-
“Clés VAPID non configurées”
- Vérifier que les secrets VAPID sont bien définis
- Redémarrer l’application après l’ajout des secrets
-
“Permission refusée”
- L’utilisateur a refusé les notifications
- Lui demander de réactiver dans les paramètres du navigateur
-
“Notifications non reçues”
- Vérifier que la souscription est enregistrée:
$client.notifications.getPushSubscriptions.query() - Vérifier que les préférences sont activées
- Vérifier les logs côté serveur
- Vérifier que la souscription est enregistrée:
-
“Email non reçu”
- Vérifier les secrets Mailjet
- Vérifier les logs d’envoi
- Vérifier les spams
🔐 Sécurité
- Les clés VAPID privées ne doivent jamais être exposées au frontend
- Les souscriptions push sont liées à un utilisateur et validées côté serveur
- Les emails contiennent uniquement des informations de trading (pas de données sensibles)
📊 Performance
- Les notifications sont envoyées de manière asynchrone (non-bloquant)
- Les souscriptions invalides sont automatiquement nettoyées
- Les emails sont envoyés via Mailjet (haute délivrabilité)
🚧 Améliorations futures
- Support de plusieurs types de notifications (nouveau signal, alerte prix, etc.)
- Personnalisation des templates d’email
- Support de Telegram et Discord
- Statistiques de délivrabilité
- Tests automatisés