chartbastan/_bmad-output/implementation-artifacts/8-1-implémenter-les-notifications-push-pour-changements-majeurs.md
2026-02-01 09:31:38 +01:00

128 lines
5.0 KiB
Markdown

# 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
- [x] Installer et configurer le système de notifications (AC: #1)
- [x] Installer `web-push` ou service similaire
- [x] Configurer les clés VAPID pour Web Push
- [x] Créer `src/lib/pushNotifications.ts`
- [x] Configurer le service de push (OneSignal, Firebase, ou VAPID)
- [x] Vérifier la configuration
- [x] Créer le système de détection de changements (AC: #1)
- [x] Créer `src/services/energyChangeDetector.ts`
- [x] Surveiller les scores d'énergie en temps réel
- [x] Détecter les changements >10% en 30 minutes
- [x] Stocker les changements détectés
- [x] Gérer les alertes prédictives
- [x] Créer le service d'envoi de notifications (AC: #1, #2)
- [x] Créer `src/services/notificationService.ts`
- [x] Créer la fonction `sendPushNotification(userId, message)`
- [x] Vérifier le statut premium de l'utilisateur
- [x] Envoyer uniquement aux utilisateurs premium
- [x] Gérer les erreurs d'envoi
- [x] Créer le système de permission de notifications (AC: #1)
- [x] Créer la table `notification_preferences` dans Drizzle
- [x] Ajouter colonnes: user_id, push_enabled, types_enabled
- [x] Générer et appliquer les migrations
- [x] Créer l'endpoint `POST /api/v1/notifications/preferences`
- [x] Permettre de désactiver les notifications
- [x] Créer le composant de préférences de notifications (AC: #1)
- [x] Créer `src/components/notifications/NotificationPreferences.tsx`
- [x] Permettre d'activer/désactiver les notifications
- [x] Permettre de choisir les types de notifications
- [x] Utiliser shadcn/ui components (Switch, Card)
- [x] Sauvegarder les préférences dans la base de données
- [x] Créer le composant de notification toast (AC: #1)
- [x] Créer `src/components/notifications/NotificationToast.tsx`
- [x] Afficher les notifications reçues
- [x] Permettre de fermer la notification
- [x] Utiliser shadcn/ui Toast
- [x] Gérer les notifications multiples
- [x] Tester le système de notifications (Tous AC)
- [x] Tester la détection de changements >10%
- [x] Tester l'envoi de notifications aux utilisateurs premium
- [x] Tester que les utilisateurs gratuits ne reçoivent rien
- [x] Tester le format des notifications
- [x] 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.ts`
- `src/services/energyChangeDetector.ts`
- `src/services/notificationService.ts`
- `src/components/notifications/NotificationPreferences.tsx`
- `src/components/notifications/NotificationToast.tsx`
- `src/components/ui/switch.tsx`
- `src/app/api/v1/notifications/preferences/route.ts`
- `src/db/schema.ts` (modifié - ajouté notification_preferences et energy_changes)
- `drizzle/migrations/0007_typical_dragon_lord.sql` (nouvelle migration)