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

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-push ou 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
  • 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 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 le système de permission de notifications (AC: #1)

    • Créer la table notification_preferences dans 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 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 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
  • 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.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)