chartbastan/_bmad-output/implementation-artifacts/8-3-implémenter-la-gestion-des-préférences-de-notifications.md
2026-02-01 09:31:38 +01:00

7.1 KiB

Story 8.3: Implémenter la gestion des préférences de notifications

Status: review

Acceptance Criteria

Given je suis dans les paramètres When j'accède aux préférences de notifications Then je peux activer/désactiver : changements majeurs, confirmations, alertes premium And mes préférences sont sauvegardées And les notifications respectent mes préférences

Tasks / Subtasks

  • Créer la page de préférences de notifications (AC: #1)

    • Créer src/app/(dashboard)/profil/notifications/page.tsx
    • Afficher les catégories de notifications
    • Afficher les switches pour activer/désactiver
    • Utiliser shadcn/ui components (Card, Switch, Label)
    • Design responsive et moderne
  • Créer le système de préférences dans la base de données (AC: #1)

    • Mettre à jour la table notification_preferences
    • Ajouter colonnes: major_changes_enabled, confirmations_enabled, premium_alerts_enabled
    • Générer et appliquer les migrations
    • Créer les modèles Drizzle correspondants
    • Créer les schémas Pydantic (Backend FastAPI - non requis pour cette story)
  • Créer le service de gestion des préférences (AC: #1)

    • Créer src/services/notificationPreferenceService.ts
    • Créer la fonction updatePreferences(userId, preferences)
    • Créer la fonction getPreferences(userId)
    • Valider les préférences
    • Sauvegarder dans la base de données
  • Créer les switches de préférences (AC: #1)

    • Créer src/components/notifications/NotificationSwitch.tsx
    • Créer un switch pour chaque type de notification
    • Inclure des descriptions explicatives
    • Utiliser shadcn/ui Switch component
    • Gérer l'état de chargement
  • Créer l'endpoint API pour les préférences (AC: #1)

    • Créer GET /api/v1/notifications/preferences
    • Créer POST /api/v1/notifications/preferences
    • Valider les entrées avec Pydantic (Backend FastAPI - non requis pour cette story)
    • Retourner les préférences actuelles
    • Mettre à jour les préférences
    • Documenter avec Swagger (Backend FastAPI - non requis pour cette story)
  • Intégrer les préférences avec le système de notifications (AC: #2)

    • Vérifier les préférences avant d'envoyer des notifications
    • Respecter les préférences de l'utilisateur
    • Ne pas envoyer les notifications désactivées
    • Logger les préférences respectées
  • Tester le système de préférences (Tous AC)

    • Tester l'activation/désactivation des notifications
    • Tester que les notifications respectent les préférences
    • Tester la sauvegarde des préférences
    • Tester la récupération des préférences
    • Tester l'endpoint API

Dev Notes

Stack Technique

  • Database: Drizzle + SQLite
  • API: Next.js API routes
  • UI: shadcn/ui + Tailwind CSS
  • Validation: Pydantic

File Structure

src/
├── app/
│   └── (dashboard)/
│       └── profil/
│           └── notifications/page.tsx
├── components/
│   └── notifications/
│       └── NotificationSwitch.tsx
└── services/
    └── notificationPreferenceService.ts

References

  • [Source: _bmad-output/planning-artifacts/epics.md#Story-8.3]

Dev Agent Record

Agent Model Used

GLM-4.7

Completion Notes List

  • Page de préférences de notifications créée (/profil/notifications/page.tsx)
    • Interface moderne et responsive avec shadcn/ui
    • Gestion des trois types de notifications : changements majeurs, confirmations, alertes premium
    • Switch individuels avec descriptions explicatives
    • État de chargement et feedback utilisateur
    • Gestion des erreurs et messages de confirmation
  • Base de données mise à jour avec trois nouvelles colonnes :
    • major_changes_enabled : alertes changements d'énergie (>10% en 30 min)
    • confirmations_enabled : notifications de prédiction confirmée
    • premium_alerts_enabled : offres et fonctionnalités premium
    • Migration créée et appliquée (0010_brave_gambit.sql)
  • Service de gestion des préférences créé (notificationPreferenceService.ts)
    • Fonctions : getPreferences(), updatePreferences(), togglePushNotifications(), toggleNotificationType()
    • Validation des préférences (types, cohérence)
    • Support des valeurs par défaut
    • 18 tests unitaires passés
  • Composant NotificationSwitch créé avec fonctionnalités avancées :
    • Switch réutilisable pour chaque type de notification
    • Indicateurs visuels (icônes, catégories, badge "Activé")
    • Gestion de l'état de chargement
    • Désactivation automatique quand push est désactivé
  • Endpoint API mis à jour pour supporter les nouvelles colonnes
    • GET /api/v1/notifications/preferences : récupérer les préférences
    • POST /api/v1/notifications/preferences : mettre à jour les préférences
    • Support legacy pour types_enabled (compatibilité arrière)
    • Validation et gestion des erreurs
  • Intégration avec le système de notifications :
    • Mise à jour de notificationService.ts pour vérifier les nouvelles préférences
    • Méthode isNotificationTypeEnabled() enrichie
    • Support legacy et nouvelle structure en parallèle
  • Tests unitaires créés :
    • 18 tests pour notificationPreferenceService.ts
    • Tests pour la page de préférences ✓
    • Tests pour le composant NotificationSwitch ✓
  • Navigation mise à jour : ajout du lien "Notifications" dans la page de profil

Change Log

  • 2026-01-18: Implémentation complète du système de gestion des préférences de notifications
    • Page UI créée avec design moderne
    • Base de données mise à jour avec 3 nouvelles colonnes
    • Service de gestion des préférences avec validation
    • Composant NotificationSwitch réutilisable
    • Endpoint API mis à jour pour supporter les nouvelles préférences
    • Intégration avec le système de notifications existant
    • 18 tests unitaires créés et passés
    • Navigation vers la page de notifications ajoutée

File List

Frontend (Next.js)

  • src/app/(dashboard)/profil/notifications/page.tsx - Page de gestion des préférences
  • src/app/(dashboard)/profil/page.tsx - Mise à jour : ajout lien Notifications
  • src/components/notifications/NotificationSwitch.tsx - Composant switch réutilisable
  • src/services/notificationPreferenceService.ts - Service de gestion des préférences
  • src/services/notificationService.ts - Mise à jour : intégration nouvelles préférences
  • src/db/schema.ts - Mise à jour : ajout colonnes majorChangesEnabled, confirmationsEnabled, premiumAlertsEnabled
  • src/app/api/v1/notifications/preferences/route.ts - Mise à jour : support nouvelles colonnes

Tests

  • src/services/notificationPreferenceService.test.ts - Tests du service (18 tests)
  • src/components/notifications/NotificationSwitch.test.tsx - Tests du composant
  • src/app/(dashboard)/profil/notifications/page.test.tsx - Tests de la page

Base de données

  • drizzle/migrations/0010_brave_gambit.sql - Migration pour les nouvelles colonnes