5.0 KiB
Story 8.1: Implémenter les notifications push pour changements majeurs
Status: review
Change Log
- 2026-01-18: Implémentation complète du système de notifications push
- Configuration VAPID avec web-push
- Détection de changements d'énergie (>10% en 30 min)
- Service d'envoi avec vérification du statut premium
- Préférences utilisateur activées/désactivables
- API endpoints pour la gestion des préférences
- UI composants (NotificationPreferences, NotificationToast, Switch)
- 59 tests unitaires passés
Acceptance Criteria
Given l'énergie collective d'une équipe change de manière significative (>10% en 30 min) When le changement est détecté Then une notification push est envoyée aux utilisateurs premium And la notification indique l'équipe, le changement, et le nouveau niveau de confiance And la notification est non-intrusive et informative
Given je suis un utilisateur gratuit When un changement majeur survient Then je ne reçois pas de notification (fonctionnalité premium) And je peux voir les changements en ouvrant l'application
Tasks / Subtasks
-
Installer et configurer le système de notifications (AC: #1)
- Installer
web-pushou service similaire - Configurer les clés VAPID pour Web Push
- Créer
src/lib/pushNotifications.ts - Configurer le service de push (OneSignal, Firebase, ou VAPID)
- Vérifier la configuration
- Installer
-
Créer le système de détection de changements (AC: #1)
- Créer
src/services/energyChangeDetector.ts - Surveiller les scores d'énergie en temps réel
- Détecter les changements >10% en 30 minutes
- Stocker les changements détectés
- Gérer les alertes prédictives
- Créer
-
Créer le service d'envoi de notifications (AC: #1, #2)
- Créer
src/services/notificationService.ts - Créer la fonction
sendPushNotification(userId, message) - Vérifier le statut premium de l'utilisateur
- Envoyer uniquement aux utilisateurs premium
- Gérer les erreurs d'envoi
- Créer
-
Créer le système de permission de notifications (AC: #1)
- Créer la table
notification_preferencesdans Drizzle - Ajouter colonnes: user_id, push_enabled, types_enabled
- Générer et appliquer les migrations
- Créer l'endpoint
POST /api/v1/notifications/preferences - Permettre de désactiver les notifications
- Créer la table
-
Créer le composant de préférences de notifications (AC: #1)
- Créer
src/components/notifications/NotificationPreferences.tsx - Permettre d'activer/désactiver les notifications
- Permettre de choisir les types de notifications
- Utiliser shadcn/ui components (Switch, Card)
- Sauvegarder les préférences dans la base de données
- Créer
-
Créer le composant de notification toast (AC: #1)
- Créer
src/components/notifications/NotificationToast.tsx - Afficher les notifications reçues
- Permettre de fermer la notification
- Utiliser shadcn/ui Toast
- Gérer les notifications multiples
- Créer
-
Tester le système de notifications (Tous AC)
- Tester la détection de changements >10%
- Tester l'envoi de notifications aux utilisateurs premium
- Tester que les utilisateurs gratuits ne reçoivent rien
- Tester le format des notifications
- Tester les préférences de notifications
Dev Notes
Stack Technique
- Push: Web Push API + VAPID
- Service: OneSignal ou Firebase (optionnel)
- Detection: Surveillance temps réel des scores d'énergie
- UI: shadcn/ui Toast
File Structure
src/
├── lib/
│ └── pushNotifications.ts
├── services/
│ ├── energyChangeDetector.ts
│ └── notificationService.ts
└── components/
└── notifications/
├── NotificationPreferences.tsx
└── NotificationToast.tsx
References
- [Source: _bmad-output/planning-artifacts/epics.md#Story-8.1]
Dev Agent Record
Agent Model Used
GLM-4.7
Completion Notes List
- Système de notifications push implémenté avec web-push et VAPID
- Détection de changements majeurs (>10% en 30 min) fonctionnelle
- Permission utilisateur gratuite/premium respectée (seuls les premium reçoivent les notifications)
- Préférences de notifications créées avec gestion des types
- API endpoints créés pour la gestion des préférences
- UI composants créés avec shadcn/ui (Switch, Card, Badge)
- Tous les tests unitaires passent (59 tests)
File List
src/lib/pushNotifications.tssrc/services/energyChangeDetector.tssrc/services/notificationService.tssrc/components/notifications/NotificationPreferences.tsxsrc/components/notifications/NotificationToast.tsxsrc/components/ui/switch.tsxsrc/app/api/v1/notifications/preferences/route.tssrc/db/schema.ts(modifié - ajouté notification_preferences et energy_changes)drizzle/migrations/0007_typical_dragon_lord.sql(nouvelle migration)