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

159 lines
7.1 KiB
Markdown

# 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
- [x] Créer la page de préférences de notifications (AC: #1)
- [x] Créer `src/app/(dashboard)/profil/notifications/page.tsx`
- [x] Afficher les catégories de notifications
- [x] Afficher les switches pour activer/désactiver
- [x] Utiliser shadcn/ui components (Card, Switch, Label)
- [x] Design responsive et moderne
- [x] Créer le système de préférences dans la base de données (AC: #1)
- [x] Mettre à jour la table `notification_preferences`
- [x] Ajouter colonnes: major_changes_enabled, confirmations_enabled, premium_alerts_enabled
- [x] Générer et appliquer les migrations
- [x] Créer les modèles Drizzle correspondants
- [ ] Créer les schémas Pydantic (Backend FastAPI - non requis pour cette story)
- [x] Créer le service de gestion des préférences (AC: #1)
- [x] Créer `src/services/notificationPreferenceService.ts`
- [x] Créer la fonction `updatePreferences(userId, preferences)`
- [x] Créer la fonction `getPreferences(userId)`
- [x] Valider les préférences
- [x] Sauvegarder dans la base de données
- [x] Créer les switches de préférences (AC: #1)
- [x] Créer `src/components/notifications/NotificationSwitch.tsx`
- [x] Créer un switch pour chaque type de notification
- [x] Inclure des descriptions explicatives
- [x] Utiliser shadcn/ui Switch component
- [x] Gérer l'état de chargement
- [x] Créer l'endpoint API pour les préférences (AC: #1)
- [x] Créer `GET /api/v1/notifications/preferences`
- [x] Créer `POST /api/v1/notifications/preferences`
- [ ] Valider les entrées avec Pydantic (Backend FastAPI - non requis pour cette story)
- [x] Retourner les préférences actuelles
- [x] Mettre à jour les préférences
- [ ] Documenter avec Swagger (Backend FastAPI - non requis pour cette story)
- [x] Intégrer les préférences avec le système de notifications (AC: #2)
- [x] Vérifier les préférences avant d'envoyer des notifications
- [x] Respecter les préférences de l'utilisateur
- [x] Ne pas envoyer les notifications désactivées
- [x] Logger les préférences respectées
- [x] Tester le système de préférences (Tous AC)
- [x] Tester l'activation/désactivation des notifications
- [x] Tester que les notifications respectent les préférences
- [x] Tester la sauvegarde des préférences
- [x] Tester la récupération des préférences
- [x] 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