159 lines
7.1 KiB
Markdown
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
|