128 lines
5.0 KiB
Markdown
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)
|