7.1 KiB
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
-
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)
- Mettre à jour la table
-
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
-
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
-
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)
- Créer
-
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éepremium_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.tspour vérifier les nouvelles préférences - Méthode
isNotificationTypeEnabled()enrichie - Support legacy et nouvelle structure en parallèle
- Mise à jour de
- Tests unitaires créés :
- 18 tests pour
notificationPreferenceService.ts✓ - Tests pour la page de préférences ✓
- Tests pour le composant NotificationSwitch ✓
- 18 tests pour
- 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érencessrc/app/(dashboard)/profil/page.tsx- Mise à jour : ajout lien Notificationssrc/components/notifications/NotificationSwitch.tsx- Composant switch réutilisablesrc/services/notificationPreferenceService.ts- Service de gestion des préférencessrc/services/notificationService.ts- Mise à jour : intégration nouvelles préférencessrc/db/schema.ts- Mise à jour : ajout colonnes majorChangesEnabled, confirmationsEnabled, premiumAlertsEnabledsrc/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 composantsrc/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