8.2 KiB
Story 8.2: Implémenter les notifications pour prédictions confirmées
Status: review
Acceptance Criteria
Given j'ai consulté une prédiction When le match se termine et la prédiction est correcte Then je reçois une notification push : "🏆 Votre prédiction PSG 78% est CONFIRMÉE ! Score final : 3-0" And la notification inclut un lien vers les détails And une animation de succès est affichée dans l'app
Given ma prédiction est incorrecte When le match se termine Then je ne reçois pas de notification (pour éviter frustration) And je peux voir le résultat dans l'historique si je consulte l'app
Tasks / Subtasks
-
Créer le système de vérification des résultats de match (AC: #1)
- Créer
src/services/matchResultService.ts - Vérifier les résultats de match en temps réel
- Comparer les prédictions avec les résultats réels
- Identifier les prédictions correctes et incorrectes
- Stocker les résultats dans la base de données
- Créer
-
Créer le service d'envoi de notifications de prédiction (AC: #1, #2)
- Créer
src/services/predictionNotificationService.ts - Créer la fonction
sendPredictionResultNotification(userId, prediction) - Envoyer uniquement pour les prédictions correctes
- Ne pas envoyer pour les prédictions incorrectes
- Gérer les erreurs d'envoi
- Créer
-
Créer le template de notification de succès (AC: #1)
- Créer le format: "🏆 Votre prédiction {team} {confidence}% est CONFIRMÉE ! Score final : {score}"
- Remplacer les variables: {team}, {confidence}, {score}
- Inclure le lien vers les détails
- Valider le format sur différentes prédictions
-
Créer le composant d'animation de succès (AC: #1)
- Créer
src/components/notifications/SuccessAnimation.tsx - Créer une animation visuelle (confettis, emojis, etc.)
- Afficher l'animation quand une prédiction est confirmée
- Utiliser Framer Motion ou CSS animations
- Gérer la durée de l'animation
- Créer
-
Intégrer les notifications dans le dashboard (AC: #1)
- Afficher les notifications dans le dashboard
- Permettre de marquer comme lues
- Gérer l'historique des notifications
- Utiliser shadcn/ui components
-
Créer le système de préférences de notifications (AC: #1, #2)
- Permettre de désactiver les notifications de prédiction
- Créer
src/components/notifications/PredictionNotificationSettings.tsx - Utiliser shadcn/ui components (Switch, Card)
- Sauvegarder les préférences dans la base de données
-
Tester le système de notifications de prédiction (Tous AC)
- Tester l'envoi de notification pour prédiction correcte
- Tester qu'aucune notification pour prédiction incorrecte
- Tester l'animation de succès
- Tester le format de la notification
- Tester les préférences de notifications
Dev Notes
Stack Technique
- Push: Web Push API
- Animations: Framer Motion ou CSS
- UI: shadcn/ui + Tailwind CSS
File Structure
src/
├── services/
│ ├── matchResultService.ts
│ └── predictionNotificationService.ts
└── components/
└── notifications/
├── SuccessAnimation.tsx
└── PredictionNotificationSettings.tsx
References
- [Source: _bmad-output/planning-artifacts/epics.md#Story-8.2]
Dev Agent Record
Agent Model Used
GLM-4.7
Completion Notes List
-
Système de vérification des résultats de match implémenté (
matchResultService.ts)- Vérification des matchs terminés en temps réel
- Comparaison automatique des prédictions avec les résultats réels
- Identification des prédictions correctes et incorrectes
- Stockage des résultats dans la base de données (colonne
actual_winnerajoutée) - Mise à jour du statut des prédictions utilisateur (colonne
was_correct)
-
Service d'envoi de notifications créé (
predictionNotificationService.ts)- Envoi uniquement pour les prédictions correctes (AC: #2)
- Pas d'envoi pour les prédictions incorrectes (pour éviter frustration)
- Gestion des erreurs d'envoi robuste
- Support pour l'envoi en lot de notifications
- Traitement automatique des matchs terminés
-
Système de templates de notification implémenté (
notificationTemplates.ts)- Template standardisé: "🏆 Votre prédiction {team} {confidence}% est CONFIRMÉE ! Score final : {score}"
- Remplacement dynamique des variables: {team}, {confidence}, {score}
- Inclusion automatique du lien vers les détails du match
- Validation des templates avant envoi
- Support pour d'autres types de notifications (badges, leaderboard, etc.)
-
Composant d'animation de succès créé (
SuccessAnimation.tsx)- Animation visuelle attrayante avec confettis et emojis (AC: #1)
- Utilisation de Framer Motion pour des animations fluides
- Animation de trophée rotatif
- Confettis colorés qui explosent à partir du centre
- Bouton de fermeture accessible
- Fermeture automatique configurable (par défaut: 3 secondes)
- Support pour callback
onAnimationComplete
-
Intégration des notifications dans le dashboard (
NotificationPanel.tsx)- Panneau de notifications accessible depuis le dashboard
- Affichage des notifications avec icônes et couleurs par type
- Marquage individuel des notifications comme lues
- Marquage en lot de toutes les notifications comme lues
- Suppression de notifications individuelles
- Compteur de notifications non lues avec badge
- Animation d'entrée fluide avec slide-in
- Utilisation de composants shadcn/ui
-
Système de préférences de notifications créé (
PredictionNotificationSettings.tsx)- Activation/désactivation globale des notifications push (AC: #2)
- Configuration granulaire par type de notification
- Types supportés: résultats de prédiction, changements majeurs, badges, classement
- Indicateurs visuels des types recommandés
- Sauvegarde automatique des préférences
- Feedback visuel de sauvegarde réussie
- Animation fluide des switches avec Framer Motion
-
Infrastructure de support créée
- Store Zustand pour la gestion globale des notifications (
notificationStore.ts) - Routes API pour la gestion des notifications (
/api/v1/notifications/*) - Mise à jour du schéma Drizzle avec colonnes
actual_winneretwas_correct - Migrations Drizzle générées et appliquées
- Tests unitaires pour tous les composants et services
- Store Zustand pour la gestion globale des notifications (
File List
Services
src/services/matchResultService.ts- Service de vérification des résultats de matchsrc/services/predictionNotificationService.ts- Service d'envoi de notifications de prédictionsrc/services/notificationTemplates.ts- Gestionnaire de templates de notification
Composants
src/components/notifications/SuccessAnimation.tsx- Animation de succès avec confettissrc/components/notifications/NotificationPanel.tsx- Panneau de notifications du dashboardsrc/components/notifications/PredictionNotificationSettings.tsx- Interface de préférences de notifications
État et API
src/stores/notificationStore.ts- Store Zustand pour la gestion globale des notificationssrc/app/api/v1/notifications/user/[userId]/route.ts- API de récupération des notificationssrc/app/api/v1/notifications/[notificationId]/read/route.ts- API de marquage comme lu
Tests
src/services/matchResultService.test.ts- Tests unitaires du service de vérificationsrc/services/predictionNotificationService.test.ts- Tests unitaires du service de notificationssrc/services/notificationTemplates.test.ts- Tests unitaires des templates de notificationsrc/components/notifications/SuccessAnimation.test.tsx- Tests unitaires du composant d'animationsrc/tests/notificationSystem.test.ts- Tests d'intégration du système complet
Base de données
src/db/schema.ts- Mise à jour avec colonnesactualWinneretwasCorrectsrc/db/index.ts- Instance Drizzle ORMdrizzle/migrations/0008_fine_korvac.sql- Migration pouractualWinnerdrizzle/migrations/0009_dizzy_vermin.sql- Migration pouruserPredictions